0

我使用Microsoft同步框架2.1至大量的併發最終用戶與中央數據庫服務器同步。同步框架選擇更改存儲過程 - 性能/可擴展性/改進

環境:連接到1箇中央數據庫服務器

  • 1500併發客戶
  • 一個web服務將被用作服務器端的SyncProvider
  • 有超過2.000.000記錄
  • 多個表

問題
的SelectChanges SP regularl y用完時間(CommandTimeout = 60)。
之所以它可能是很慢:

  • 同步框架上local_update_peer_timestamp列創建索引,但不使用它。
    • 即使重建統計指標不使用
    • 索引提示引起全索引掃描,而不是尋求操作(即使給定的時間戳比最大local_update_peer_timestamp值的方式更大)

問題 在我看來有些事情是會非常糟糕。 MS Sql Server 2008 R2應該能夠創建適當的執行計劃

  • 如何改進選擇更改?
    • 考慮到表可在8.000.000記錄
    • 增長確保SQL Server可使用索引來建立執行計劃
  • 是否還有其他可能的原因,爲什麼這個查詢太慢?

回答

1

上有一個SqlSyncProvider財產CommandTimeout,所以如果你不關心它是如何花費的時間,你可以通過設置命令超時超過時間最長selectchanges查詢需要的量解決這個問題。

我發現性能問題,存儲過程以及該selectchanges。 SQL查詢跟蹤表似乎很慢。我懷疑這至少部分是內存壓力,因爲在正常運行期間,你將不會被查詢跟蹤表。他們將有更新/插入,但我不認爲這些會導致正確的索引權部分獲得加載到內存中。在沒有正常操作發生的孤立環境中,selectchanges過程要快得多。

你可以嘗試添加列到跟蹤表(將它們添加到過濾器列的列表),並設置自定義索引和修改存儲過程使用自定義索引。我能夠做出一些改進,但可能不足以證明所涉及的所有努力。

+0

感謝您的回答,我擔心增加CommandTimeout作爲最終解決方案。我已經做了這個臨時解決方案,我想要一個真正的改進,但仍然感謝您的提示。關於過濾的列。謝謝我會盡力通過這樣做來提高性能。如果我有一些改進,我會注意到你,如果你對我的解決方案感到好奇。謝謝!! – hwcverwe 2012-04-16 16:50:36

1

如果您使用的是過濾器子句,那麼過濾器標準將放在where子句中,這意味着SQL Server可能會選擇對select中的每一行執行where子句,從而導致嚴重的性能問題。

在這種情況下你可以做的是創建你自己的selectchanges sproc版本,它在連接中應用過濾標準,這將提高性能。