2016-04-24 17 views
0

毎分、このプログラムはum DB eから一連のレコードを読み取り、別のDBでそれらを複製します。 99%の時間で、データが変更されなかったため、No Operationから構成されます。SQL Server:nopの更新が徐々に遅くなるのはなぜですか?

問題は、個々の上書きが遅くなっていたことです。 2500のレコードで、それは目立つようになった。

データが変更されない場合、SQLは徐々に遅くなっていますか?

詳細:私はGUIDを主キーとして使用しました(貧しい私、私は知っています)。しかし、わかっている限り、断片化は、新しい挿入がある場合、または更新によってデータのサイズが変更された場合にのみ発生します。両方の場合にページ分割が発生します。私の理論は、これらのnop更新が何かを断片化している(簡単に見つけられない)ことと、遅延を増加させることです。おそらく、SQL Serverはこの更新プログラムを削除/挿入トランザクションとして実装していますか?

+0

データが実際には変更されていなくても、それがノーオペレーションであるかどうかはわかりません。たとえば、更新後のトリガは、テーブル内のデータが変更されていなくても、すべての更新文で起動します。 –

答えて

0

ランダムなGUIDのパフォーマンスが低下するのは、フラグメンテーションだけではありません。行が表全体に均等に分散されるため、より多くのIOが必要です。これにより、データベースのサイズが増加するにつれて、特に従来の回転メディアでは、パフォーマンスが徐々に低下します。データが更新されなくても、まずデータをメモリに読み込まなければならないことに注意してください。純粋にランダムなキー要求によって、必要な行がすでにメモリにある可能性が低くなります。

GUIDを使用する必要がある場合は、NEWSEQUENTIALIDまたはUuidCreateSequentialで割り当てられたシーケンシャル値と、一部のバイトスワッピングを考慮してください。コード例とこの一般的なパフォーマンスの問題の詳細については、Improving Uniqueidentifier Performanceの記事を参照してください。

+0

"データベースサイズが増加すると..."、挿入が行われるようにしてください。私は新しいデータがなくても待ち時間の増加を測定しました。 – Gatis

関連する問題