どうしたの?
インデックスの最適化、データベースのロック、マスターとスレーブのレプリケーションなど、MySQLに関する記事はすでにたくさん書いてきました。今日は、最適化手法の1つ、show processlist - 現在のデータベース接続すべてのセッションステータスを確認する方法について説明します。これは、各SQLスレッドの実行状態を確認するのに役立ちます。
show processlist
構文
異なるユーザーは自分のデータしか見ることができませんので、すべてのデータを見たい場合は管理者クエリーを使用してください。
show processlist;
リターン結果フィールドの説明
アイド
SQL プロセスの ID は、SQL プロセスを終了させる必要がある場合は
User
現在接続中のユーザー
Host
IPとポート
db
データベース名
命令
接続状態、一般的に休眠、クエリ、接続、SQLステートメントは、クエリの状態であり、時間の時間が非常に長い場合は、問題があることを示します
時
接続状態の継続時間(秒
状態
最適化のための重要なパラメータ。
インフォメーション
現在実行されているSQL文を表示します。
state
状態は最適化において重要なフィールドであり、SQLスレッドの現在の状態に関する多くの情報を提供し、問題の特定や分析に役立ちます。以下は状態の一般的なフィールドのリストです。
状態
説明: リソースが解放されていないことを意味します。 コネクション・プールを介してデータベースに接続している場合、状態は安定した範囲にあるはずです。SQL要求が多く、データベース接続を閉じるのを忘れると、多くの接続要求がブロックされ、データベースがハングします。
けんざんひょう
説明:データテーブルをチェック中で、この操作はシステムによって自動化されています。
クロージングテーブル
説明: テーブル内の変更されたデータがディスクにフラッシュされ、その後削除されたテーブルがクローズされることを示しています。
最適化のヒント:プロセスが遅い場合は、ディスクがいっぱいなのか、ディスクが多くのIOオペレーションを行っているのかなどを確認する必要があります。
コネクトアウト
説明:マスター-スレーブ・レプリケーションでは、スレーブ・サーバーはマスター・サーバーに接続しています。
tmpテーブルの作成
説明:クエリ結果を一時的に保存するために一時テーブルが作成されています。
ディスク上のtmpテーブルへのコピー
説明: order by、group byまたはjoinクエリを使用すると、一時テーブルの作成から、データが大きすぎる場合、それはハードディスクにメモリ内の一時テーブルのデータを格納します。
最適化の推奨事項:第一に、インデックスを最適化し、一時テーブルの作成を最小限にします。時間のかかるSQLロジックの一部をJavaコードで実装することができます。3つ目:tmp_table_sizeとmax_heap_table_sizeパラメータを調整して、メモリ内の一時テーブルのサイズを大きくすることができます。
水洗トイレ
テーブルの更新を実行し、他のスレッドがデータベーステーブルを閉じるのを待ちます。
殺された
説明: kill要求がスレッドに送信されると、スレッドはkillフラグをチェックし、次のkill要求を中止します。 mySQLはメインループ内で毎回killフラグをチェックしますが、場合によってはスレッドが死ぬまでに少し時間がかかることがあります。スレッドが他のスレッドによってロックされている場合、ロックが解除されるとすぐにkill要求が有効になります。
データ送信
説明: このフィールドは文字どおり非常に誤解を招きやすいもので、ほとんどの人はデータをクライアントに送信しているだけだと思っていますが、実際には collect + send です。MySQL がインデックスを使用したクエリの後に大量の行 ID を取得する場合、クエリのカラムの一部がインデックスにない場合、MySQL はその ID がある行に移動し、データを取り出してクライアントに返す必要があります。
グループ / オーダーのソート
説明: SQL 文では、並べ替えに group と order を使用しています。
最適化の推奨:テンポラリ・テーブルを作成したり、ファイル内でソートしたりするケースがある場合、より時間のかかるケースはインデックスを最適化する必要があります。
ネット待ち/ネットからの読み込み/ネットへの書き込み
説明:主に、データベースのネットワーク接続とトラフィックの状態を確認するために、大量の発生などのネットワーク状態の説明
最適化の提案:たとえば、外部トラフィックがデータベースを攻撃すると、ネットワーク帯域幅がいっぱいになり、大量の接続要求がデータベースにヒットしてデータベースがクラッシュします。
鍵付き
説明:テーブル・ロック、行ロック、ギャップ・ロックなど、SQLがロックされています。
最適化のアドバイス: インデックスの失敗がテーブルロックにエスカレートしないように、インデックスを正しく使用してください。検索エンジンは myisam ではなく innodb を使用してください。
オープニングテーブル
説明: SQLスレッドがデータ・テーブルを開こうとしています。この処理は通常非常に高速ですが、誰かがalter tableまたはlock table文を終了すると、他のスレッドはデータ・テーブルを開くことができません。
テーブル待ち
説明: テーブルの構造が変更され、新しい構造を取得するためにテーブルを再度開く必要があることがスレッドに通知されます。その後、テーブルを再び開くためには、他のすべてのスレッドがテーブルを閉じるまで待つ必要があります。
システムロック
説明: 外部システムロックの取得待ちです。現在、複数の mysqld サーバが同時に同じテーブルを要求していない場合、-skip-external-locking パラメータを追加することで、外部システムロックを無効にすることができます。デフォルトでは、このパラメータはオフになっています。
おわりに
我々は具体的には、古い兄弟と組み合わせて、問題が発生した状態に応じて、このSQLステートメントを分析することができますデータベースロック、インデックスの最適化、ショープロファイルと包括的な分析のための他の最適化手段の話されています。最適化の知識は、実践的な学習の仕事ですが、私は唯一の理論的な知識は、分析の理論的な知識の実際の作業では、最初に学ぶために理論的な知識を伝えることができます。
IT
返信:Javaのチュートリアルのフルセットは、あなたが得ることができます:Javaの基礎、JavaのWeb、スプリングブートなどを含むJavaEEすべてのチュートリアル!
返信: 履歴書テンプレート、100の美しい履歴書を取得します!
回答:Javaの学習ルートは、最新かつ最も完全な学習ロードマップを得ることができます!
返信元】 Java eBooks、トッププログラマー必読の13冊を手に入れましょう!