2016-09-19 6 views
3

同期AlwaysOn可用性グループとしてSQL Server 2014データベースのペアが設定されています。SQL Server AlwaysOnでのダーティリード

両方のサーバーは、可用性モードSynchronous commitに設定され、セッションタイムアウトは50秒です。セカンダリは、Read-intent only可読セカンダリに設定されています。

プライマリに書き込み、すぐにセカンダリから読み取ると(ApplicationIntent=ReadOnly経由)、私は一貫してダーティデータ(書き込み前の状態)を読み取ります。私が執筆と読書の間に約1秒待つと、正しいデータが得られます。

これが期待どおりの動作ですか?もしそうなら、セカンダリからの読み込みが最新であることを確認するためにできることはありますか?

プライマリの負荷を軽減するために、セカンダリをプライマリの読み取り専用バージョン(フェールオーバーと同様に)として使用したいと考えています。

+0

多分よりよいのためのトランザクション応答時間とスループットを遅くすることができます/ /dba.stackexchange.com/ – Liam

+0

"ダーティーリード"ではなく、レイテンシです。ここをクリックしてください:https://blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/alwayson-readable-secondary-and-data-latency/ – dean

+1

http://dba.stackexchange.com/questions/84420を参照してください。/does-synchronous-commit-availability-mode - レプリカ間の一貫性を確保する。要するに:はい、これが期待されます。*レイテンシを許容できない場合は、プライマリから読み取ります。あなたは、あなたの読書が最新であることを確実にするための独自の仕組み(トリガーなどのタイムスタンプテーブル)を考え出すことができますが、ほとんどの場合、これは価値よりも面倒です。いずれにしても、レプリカを1つのワークロード内で混同しないように、まったく混同しないでください。 –

答えて

2

あなたがAlwaysOn..Internally SQLでのみセカンダリを読むイネーブルにするときには...

をノーロックヒントを使用していない限り、ダーティリードを得ることができる方法はありませんが、行の前のバージョンを保存するためにrowversioning使用しています。..

さらにあなたがコミットモード同期使用している、これはログレコードがセカンダリに最初にコミットされることを保証し、主に..あなたが見ているもの

は、データの待ち時間..です

このwhitePaper DEA主要なワークロードに応じて、このscenario..BelowとLSそれについての詳細を理解するのに役立ちます関連部分..です

セカンダリレプリカ上で実行されている報告ワークロードは、いくつかのデータ待ち時間が発生します、典型的には数秒分およびネットワークの待ち時間が含まれます。

セカンダリレプリカを同期モードに設定しても、データの遅延が発生します。プライマリにACKを送信する前に、コミットされたトランザクションのトランザクションログレコードを強化することによって、同期レプリカが理想的な状態(つまりRPO = 0)でのデータ損失を保証するのは有効ですが、REDOスレッドセカンダリレプリカでは、関連するログレコードが実際にデータベースページに適用されています。

したがって、データの待ち時間があります。セカンダリレプリカを非同期モードで設定した場合、このデータのレイテンシがより大きくなるかどうか疑問に思うかもしれません。これは答えがより難しい質問です。プライマリレプリカとセカンダリレプリカ間のネットワークがトランザクションログトラフィックに追いつかない場合(十分な帯域幅がない場合)、非同期レプリカがさらに遅れてデータ待ち時間が長くなる可能性があります。同期レプリカの場合

は、不十分なネットワーク帯域幅は、二次に高いデータ待ち時間が発生することはありませんが、それは、httpための主要なワークロード

関連する問題