mysqlコマンドshow processlist詳細


説明
show processlist(show full processlistの詳細表示)superの権限であれば、現在mysqlの下で実行中のすべてのスレッドが表示されます.そうしないと、現在使用しているmysqlアカウントに関連付けられたスレッドのみが表示されます.fullキーを使用しない場合は、各レコードのInfoフィールドに最初の100文字のみが表示されます.show processlistの実行中にtoo many connectionsのエラーが発生した場合.superのアカウントを使用してコマンドを実行することができます.mysqlはsuper特権のアカウントで使用するための追加の接続を保持します.show processlistコマンドを使用して表示するだけでなく、mysqlのシステムデータベースinformation_に直接行くこともできます.schemaのprocesslistテーブルに関連レコードが表示されます.実行後は以下のようになります(ここでは一部の情報だけを切り取って効果を見ればいいです):
mysql> show processlist;
+-------+-------------+-----------------+---------+---------+------+--------------------------+-----------------------------------------------------------------------------------------------------+----------+
| Id    | User        | Host            | db      | Command | Time | State                    | Info                                                                                                | Progress |
+-------+-------------+-----------------+---------+---------+------+--------------------------+-----------------------------------------------------------------------------------------------------+----------+
|     1 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge coordinator | NULL                                                                                                |        0 |
|     2 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     3 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     4 | system user |                 | NULL    | Daemon  | NULL | InnoDB purge worker      | NULL                                                                                                |        0 |
|     5 | system user |                 | NULL    | Daemon  | NULL | InnoDB shutdown handler  | NULL                                                                                                |        0 |
|    40 | com_neal    | localhost:49317 | board   | Sleep   |    0 |                          | NULL                                                                                                |        0 |
| 16798 | com_neal    | localhost:57979 | mes2019 | Sleep   |    0 |                          | NULL                                                                                                |        0 |
| 16810 | com_neal    | localhost:59799 | hermes  | Sleep   |  766 |                          | NULL                                                                                                |        0 |
| 16811 | com_neal    | localhost:59991 | mes2019 | Query   |    0 | Updating                 | update summary_change
        set summary_data = json_array_append(summary_data, '$', json_extract(_ |        0 |
38 rows in set

各列の意味は次のとおりです.
1.Id:接続識別子、(kill[id]のコマンドで、指定されたidに対応するスレッドを殺すことができます.注意:慎重に操作してください!)2.User:接続を開始したユーザーは、system userの値がサーバーで生成された非クライアントスレッドを表します.3.Host:接続を開始するクライアントホスト名.4.db:この接続で使用されるデータベースを開始します.5.Command:Sleep,Query,Connectなど、現在接続中のコマンドタイプ.6.Time:接続が現在の実行状態にある時間(秒単位)7.State:接続が実行中の操作状態で、ほとんどの操作は非常に高速です.接続がある状態に長すぎる場合は、調査が必要な問題がある可能性があります.8.Info:実行中のsqlが表示され、sqlが実行されていない場合NULLが表示されます.問題sql(クエリに時間がかかるsql)を判断する重要な根拠である.
まとめ
通常show processlistを使用してmysql接続数を表示する場合は、接続数を一定の範囲に保つ必要があります.接続数が増加傾向にある場合は、アプリケーション・サービスがデータベースとの接続操作を確立するたびに正常に接続を閉じていないため、大量のSleep接続が発生している可能性があります.接続数が一定数より大きい場合(max_connectionsより大きい場合はshow variables like'max_connections;表示)mysqlサービスで接続を再作成するとtoo many connectionsのエラーが発生します.このとき、データベースを操作した後、接続を閉じていない場合があるかどうかを確認する必要があります.現在使用されているORMフレームワーク、例えばMybatis、Hibernateは、トランザクションを手動で処理しない場合、自動的に接続を閉じる操作が一般的です.もちろんtoo many connectionsのエラーは、max_のせいかもしれません.connectionsが小さすぎるため、このときmaxを適切に調整することができます.connectionsサイズ設定方法.