背景新年を迎える前は、一年間の仕事を振り返り、総括する時期であるはずですが、春節に向けてさまざまなプロモーションや活動が控えているため、多くの問題に直面しています。最近遭遇した問題を振り返ってみると、いくつかの問題は似ていることがわかりました。新年を迎える前に、それらをケースとして整理しておくのは良い時期です。データベースが停止し、応答しなくなるという現象が発生します。これは、ビジネス上のプレッシャーが大きい場合や、ビジネスが正常に実行されているが突然問題が発生した場合に発生します。 問題の説明Tencent Cloud Database MySQL 自体には障害検出と高可用性のメカニズムがあるため、これらの問題が発生したとき、ユーザーが問題を報告してからトラブルシューティングのための実際の介入が行われるまでに数分が経過しましたが、高可用性スイッチはトリガーされませんでした。これは、問題はデータベース自体の障害ではなく、データベースが利用できなくなる外部的な原因でもないことを示しています。 当時のデータベースの状態を確認すると、非常に異常な指標が見つかりました。 問題が発生した頃、接続の総数と threads_running の数が短期間で急増し始め、約 30 秒間、監視プラグインでもデータを収集できなくなりました。同じ期間中に、CPU 使用率 (100% に到達) と遅いクエリの数も急増しました。基本的には、CPU 使用率、遅いクエリ、接続数が関連していることが確認できます。この 3 つの指標に基づいて、この問題の原因を分析できます。 原因分析99% の場合、遅いクエリの数が急増している限り、問題は遅いクエリに関連していますが、ケース分析では結論を急ぐことはできません。さて、話を元に戻して、目標が3つの指標に絞られたので、3つの指標の意義を個別に考え、これらの指標の異常がどのような問題を引き起こすのかを見てみましょう。 CPUCPU 使用率が高いということは、MySQL の計算能力が十分に利用されていることを意味します。MySQL の計算リソースを占有できるのは、ユーザー スレッドと MySQL 自身のシステム スレッドだけです。この問題は明らかに MySQL システム スレッドとは関係がなく、ユーザー スレッドが大量の CPU 計算リソースを占有していることを示しており、使用率が 100% に達し、このリソースの競争度が非常に深刻であることを示しています。CPU リソースの不足により、元々効率の高いクエリが非常に遅くなり、クエリが効率の高いクエリから非効率で遅いクエリに変わり、データベースの擬似死またはハングアップという現象が発生する可能性があります。 クエリが遅いクエリの低速化はよくある問題です。クエリ効率が低いため、CPU、IO、メモリなどのリソースを過剰に占有し、他の通常のクエリに影響を与えます。監視指標から、CPU 使用率、IO 使用率、メモリ使用率がさまざまな程度に増加する可能性があります。深刻な場合には、これらの指標も急上昇し、データベース全体の応答が遅くなります。 接続数接続数は通常、「実際の障害」の指標です。たとえば、接続数が max_connections の上限に達すると、データベース全体が新しい接続を作成できなくなります。プログラム側は応答しないのではなく、直接エラーを報告します。 thread_running インジケーターについては、公式ドキュメントの説明を参照してください。
簡単に言えば、このメトリックの急上昇は、その時点で MySQL インスタンスに接続しているアクティブ ユーザーが多数いることを意味します。そして、今回のケースの監視チャートから判断すると、急上昇傾向が見られ、短期間に大量のアクティブな接続が発生したことを示しています。 分析するこれら 3 つの指標を簡単に分析すると、それらが相互に影響し合っていることがわかります。
3 つの指標の急上昇の理由は一貫しているようで、この 3 つの指標だけに頼っていては、問題の原因を真に特定することはできないようです。では、これらの指標の急上昇の理由がなぜ一貫しているのか、よく考えてみましょう。核となる現象、つまり共通点があることがわかります。それは、クエリを蓄積できる必要があるということです。もし:
したがって、蓄積されたクエリを確認することで、より直接的に問題を特定できます。上図のケースでは、蓄積されたクエリで group by と order by が大量に使用されており、クエリの効率が比較的低いため、根本的な原因は依然としてクエリの遅さにあります。 拡大する冒頭でも述べたように、最近、同様の原因による問題がいくつか発生しています。このサージ事例以外にも、以下のような現象も発生しています。 threads_running は比較的安定した値を維持しています。前回の記事の分析を参照すると、この現象は平常時に長時間アクティブなクエリが約 10 個あることを意味していることがわかります。障害シナリオを予測できます。業務量が増加し続け、アクティブなクエリの数が増加します。効率的なクエリが影響を受け、効率がある程度低下すると、フロントエンド プログラム/ユーザーは、タイムアウトまたは応答が遅いために再試行を開始します。その後、クエリの効率が低下するため、再試行が繰り返しトリガーされ、雪崩効果を引き起こし、データベースを徐々に低下させます。 幸いなことに、同様の現象が複数発生した中で、問題が発生したのは予測されたシナリオの 1 つだけで、その他は時間内に最適化されました。 総括するこれは依然としてクエリが遅いという問題ですが、このケースは別の MySQL インジケーターである threads_running の有用性を示しています。つまり、アクティブな接続を監視し、同時実行性の高い異常なクエリを事前に検出し、データベースにクエリが蓄積されて疑似的な死が発生するのを防ぎます。 上記は、MySQL スレッド実行の急増とクエリの低速化の問題を解決する方法の詳細な内容です。MySQL スレッド実行の急増とクエリの低速化の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Django が uwsgi+nginx プロキシで静的リソースにアクセスできない問題の解決方法
>>: Webデザインチュートリアル(5):Webビジュアルデザイン
以下のように表示されます。 bb_sbからa1、a2、a1+a2 a、a1*a2 b、a1*1.0/...
導入インストールするシステムの数が多い場合、USB フラッシュ ドライブまたは CD を使用した手動...
毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...
目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....
1. 上部と下部のリストタグ: <dl>..</dl>:上dt下層dd: カ...
この記事では、例を使用して、MySQL 条件クエリ and or の使用方法と優先順位を説明します。...
Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...
初めてこのエッセイを使ったとき、私はかなりぎこちなく感じましたhtmlファイルコードをコピーコードは...
この記事では、参考までにVMWare LinuxにMySQL 5.7.13をインストールするチュート...
Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...
最近、CSS 関連の知識ポイントをいくつか見直し、CSS における典型的なマージンの重なりの問題を整...
まず、テーブルを分割する必要がある理由について説明します。データシートが数百万に達すると、1 回のク...
目次docker-compose.ymlを書くdocker-composeを実行するビルドステータス...
最近Kafka勉強しています。クラスタの状態をテストする準備をしていたときに、仮想マシンを 3 つ開...
パート 1 HTML <html> -- 開始タグ<ヘッド>ウェブページ上の...