簡體   English   中英

如何加快並發相同查詢的SQL Server 2008 R2

[英]How to speed up concurrent identical queries SQL server 2008 R2

我繼承了一個基於.NET和SQL Server 2008 R2的支持解決方案。

該體系結構使得所有客戶端必須彼此保持同步,並且這由一個Winsock集線器處理,每個客戶端向該Winsock集線器發送和接收所做更改的通知。 這些通知采用更新類型和關鍵字段的形式。

接收到通知后,客戶端窗口將檢查更新的類型,如果他們認為自己有興趣,則發出數據庫命令(存儲過程)以檢索該鍵值的最新數據。 通常調用的存儲過程鏈接許多表以返回一個相當大的對象。

我的問題是,當許多客戶端處於活動狀態時,它們會在“相同”時間調用相同的存儲過程,並將性能降低(例如,小於1秒的查詢),而單獨調用時可能會花費大約20秒鍾,因為它可能等待其他客戶端完成。

SQL Server中是否有什么可以幫助我解決的問題? 我在考慮結果的緩存或可以停止一個查詢阻止另一個查詢的方式?

我很欣賞我可能應該在客戶端代碼和通知過程中進行一些更改以傳遞完全填充的對象,從而消除了多次查詢數據庫的需要。 但是,這是一個壽命有限的舊版應用程序,以如此重要的方式進行升級將是一件令人頭疼的事情。 如果我可以使用SQL Server中一個簡單的開關,那將為我節省我所需的時間!

謝謝,安德魯

注意事項:

  • 首先,將WITH(NOLOCK)添加到可以執行此操作的表中。 記住NOLOCK是READUNCOMMITED的提示,這意味着它不會讀取已經在處理中的掛起的更改,但是它將防止等待表被釋放。
  • 在生產服務器中進行調查時,請使用sp_who2。 在多台機器上啟動您的應用程序或網站,以重現導致性能降低的情況,獲取耗時的報告或操作,並使用sp_who2分析Management Studio中的情況。 您將能夠識別“暫停”選擇
  • 使用sp_lock查看確切鎖定了哪些對象

鎖定類型可以是:

  • MD-元數據鎖定
  • DB-數據庫鎖定
  • TAB-桌子鎖
  • PAG-頁面鎖定

如果沒有任何效果,您可以嘗試分析查詢計划,但您表示在隔離環境中查詢此過程時性能不錯。

另一個性能問題是,如果未對tempdb數據庫進行優化,則臨時表可能會使其過載。 運行事件探查器以分析正在發生的事情。 僅過濾您需要評估結果的存儲過程。

如果有其他想法,我將添加更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM