マスターの後ろの秒数MySQL マスター/スレーブ インスタンスの場合、seconds_behind_master はマスターとスレーブ間の遅延を測定するための重要なパラメーターです。 seconds_behind_master の値は、スレーブ上で「show slave status;」を実行することで取得できます。 オリジナルの実装定義: スレーブ SQL スレッドがマスター バイナリ ログの処理に遅れている秒数。 タイプ: time_t (long) 計算は次のようになります。 rpl_slave.cc::show_slave_status_send_data() if ((mi->get_master_log_pos() == mi->rli->get_group_master_log_pos()) && (!strcmp(mi->get_master_log_name(), mi->rli->get_group_master_log_name()))) { mi->slave_running == MYSQL_SLAVE_RUN_CONNECT の場合 プロトコル->store(0LL); それ以外 プロトコル->store_null(); } それ以外 { 長いtime_diff = ((long)(time(0) - mi->rli->last_master_timestamp) - mi->clock_diff_with_master); プロトコル->ストア( (longlong)(mi->rli->last_master_timestamp ? max(0L, time_diff) : 0)); } 主に2つの状況があります:
最終マスタータイムスタンプ意味: マスター データベース binlog 内のイベントの時刻。 型: time_t (long) 計算方法: last_master_timestamp は、スタンバイ サーバーが並列にレプリケートされるかどうかに応じて計算方法が異なります。 非並列レプリケーション: rpl_slave.cc:exec_relay_log_event() if ((!rli->is_parallel_exec() || rli->last_master_timestamp == 0) && !(ev->is_artificial_event() || ev->is_relay_log_event() || (ev->common_header->when.tv_sec == 0) || ev->get_type_code() == binary_log::FORMAT_DESCRIPTION_EVENT || ev->server_id == 0)) { rli->last_master_timestamp = ev->common_header->when.tv_sec + (time_t)ev->exec_time; DBUG_ASSERT(rli->last_master_timestamp >= 0); } このモードでは、last_master_timestamp は各イベントの終了時刻を示し、when.tv_sec はイベントの開始時刻を示し、exec_time はトランザクションの実行時刻を示します。この値は apply_event の前に計算されるため、イベントが実行される前に last_master_timestamp が更新されます。 exec_time は Query_log_event にのみ存在するため、last_master_timestamp はトランザクションを適用するさまざまなイベント段階で変化します。 2 つの挿入ステートメントを含むトランザクションを例に挙げます。このコード セグメントが呼び出されると、イベント タイプ、タイムスタンプ、実行時間が出力されます。 テーブル t1(a int PRIMARY KEY AUTO_INCREMENT 、b longblob) を作成します。engine=innodb; 始める; t1(b)に挿入し、repeat('a',104857600);を選択します。 t1(b)に挿入し、repeat('a',104857600);を選択します。 専念;
並列レプリケーション: rpl_slave.cc mts_checkpoint_routine ts = rli->gaq->空() ? 0 : reinterpret_cast<Slave_job_group *>(rli->gaq->head_queue())->ts; rli->reset_notified_checkpoint(cnt, ts, true); /* "Coordinator::"commit_positions" の終了 */ このモードでは、スタンバイマシン上に分散キュー gaq が存在します。gaq が空の場合、last_commit_timestamp は 0 に設定されます。gaq が空でない場合、この時点でチェックポイントポイント lwm が維持され、lwm より前のトランザクションはすべてスタンバイマシン上で完了します。このとき、last_commit_timestamp は lwm が配置されているトランザクションが完了した後の時間に更新されます。時間型はtime_t型です。 ptr_group->ts = common_header->when.tv_sec + (time_t)exec_time; // Seconds_behind_master 関連 rli->rli_checkpoint_seqno++; if (update_timestamp) { mysql_mutex_lock(&data_lock); last_master_timestamp = new_ts; mysql_mutex_unlock(&data_lock); } 並列レプリケーションでは、last_master_timestamp はイベント実行が完了した後にのみ更新されるため、seconds_behind_master は非並列レプリケーションと並列レプリケーションで異なります。 マスターとのクロック差意味:
rpl_slave.cc::get_master_version_and_clock() if (!mysql_real_query(mysql, STRING_WITH_LEN("SELECT UNIX_TIMESTAMP()")) && (master_res = mysql_store_result(mysql)) && (master_row = mysql_fetch_row(master_res))) { mysql_mutex_lock(&mi->data_lock); mi->クロックの差_with_master= (long) (time((time_t*) 0) - strtoul(master_row[0], 0, 10)); DBUG_EXECUTE_IF("dbug.mts.force_clock_diff_eq_0", mi->clock_diff_with_master = 0;); mysql_mutex_unlock(&mi->data_lock); } この差は、マスターとスレーブが接続を確立したときに 1 回だけ計算されます。 他の実行時間意味:
構造体timeval終了時間; ulonglong micro_end_time = my_micro_time(); my_micro_time_to_timeval(micro_end_time、&end_time); exec_time = end_time.tv_sec - thd_arg->query_start_in_secs(); 時間関数(1) time_t time(time_t timer) time_tはlong型であり、返される値は秒単位の精度のみです。 (2)int gettimeofday(struct timeval *tv, struct timezone *tz)はマイクロ秒単位で現在の時刻を取得できる。 (3)タイムバル構造 #include <time.h> 構造体timeval { time_t tv_sec; /*秒*/ suseconds_t tv_usec; /*マイクロ秒*/ } 要約するseconds_behind_master を使用してマスターとスレーブ間の遅延を測定すると、秒単位までしか正確ではありません。シナリオによっては、seconds_behind_master ではマスターとスレーブ間の遅延を正確に反映できない場合があります。マスターとスタンバイに異常がある場合は、seconds_behind_master ソース コードを組み合わせて具体的な分析を行うことができます。 以上がMySQL Seconds_Behind_Masterの詳しい説明です。MySQL Seconds_Behind_Masterの詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。 以下もご興味があるかもしれません:
|
<<: JVM 上の高性能データ形式ライブラリ パッケージである Apache Arrow の紹介とアーキテクチャ (Gkatziouras)
>>: ウェブサイトのユーザーエクスペリエンスデザイン(UE)
システムの crontab を使用して定期的にバックアップ ファイルを実行し、バックアップ結果を日付...
ロックの分類:データ操作の粒度から:テーブルロック:操作時にテーブル全体がロックされます。行ロック:...
CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...
公式ドキュメント: https://nginx.org/en/linux_packages.html...
px(ピクセル)ピクセルという言葉は皆さんもよくご存知だと思います。次に、この単位に関するちょっとし...
グラデーションの背景色を作成するときは、 linear-gradient() 関数を使用して線形グラ...
私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...
ul liの前のアイコン1をキャンセルしますクリア値1値を1に設定ラベル中央値1をクリアラベルの中央...
この記事では、適応解像度を実現するためのVue2.0の具体的なコードを参考までに紹介します。具体的な...
日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...
1. MySQL でグローバル変数を変更するには 2 つの方法があります。方法 1: my.ini ...
目次1. コア1. Domノードを取得する2. ノードの更新2.1 実践演習3. Domノードを削除...
社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...
MySQL チューニング ツールの詳細な説明と実践的な演習の説明 ツールの紹介の説明 分析例の説明...
ここで商品テーブルを作成しました。その中のデータを見てみましょう。 mysql> 商品から *...