0

Microsoft Sync Framework を使用して、N 層クライアント サーバー アーキテクチャでデータを同期しています。同期するデータ量が少ない場合、同期は正常に機能します。ただし、同期するデータが大量にある場合、データベースのロックの問題に直面しています。この動作の主な理由は、実行時間の長いトランザクションであると思われ、複数の同期エージェントからの他のトランザクションがブロックされます。これを次のようにテストしました:
Sql Server 2008 --> 物理マシン/VM - 失敗、ロックの問題がある
Sql Server 2008 R2 --> 物理マシン/VM - 物理で成功、VM で失敗

この動作を引き起こしている問題を教えてください。同期フレームワークはバッチのトランザクションを開き(同期でバッチ処理を使用しています)、バッチが完了するとコミットするため、この動作は同期フレームワークのドメイン外であると思います。ただし、複数のデータベース オブジェクトがロックされているときの動作を理解できません (ほぼすべてのテーブル オブジェクトがロックされていることに気付いた時点でも、長時間実行されるトランザクションです!)、

4

1 に答える 1

1

Sync Fx は明示的にロックを発行しません。

ただし、他のデータベース アプリケーションと同様に、同期中に変更が適用されるため、一部の行がロックされます。少数の行のみをロックするか、テーブル全体をロックするかは、SQL Server が行、ページ、またはテーブルからロックを昇格またはエスカレートするかどうかによって異なります。

他のデータベース アプリと同じように、同じ手法を使用してロックの問題を調査できます (プロファイリング、sp_who など...)。

同期グループ/同期スコープが大きい (多くのテーブル) 場合は、それらをより小さなグループに分割して、コミットを高速化し、潜在的な同時実行の問題を軽減できるようにすることを検討してください。頻繁に同期を行うと、更新する行数が少ない場合にロックの問題が発生する可能性を減らすのにも役立ちます。

于 2013-05-13T03:29:00.767 に答える