Javaサーブレットを使用してMysqldbにアクセスするWebアプリを開発していますが、現在開いているDBへの接続数を取得するにはどうすればよいですか?
編集:
「showprocesslist」を試してみましたが、2695159と表示されましたが、正しくありません。この新しいプロジェクトを開発しているだけです。私は唯一のユーザーであり、それほど多くのプロセスを実行できませんでした。必要なのは、アクセスしているユーザー私のプロジェクトのDB、すべてのdbユーザーの数ではなく、テーブルが1つしかないデータベースにログインしているユーザーだけです。
MySQLのバージョンに応じて、選択を実行できます
SELECT COUNT(*) FROM information_schema.PROCESSLIST;
また、ユーザー、データベース、およびホストIP間でwhere
を実行できます。
例えば:
USE information_schema;
SELECT COUNT(*) FROM PROCESSLIST WHERE db ="mycase" AND Host LIKE "192.168.11.174%"
MySQLコマンドを使用できますshow processlist
接続数を取得します。
ただし、同じユーザーIDを使用してデータベースに接続されたもので、サーブレットからのものではない可能性があるものも表示されます。
一般に、接続プールオブジェクト( http://Java-source.net/open-source/connection-pools を参照)を使用して、への接続を管理することをお勧めします。 MySQLサーバー。これにより、DB接続を永続化することでパフォーマンスを向上させることができるため、ページの読み込みごとに新しいDB接続のオーバーヘッドが常に発生するとは限りません。
サーブレットが接続の数を知る必要がある場合、接続プールには、現在アクティブな接続の数を通知するメソッドが付属している必要があります。
次のクエリを実行すると、ホスト名と番号が一覧表示されます。各ホストからの接続の数:
SELECT Host、count(Host)FROM information_schema.processlist GROUP BY Host;
「Threads_connected」のようなステータスを表示するか、「Threads_connected」のようなグローバルステータスを表示します
ユーザーコンテキストでのこれら2つの違いについてはよくわかりません。それでも、アプリからの接続だけでなく、すべての接続が表示されるという問題が発生する可能性があります。
threads_runningをチェックして、実行中のスレッドのみを表示することもできます(スリープしていないなど)。
Information_Schema.Processlist
から自分に属するデータのみを選択できます。これは、rootとしてログインしている場合にのみ監視に使用できることを意味します。そうでない場合は、ログインしたユーザーからの接続が表示されます。
適切な監視SQLが必要な場合は、次のようになります。
SELECT variable_value
FROM INFORMATION_SCHEMA.GLOBAL_STATUS
WHERE variable_name='threads_connected'
プロセスリストを表示
次のようにThreads_connected
変数名からステータスを表示することで、開いている接続をカウントすることもできます。
SHOW STATUS WHERE variable_name = 'Threads_connected';
または、以下のようにinformation_schema.PROCESSLIST
から直接プロセスリストをカウントすることもできます。
SELECT COUNT(*) FROM information_schema.PROCESSLIST;
あなたはこれを使うことができます
グローバルステータスを表示;または「Threads_connected」のようなグローバルステータスを表示します。
接続ステータスから、接続の総数を確認できます。