プライマリでクエリセッションを開き、単純な書き込みが何を待っているかを見る。データベースが同期コミットの可用性グループに属し、セカンダリが接続されていれば、待機の一部は建物の外へ出て、ログレコードはレプリカへ移動し、そこで強化され、その強化の知らせがコミットの完了前に戻ってくる。帯域幅はその往復を短くしない。以下の手順は、画面から遠隔ディスクへ、そして戻ってくるまでの確認応答を追う。

プライマリの待機の種類から始める

遠隔レプリカで待つ書き込みは、CPUやロックの待機ではなくログに関係する待機として現れ、トランザクションの所要時間は行数ではなく往復に従う。小さなコミットが多いほど、それぞれが往復を別々に支払うため、それが明白になる。一回の一括操作は同じコストを一回の長い確認応答の中に隠す。

リンクについて何かを結論づける前に、作業負荷をコミット頻度で並べ替える。

ネットワークを読む前にレプリカの状態を読む。重要なカウンタは送信キュー、redoキュー、同期状態であり、これらは合わせてセカンダリが追いついているか遅れているかを示す。増加する送信キューは転送を指し、増加するredoキューはセカンダリ自身の処理またはストレージを指す。それらは別の修理であり、どちらも帯域幅を足しても改善しない。

確認応答をセカンダリまでたどる

同期コミットでは、プライマリはコミットを完了と報告する前に、該当するログがセカンダリで強化されたという確認を待つ。強化とはログ内で永続することであり、データページに再適用されたことではない。この区別こそが、同期セカンダリがredoで遅れながらも強化を確認し続けられる理由である。

経路を順にたどり、全体ではなく各段階を計測する。ログレコードは転送を通り、セカンダリが書き込んでフラッシュし、確認応答が同じ経路で戻る。転送の遅延、セカンダリのスケジューリング、セカンダリのログディスクのレイテンシはすべて合計に入り、最初のものだけがネットワークの担当者に属する。ログ量が他の何かで飽和しているセカンダリは、リンクが遊んでいる間もすべてのコミットを引き延ばすことができる。

SELECT ag.name AS ag_name, drs.database_id, drs.synchronization_state_desc,
       drs.log_send_queue_size, drs.redo_queue_size
FROM sys.dm_hadr_database_replica_states AS drs
JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id;

静かな午後に一度ではなく、代表的な書き込みの前と後にそのスナップショットを取る。差分が、コミットを待つ間にどのキューが動いたかを教えてくれる。

リンクではなく経路を計測する

スループット試験は、あなたのレプリカではない二点間の容量を、あなたの作業ではない負荷の下で測る。実際のトラフィックが流れている間に、実際のレプリカ経路沿いの遅延と損失を両方向でネットワーク担当者に尋ねる。ここでは容量よりも損失が重要である、なぜなら失われたセグメントは再送のコストがかかり、すべてのコミットが一つの確認応答を待つからである。ダウンロード試験で優秀に見えるリンクでも、おしゃべりなコミットパターンには不向きなことがある。

計測する間、データベースの転送セキュリティとアクセス制御をそのまま保つ。経路の計測はそれらを迂回する理由には決してならない。

直感ではなくカウンタと時間を対応づける。送信キューが空のままでコミットがまだ待っているなら、遅延は確認応答かセカンダリのフラッシュにある。送信キューが着実に増えるなら、制約は転送または容量である。どの観察が結論を支えたかを記録し、次の人が議論ではなく計測を繰り返せるようにする。

非同期モードが実際に変えるもの

非同期コミットはセカンダリの強化確認を待つことを取り除くため、書き込みが速くなり、耐久性の位置も変わる。プライマリはその遠隔の確認なしにトランザクションを確定する。するとセカンダリは遅れることが許され、その遅れが露出である。

ログが使用可能なフェールオーバー先に届く前にプライマリを失うと、そのレプリカにサービスを強制することは、アプリケーションにコミット済みと伝えていたトランザクションを捨てる。

これは復旧ポイントの決定であり、データベースの所有者に属し、性能レビューには属さない。まず許容できるデータ損失の窓を定め、それを満たすモードを選び、その境界の内側で最適化する。同期保護を保つ選択肢には、アプリケーションが許す場所で避けられるコミットの往復をなくすこと、計測された転送またはストレージのボトルネックを直すこと、確認応答の移動距離を短くするためにレプリカを移すことが含まれる。変わりがない、始めたときの耐久性要件と比較して衡量する。

関連記事