2009-01-07 60 views
1

在通過我的ASPX頁面構建的大型SQL查詢運行後,我在sql profiler中看到以下兩個項目。如何限制SQL查詢CPU利用率?

Event Class   TextData           ApplicationName    CPU Reads Writes 
    SQL:BatchCompleted  Select N'Testing Connection...'    SQLAgent - Alert Engine  1609  0 0 
    SQL:BatchCompleted  EXECUTE msdb.sbo.sp_sqlagent_get_perf_counters SQLAgent - Alert Engine  1609  96 0 

這些CPU與查詢相同,所以查詢實際上需要1609 * 3 = 4827?

同樣的事情發生的情況:

Audit Logout 

我能否限制呢?我正在使用sql server 2005.

+0

@Shimmy WTF與標籤編輯?!? – 2010-08-10 00:52:29

回答

2

不,總共需要1609毫秒的CPU。持續時間是多少? 我敢打賭,因爲我懷疑SQL Agent查詢使用並行性,所以我敢打賭更多。

你想減少使用CPU的後臺進程嗎?如果是這樣,那麼您可以通過禁用SQL代理(沒有備份,然後爲例)並重新啓動SQL Server和switch -x

你也不能停止「審覈註銷」事件......這是當您斷開連接或關閉會發生什麼減少功能一個連接。

但是,你最大的處理器?如果是這樣,您需要區分用於查詢的「用戶」內存和用於分頁的「系統」內存或(神禁止)在RAID 5磁盤上生成奇偶校驗。

高CPU通常可以通過更多的RAM和更好的磁盤配置來解決。

2

SQL Server 2008有一個新的「資源調控器」,可能有所幫助。我不知道你是否使用SQL Server 2008,但你可能想看看here

3

首先,你在SQL事件探查器中看到的一些是累積的,所以你不能總是隻需添加數字。例如,一個SPCompleted事件將顯示所有構成它的SPStatementCompleted事件的總時間。不知道這是你的問題。

提高CPU的唯一方法是實際上提高您的查詢。確保其使用的索引,最小化讀取的行數等。在這些技術的某些方面與經驗豐富的DBA合作,或read a book

只有其他緩解我能想到的是限制CPU數量的查詢上運行(這被稱爲並行度的,或DOP)。您可以在服務器級別設置它,或者在查詢級別指定它。如果你有一個多處理器服務器,這可以確保一個長時間運行的查詢不會接管盒子上的所有處理器 - 它會讓一個或多個處理器免費供其他查詢運行。

1

這是連接字符串的問題。如果審計註銷佔用你的cpu太多,那麼嘗試使用不同的連接字符串來玩。