Performance Schemaでネットワーク接続をトラブルシューティング: socket_instances テーブルの活用
MariaDB の Performance Schema socket_instances テーブルは、ソケット接続に関する詳細な情報を提供します。このテーブルは、ネットワーク接続、クライアント接続、サーバー接続を監視する際に役立ちます。
テーブル構成
socket_instances テーブルには、以下の列が含まれます。
- LAST_UPDATE: ソケット情報が最後に更新された時刻。
- START_TIME: ソケットが作成された時刻。
- PHY_IO: ソケットの物理 I/O 統計情報。
- NET_IO: ソケットのネットワーク I/O 統計情報。
- FLAGS: ソケットフラグ。
- ACCEPT_ID: ソケットに関連付けられている Accept ID。
- PROCESS_ID: ソケットに関連付けられているプロセス ID。
- PEER_PORT: ピアポート。
- PEER_ADDRESS: ピアアドレス。
- LOCAL_PORT: ローカルポート。
- LOCAL_ADDRESS: ローカルアドレス。
- STATUS: ソケットの状態。'INIT', 'CONNECT', 'WAIT_READ', 'WAIT_WRITE', 'CLOSE' のいずれかになります。
- SOCKET_ID: ソケット ID。
- EVENT_NAME: イベント名。常に 'socket_instances' です。
パフォーマンス分析
socket_instances テーブルは、以下のタスクのパフォーマンス分析に役立ちます。
- 物理 I/O の分析: ソケットの物理 I/O 統計情報を確認できます。
- ネットワーク I/O の分析: ソケットのネットワーク I/O 統計情報を確認できます。
- サーバー接続の監視: サーバー接続に関連付けられているプロセス ID と Accept ID を確認できます。
- クライアント接続の監視: クライアント接続に関連付けられているプロセス ID と Accept ID を確認できます。
- ネットワーク接続の監視: ソケットの状態、ローカルアドレス、ピアアドレス、ポート番号を確認できます。
プログラミング例
以下の例は、socket_instances テーブルを使用して、すべてのソケット接続のリストを取得する方法を示しています。
SELECT * FROM performance_schema.socket_instances;
以下の例は、特定のソケット ID の情報のみを取得する方法を示しています。
SELECT * FROM performance_schema.socket_instances
WHERE SOCKET_ID = 12345;
以下の例は、すべてのソケット接続のネットワーク I/O 統計情報を取得する方法を示しています。
SELECT NET_IO.* FROM performance_schema.socket_instances;
注意事項
- socket_instances テーブルは、リアルタイムの情報を提供します。ただし、情報はわずかに遅延する可能性があります。
- socket_instances テーブルは、多くの行を含む可能性があります。クエリを実行する前に、テーブルをフィルターすることをお勧めします。
- socket_instances テーブルは、Performance Schema の一部です。Performance Schema を有効にする必要があります。
プログラミング
socket_instances テーブルを使用して、MariaDB ソケット接続に関する詳細な情報を取得できます。この情報は、ネットワーク接続、クライアント接続、サーバー接続を監視するのに役立ちます。
すべてのソケット接続のリストを取得する
SELECT * FROM performance_schema.socket_instances;
説明
このクエリは、socket_instances テーブル内のすべての行を返します。つまり、すべてのソケット接続に関する情報が取得されます。
特定のソケット ID の情報のみを取得する
SELECT * FROM performance_schema.socket_instances
WHERE SOCKET_ID = 12345;
説明
このクエリは、SOCKET_ID が 12345 のソケット接続に関する情報のみを返します。
すべてのソケット接続のネットワーク I/O 統計情報を取得する
SELECT NET_IO.* FROM performance_schema.socket_instances;
説明
このクエリは、socket_instances テーブル内のすべての行の NET_IO 列を返します。つまり、すべてのソケット接続のネットワーク I/O 統計情報が取得されます。
ソケット接続の状態を監視する
SELECT SOCKET_ID, STATUS FROM performance_schema.socket_instances;
説明
このクエリは、socket_instances テーブル内のすべての行の SOCKET_ID 列と STATUS 列を返します。つまり、すべてのソケット接続の状態が取得されます。
クライアント接続を監視する
SELECT SOCKET_ID, PROCESS_ID, ACCEPT_ID
FROM performance_schema.socket_instances
WHERE STATUS = 'WAIT_READ' OR STATUS = 'WAIT_WRITE';
説明
このクエリは、STATUS が 'WAIT_READ' または 'WAIT_WRITE' の socket_instances テーブル内のすべての行の SOCKET_ID 列、PROCESS_ID 列、ACCEPT_ID 列を返します。つまり、すべてのクライアント接続に関する情報が取得されます。
サーバー接続を監視する
SELECT SOCKET_ID, PROCESS_ID, ACCEPT_ID
FROM performance_schema.socket_instances
WHERE STATUS = 'WAIT_READ' OR STATUS = 'WAIT_WRITE'
AND PROCESS_ID = 1;
説明
このクエリは、STATUS が 'WAIT_READ' または 'WAIT_WRITE' であり、PROCESS_ID が 1 の socket_instances テーブル内のすべての行の SOCKET_ID 列、PROCESS_ID 列、ACCEPT_ID 列を返します。つまり、すべてのサーバー接続に関する情報が取得されます。
- Performance Schema は、リアルタイムの情報を提供します。ただし、情報はわずかに遅延する可能性があります。
- Performance Schema は、多くの行を含む可能性があります。クエリを実行する前に、テーブルをフィルターすることをお勧めします。
- 上記のコード例は、MySQL 8.0 を使用しています。他のバージョンの MySQL を使用している場合は、クエリを修正する必要がある場合があります。
Performance Schema モニタリングツールを使用する
Performance Schema モニタリングツールは、socket_instances テーブルを含む Performance Schema テーブルの情報を表示できます。人気のツールには、以下のようなものがあります。
- Percona Toolkit: Percona Toolkit には、Performance Schema を監視するためのコマンドラインツールが含まれています。
- phpMyAdmin: phpMyAdmin には、Performance Schema を監視するための Web インターフェースが含まれています。
- MySQL Workbench: MySQL Workbench には、Performance Schema を監視するためのビジュアルツールが含まれています。
カスタムクエリを作成する
socket_instances テーブルには、多くの列が含まれています。ニーズに合った情報を取得するには、カスタムクエリを作成する必要があります。
サードパーティ製のツールを使用する
socket_instances テーブルの情報を監視するのに役立つサードパーティ製のツールがいくつかあります。人気のツールには、以下のようなものがあります。
- Prometheus: Prometheus は、Performance Schema を含むシステムとアプリケーションのパフォーマンスを監視するためのオープンソースのツールです。
- Datadog: Datadog は、Performance Schema を含むインフラストラクチャとアプリケーションのパフォーマンスを監視する SaaS ソリューションです。
- SolarWinds Database Performance Monitor: SolarWinds Database Performance Monitor は、Performance Schema を含むデータベースのパフォーマンスを監視する商用ツールです。