1

Rowversion を使用して OLTP データベースの最新の変更のほとんどを取得するウェアハウス用のインクリメンタル ロード ルーチンがあります。10 分ごとに実行され、1 日に 1 ~ 2 回スタックします。

(NOLOCK)テスト対象の ROWVERSION を含む 2 つを除いて、プルするほぼすべてのテーブルにヒントがあります。(最も更新された 2 つのテーブルの変更のみをテストしています。残りは、一晩で完全に再作成することで対処できます。これにはいくつかのリスクがありますが、回避しているようです。)

このハングは、そのテーブルのレコードで永続ブロックにヒットした場所で発生していると推測しています。私たちのウェアハウスでは完全な一貫性は重要ではないので、(READPAST)rowversion でテストされたテーブルで、ロックされたテーブルが次に解放されたときにそれらを選択したいと考えています。

それを効率的に行う簡単な方法はありますか?アイデアは 1 つまたは 2 つあるのですが、行のバージョン管理を正しく理解するには複雑すぎるようです。

基本的に、一貫性に達するのに 10 分ではなく 20 分かかるレコードは気にしませんが、(NOLOCK)その ROWVERSION センシティブ テーブルに頼って、レコードのコミットされたバージョンを完全に失うことは気にします。

4

1 に答える 1

1

これらのテーブルのデータの一貫した状態を取得したい場合は、 を使用しないでください(NOLOCK)

について(READPAST)は、読み取り時にテーブルに存在するロックの性質に応じて、レコードを取得する場合と取得しない場合があり、システムの状態と何らかの形で調整する必要があるため、使用するのは難しい場合があります。あなたのコードにあります。

テーブルが更新によってブロックされている場合は、それをよりよく理解し、更新に時間がかかる理由を確認しようとします。大規模な更新の場合は、データの読み取りのタイムアウトを増やすか、時々読み取れないことを受け入れる必要があります。

私が持っていないシステムの詳細に大きく依存するため、確実な解決策を提供することはできません。

于 2013-10-28T22:17:23.750 に答える