對於長時間的介紹,但在提出問題之前,我認爲給出背景有助於更好地理解我們的問題。爲SQL服務器中的特定查詢請求劃分I/O優先級
我們使用sql server 2008作爲我們的web服務作爲後端,並且時常需要太多時間來響應那些應該運行得非常快的請求,比如對於選擇請求需要超過20秒查詢只有22行的表。我們經歷了很多潛在的問題,這些問題可能會從存儲過程,觸發器等索引中引發問題,並試圖優化我們想要的任何操作,例如刪除不經常讀取但頻繁寫入的索引,或者爲我們的select查詢添加NOLOCK以減少鎖定表(我們可以用髒讀)。
我們還讓我們的DBA審查了服務器並對組件進行了基準測試,以查看CPU,內存或磁盤子系統中的任何瓶頸,並發現硬件方面我們也可以。並且由於矛是偶爾發生的,所以很難重現生產或開發中的錯誤,因爲大多數時候,當我們重新運行相同的查詢時,它會產生我們期望的響應時間,這些響應時間很短,而不是已經經驗較早。
話雖如此,我幾乎一直懷疑I/O,雖然它似乎並不是瓶頸。但是我認爲在運行服務器上的特定表的索引碎片報告之後,我能夠重現錯誤,這會立即導致請求中的派克不僅針對該表運行,而且會在查詢其他表的其他請求中運行。由於數據庫和服務器與我們使用的其他應用程序共享,並且不時可以在服務器上運行查詢,並且需要很長時間的數據庫對我們來說是常見的情況,因此我懷疑偶爾會遇到I/O瓶頸我相信這是事實。
因此,我想找出一種方法來優先處理來自Web服務的請求,這些請求即使在運行其他資源敏感的查詢時也會被處理。自從解決過程剛開始以來,我一直在尋找某種優先級,並發現SQL Server 2008有一個名爲「資源調控器」的功能,可以優先處理這些請求。
但是,由於我不是資源管理專家或DBA的專家,因此我想問問其他人可能已經使用或正在使用資源調控器的經驗,以及是否可以優先考慮I/O登錄或特定的存儲過程(例如,如果在我們收到Web服務請求時正在運行一個I/O密集型進程,SQL Server可以停止或減慢該進程的I/O活動並給予優先級到我們剛收到的要求?)。
謝謝任何花時間閱讀或提前幫忙的人。
一些硬件詳細信息:
CPU:2個四核AMD皓龍8354
內存:64GB
磁盤子系統:康柏EVA8100系列(我不知道,但它應該是RAID 0 + 1個翻過8個HP HSV210 SCSI驅動器)
PS:我幾乎可以100%確定應用程序服務器不會導致錯誤,並且沒有我們可以在其中識別的瓶頸。
更新1:
我會盡力回答,因爲我所能爲GBN下面提出以下問題。請讓我知道,如果你正在尋找別的東西。
1)您有什麼樣的索引和統計維護?
我們有一個每週運行的作業,每週五整理索引碎片。除此之外,還啓用了自動創建統計信息和自動更新統計信息。除了碎片工作以外,其他時間的高峯也在發生。
2)你有什麼樣的寫入數據量?
難以回答。除了我們的Web服務,還有一個前端應用程序訪問同一個數據庫,並且需要運行我所知的週期性資源密集型查詢,但是,我不知道該如何獲得,我們來說說每週或每天寫入金額給DB。
3)你有沒有簡介重新編譯和統計更新事件?
對不起,無法找出這一個。我不明白你問這個問題。如果可能的話,你能否提供這個問題的更多信息?
是的,統計數據被更新是我的第一個想法太多,但考慮到隨後的22條記錄的表是它仍然有可能發生?我們需要更多地瞭解我認爲的數據的波動性。重新調整當然是一種可能性。海報應該能夠測量表現不佳的查詢的編譯時間。 – 2010-11-15 19:03:24
@John Sansom:22排的東西可能會阻擋。也許這也是一個服務器「失速」的誤導 – gbn 2010-11-15 19:09:19
我需要找出你問的傢伙的問題的答案,因爲我不太熟悉這個東西。儘量儘快恢復,但可能需要一段時間才能從我們的DBA團隊獲得答覆。感謝您在此期間的興趣。 – Ferhat 2010-11-15 20:07:46