【賽迪網-IT技術報道】這篇論壇文章(賽迪網技術社區)主要介紹了一些特別有用但文檔中沒有介紹的sql server DBCC命令,詳細內容請參考下文:
以下是一些sql server的DBCC命令,可以在優化 sql server時使用。
◆1.DBCC CacheStats :顯示存在於當前 buffer Cache 中的對象的資訊,例如 :hit rates,編譯的對象和執行計劃
例:
DBCC CACHESTATS
執行結果(縮略)
Object Name Hit Ratio
------------ -------------
Proc 0.86420054765378507
Prepared 0.99988494930394334
Adhoc 0.93237136647793051
ReplProc 0.0
Trigger 0.99843452831887947
Cursor 0.42319205924058612
Exec Cxt 0.65279111666076906
View 0.95740334726893905
Default 0.60895011346896522
UsrTab 0.94985969576133511
SysTab 0.0
Check 0.67021276595744683
Rule 0.0
Summary 0.80056155581812771
從這個命令可以得到一些關鍵的統計資訊:
Hit Ratio:顯示特定對象可以在sql server的緩存中被命中的百分比,這個數值越大,越好
Object Count:顯示特定類型的對象在sql server的緩存中被命中的總數
Avg.Cost:sql server用於測量編譯一個執行計劃所需的時間,以及這個計劃所需的記憶體。根據這個值,可以決定執行計劃是否應該載入在緩存中。
Avg.Pages:測量在緩存中的對象使用8K頁的平均總數
LW Ojbect Count,LW Avg Cost,WL Avg Stay,LW Ave Use:這些列的值表明有多少特定的對象已經被寫進程從緩存總移走。這些數值越低,越好。
◆2.DBCC DROPCLEANBUFFERS:從緩衝池中刪除所有,清除緩衝區。在進行測試時,使用這個命令可以從sql server’s的數據緩存data cache(buffer)清除所有的測試數據,以保證測試的公正性。需要注意的是這個命令只移走乾淨的緩存,不移走臟緩存。由於這個原因,在執行這個命令前,應該先執行CheckPoint,將所有臟的緩存寫入磁片,這樣在運行DBCC RROPCLEANBUFFERS 時,可以保證所有的數據緩存被清理,而不是其中的一部分。
◆3.DBCC ErrorLog :如果很少重起mssqlserver服務,那麼伺服器的日誌會增長得很快,而且打開和查看日誌的速度也會很慢。使用這個命令,可以截斷當前的伺服器日誌,主要是生成一個新的日誌。可以考慮設置一個調度任務,每週執行這個命令自動截斷伺服器日誌。使用存儲過程sp_cycle_errorlog也可以達到同樣的目的。
◆4.DBCC FLUSHPROCINDB:用於清理一個數據庫實例中指定數據庫的存儲過程使用的緩存。數據庫的ID是必輸參數。
在測試時保證以前的存儲過程計劃不會對測試結果造成負面影響,可以使用這個存儲過程。
例子:
DECLARE @intDBID INTEGER SET @intDBID = (SELECT dbid FROM master.dbo.sysdatabases WHERE name = 'database_name')
DBCC FLUSHPROCINDB (@intDBID)
◆5.DBCC FREEPROCCACHE:用於清理所有數據庫的過程高速緩存。例如,釋放過程高速緩存將導致重新編譯某些部分(例如特別 SQL 語句),而不是從高速緩存中對其再使用。
◆6.DBCC MEMORYSTATUS:列出一個詳細分類,分類中顯示sql server緩存如何分配,包括緩存的活動。
◆7.DBCC PAGE:用於查看sql server 中一個數據頁的內容
例:
DBCC PAGE((dbid|dbname),pagenum [,Print Option][,cache][,logical])
參數說明:
Dbid or dbname :可以是數據庫ID或數據庫名。
PageNum:要檢查的頁號
Print option:(可選)列印選項的值是:0,1,2。
0-(缺省)顯示頁的頭資訊
1- 顯示頁的頭資訊,頁中每行的資訊以及頁的偏移表。逐行顯示頁中的行。
2- 與選項1相同,除了不是逐行顯示頁行,而是顯示一個單個的資訊塊。
Cache:(可選)該參數的值是1或0,
0- 命令直接從磁片搜尋頁號而不是檢查頁號是否在高速緩存中DBCC PAGE
1- 若頁在高速緩存中,優先從高速緩存中獲取頁,而不是直接從磁片中獲取頁
Logical:(可選)該參數用於頁號是從虛擬頁中獲取還是邏輯頁中獲取。這個參數的值可以是1或0,
0- 一個虛擬頁號
1- 一個邏輯頁號
◆8.DBCC SQLMGRSTATS:用於產生3個不同的值,這些值用在你想查看高速緩存在ad-hoc和預編譯的TSQL語句中是如何工作的。
例:
DBCC SQLMGRSTATS
結果:
Item Status
------------------------- -----------
Memory Used (8k Pages) 5446
Number CSql Objects 29098
Number False Hits 425490
其中:
Memor Used(8K Pages):若記憶體頁的數量非常大,這也許是個提示:表明一些用戶連接正在預處理許多TSQL語句。
Number CSql Objects:表明已經在高速緩存中的TSQL的語句的總數
Number False Hits:有時,當sql server在匹配在高速緩存中已經存在的TSQL語句時會出現錯誤的命中。在理想的情況下,這個數字應該盡可能地小。
◆9.DBCC SQLPERF():這個命令包括了那些有文檔說明和沒有說明的選項。
DBCC SQLPERF ( LOGSPACE )
提供有關所有數據庫中的事務日誌空間使用情況的統計資訊。具體說明可參考連線幫助。
DBCC SQLPERF(UMSSTATS):提供有關sql server 線程管理情況的統計資訊
運行這個命令,結果如下:
Statistic Value
-------------------------------- ------------------------
Scheduler ID 0.0
num users 17.0
num runnable 0.0
num workers 13.0
idle workers 6.0
work queued 0.0
cntxt switches 76752.0
cntxt switches(idle) 47139.0
Scheduler Switches 0.0
Total Work 54056.0
以下是一些關鍵統計資訊的解釋:
Scheduler ID:每個CPU對應一個調度程式,這是調度程式的序號
Num user:目前在調度隊列中的SQL Server線程數目
Num runnable: 目前正在運行的SQL Server線程數目
Num Workers:線程池的大小
Idle workers:正在空閒的workers。
Cntxt switches:在可執行的線程之間交換上下文的數目
DBCC SQLPERF(WAITSTATS):提供有關sql server read-ahead activity的資訊
DBCC SQLOERF(IOSTATS):提供主要的SQL server讀和寫的資訊
DBCC SQLPERF(RASTATS):提供SQL server read-ahead 活動的資訊
DBCC SQLPERF (THREADS):提供每個sql server線程的I/O,CPU及記憶體使用情況的資訊。
(責任編輯:盧兆林)