SQL CEを実行している800のモバイルクライアントに対してマージレプリケーションをセットアップするSQLサーバーがあります。マージレプリケーションデータベースの挿入が非常に遅い
サーバーには十分なリソースがあり、社内外の回線が十分であるため、クライアントとサーバー間のレプリケーションは一般的には良好ですが、私は追跡できない断続的なエラーが発生しています。
昨日私たちのメインテーブルの1つに550レコードを挿入する必要がありました。存在する唯一のトリガーは標準のマージレプリケーションです。
このインサートは、同期しようとしているモバイルデバイスで継続的にデッドロックが発生するため、14時間かかりました。
私たちが挿入時のロックを回避する方法と、プロセス全体をスピードアップする方法に関するアドバイスはありますか?
------更新-----
私は、単一のインサート上でプロファイラを実行してきたいくつかのコメントに続いて、私はこの種のものをたくさん見ている
insert into dbo.MSmerge_current_partition_mappings with (rowlock) (publication_number, tablenick, rowguid, partition_id)
select distinct 1, mc.tablenick, mc.rowguid, v.partition_id
from dbo.MSmerge_contents mc with (rowlock)
JOIN dbo.[MSmerge_JEMProjectME_PromotionResource_PARTITION_VIEW] v with (rowlock)
ON mc.tablenick = 286358001
and mc.rowguid = v.[rowguid]
and mc.marker = @child_marker
and v.partition_id in (select partition_id from dbo.MSmerge_current_partition_mappings cpm with (rowlock) JOIN
dbo.MSmerge_contents mc2 with (rowlock)
ON cpm.rowguid = mc2.rowguid
and mc2.marker = @marker)
where not exists (select * from MSmerge_current_partition_mappings with (readcommitted, rowlock, readpast) where
publication_number = 1 and
tablenick = 286358001 and
rowguid = v.[rowguid] and
partition_id = v.partition_id)
私が挿入してはいけない多くのテーブルでは、これは手がかりになる可能性がありますか?
1.挿入レベルと同期レベルで使用される分離レベルは何ですか?通常、挿入は問題ではありません。 2.いくつの索引を持っていますか? 3.インクリメンタルではないインデックスがあり、最後のレコードではなくツリー構造の中間にレコードが挿入されますか? 4.クラスタ化インデックスはありますか? – Farfarak
1.分離レベルではわかりません。標準的な挿入ステートメントです。2. 1つの標準インデックスを持つテーブルAに挿入します。ただし、マージレプリケーショントリガーは他の多くのテーブルにスティックします。いいえ –
1.レプリケーション中に呼び出されているクエリは、レプリケーションプロセスがケースヒープ内の全テーブルをブロックしている可能性があります(クラスタ化インデックスはありません)。テーブル? – Farfarak