MySQLデータ遅延ジャンプの問題の解決策

MySQLデータ遅延ジャンプの問題の解決策

今日は、データベース遅延ジャンプに関する別の典型的な問題を分析しました。このプロセスでは、参考のために問題を分析するためのいくつかの方法とテクニックも提供しました。

まず、高可用性テストでは、一連の環境検出が断続的でした。調査の結果、データベースに遅延があることがわかりました。スレーブライブラリにログインしてshow slave statusを確認すると、Seconds_behind_masterの値が絶えずジャンプしていることがわかりました。つまり、0〜39〜0〜39の頻度でジャンプし続けており、非常に腹立たしいことです。

データベースの関連ログを確認したところ、参照できるログ記録がないことがわかりました。この問題をどのように分析すればよいでしょうか。まずは再現してみましょう。そこで、リズムに合わせて問題のログを3回キャプチャしました。つまり、show slave statusを介して継続的に監視し、show slave statusの出力結果をキャプチャして保存しました。このようにして、問題発生時のオフセットの変化を取得できます。この変化は、再生プロセス中にSQLThreadによって引き起こされた問題です。

例えば、次の出力では、スレーブ側のリレーログを傍受して分析しました。対応するフィールドはRelay_Log_Posです。

Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: xxxx
         マスターユーザー: dba_repl
         マスターポート: 4306
        接続再試行: 60
       マスターログファイル:mysqlbin.000044
     読み取りマスターログ位置: 386125369
        リレーログファイル: スレーブリレーbin.000066
        リレーログ位置: 386125580
    リレーマスターログファイル: mysqlbin.000044

オフセットの変化はすぐに分かります: 385983806、386062813、386125580

次に、mysqlbinlog を使用して、これらのログ プロセスの詳細を分析し始めました。次のコマンドを実行すると、ダンプされたログ内の関連する 3 つのテーブルをすぐに取得できます。

# grep INSERT relaylog_xxxx.dump |awk '{print $3 " " $4}'|sed 's/INTO//g'|sort|uniq
 アクション実行情報
 行為参加説明
 dic_補助金_マーケティング_クエリログ_202008

各テーブルのデータ操作を少しずつ分析してみましたが、得られる情報はまだ限られていました。さらに分析を続け、例えば、ログ全体のトランザクション量を分析してみましょう。

# mysqlbinlog slave-relay-bin.000066 | grep "GTID$(printf '\t')last_committed" -B 1 \
> | grep -E '^# at' | awk '{print $3}' \
> | awk 'NR==1 {tmp=$1} NR>1 {print ($1-tmp);tmp=$1}' \
> | ソート -n -r | ヘッド -n 100
mysqlbinlog: [警告] 不明な変数 'loose-default-character-set=utf8'
5278
5268
5268
5268
5253
5253
5253
5253
5253

約 5K と比較的大きいことがわかります。この追加情報はどこから来るのでしょうか? メイン データベースで general_log を有効にして、より詳細な操作ログを取得できるようにしました。

さらに分析を進めると、業務全体で明示的なトランザクション方式(SET autocommit=0)が使用されていたことが判明しました。トランザクション全体には複数の大きなSQL文が含まれており、大量の操作ログの詳細が保存されていました。また、トランザクション操作中に、Mybatisフレームワークに基づいて、複数のselect count(1) from xxx操作が呼び出されていました。

事業者とのコミュニケーションの結果、上記の問題点は基本的に解決されました。

上記は、MySQL データの遅延とジャンプの問題に対する詳細な解決策です。MySQL データの遅延とジャンプの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLの挿入文字化け問題を解決する方法
  • MySQLを閉じることができない問題を解決する方法
  • MySQLデータベースが予期せずクラッシュし、テーブルデータファイルが破損して起動できなくなる問題を解決します。
  • この記事では、Django 2.2とMySQLの互換性の問題を解決します。
  • MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明
  • MySQLからデータをインポートする際の不正なフォーマット、インポートの遅延、データ損失などの問題を迅速に解決します。
  • MySQL からエクスポートされた scv ファイル内の文字化けやジャンプ行の問題をすばやく解決します
  • Docker の MySQL コンテナのタイムゾーン問題の修正
  • pyMySQL SQL ステートメントのパラメータ渡しの問題、単一パラメータまたは複数パラメータの説明
  • MySQL 5.7.30 のインストールとアップグレードの問題に関する詳細なチュートリアル

<<:  Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

>>:  Ubuntu 20.04 Firefox でビデオを再生できない (Flash プラグインがない) 場合の解決策

推薦する

jsは徐々に増加するデジタルアニメーションを実現します

目次背景コンテナを固定し、数字を上にスクロールすることで、スクロールホイールと同様の効果を実現します...

CentOS 7 で NFS ファイル共有ストレージ サービスを構築するための完全な手順

序文NFS (Network File System) は、ネットワーク ファイル システムを意味し...

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

入力タグの名前と値の違い

type はブラウザでの入力と出力に使用されるコントロールです (たとえば、type="t...

シェルを使用して複数のサーバーでバッチ操作を実行する方法

目次SSHプロトコルパスワード接続プロセスsshツールssh公開鍵ログインバッチ操作複数サーバーファ...

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...

Nodejs 探索: シングルスレッドの高並行性の原理を深く理解する

目次序文一目でわかる建築オペレーティングシステムとの対話シングルスレッドイベント駆動/イベントループ...

Linux での MySQL 5.7 の導入とリモート アクセス構成

前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...

MySQL 8.0 の新機能: ハッシュ結合

MySQL 開発チームは、2019 年 10 月 14 日に MySQL 8.0.18 GA バージ...

HTMLページの読み込みと解析プロセスの詳細な紹介

ブラウザがHTMLを読み込みレンダリングする順序1. IE は上から下へダウンロードし、上から下へレ...

MySQL 8.0.13 で日付を 0000-00-00 00:00:00 に設定すると発生する問題を解決する

データベース操作を学び始めたばかりです。今日、データを保存していたところ、エラーが発生していることに...

最高の無料英語フォント33選を紹介

チャンクファイブフリータイプファミリーCuprum JAH I フリーフォントイェセヴァブークレフィ...

面接では、select...for update がテーブルをロックするのか、それとも行をロックするのか尋ねられました。

目次確認する:例の検証と組み合わせるselect クエリ ステートメントはロックされませんが、sel...

NodeJs の高メモリ使用量のトラブルシューティング実戦記録

序文これは、オンライン コンテナーの拡張によって発生した調査です。最終的には、実際の OOM が原因...

Tomcat をアンインストールして再インストールする方法 (画像とテキスト付き)

tomcat9をアンインストールする1. Tomcatのインストールはディレクトリに解凍するだけで...