的SQL Server DBCC命令概述
此文主要向大家講述的是一些特別有用處,但相關文檔中沒有對其特別介紹的SQL Server DBCC命令,齊可以在優(yōu)化 SQL Server 時進行使用,如果你對其相關的實際操作有興趣了解的話,以下的文章將會給你提供相關的知識。
1.DBCC CacheStats:顯示存在于當前 buffer Cache 中的對象的信息,例如 :hit rates,編譯的對象和執(zhí)行計劃。
例:
- DBCC CACHESTATS
執(zhí)行結果
- 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
從這個命令可以得到一些關鍵的統(tǒng)計信息:
Hit Ratio:顯示特定對象可以在sql server的緩存中被命中的百分比,這個數(shù)值越大,越好。
Object Count:顯示特定類型的對象在sql server的緩存中被命中的總數(shù)。
Avg.Cost:sql server用于測量編譯一個執(zhí)行計劃所需的時間,以及這個計劃所需的內存。根據(jù)這個值,可以決定執(zhí)行計劃是否應該加載在緩存中。
Avg.Pages:測量在緩存中的對象使用8K頁的平均總數(shù)。
LW Ojbect Count,LW Avg Cost,WL Avg Stay,LW Ave Use:這些列的值表明有多少特定的對象已經被寫進程從緩存總移走。這些數(shù)值越低,越好。
2.DBCC DROPCLEANBUFFERS:從緩沖池中刪除所有,清除緩沖區(qū)。在進行測試時,使用這個命令可以從sql server’s的數(shù)據(jù)緩存data cache(buffer)清除所有的測試數(shù)據(jù),以保證測試的公正性。需要注意的是這個命令只移走干凈的緩存,不移走臟緩存。由于這個原因,在執(zhí)行這個命令前,應該先執(zhí)行CheckPoint,將所有臟的緩存寫入磁盤,這樣在運行SQL Server DBCC RROPCLEANBUFFERS 時,可以保證所有的數(shù)據(jù)緩存被清理,而不是其中的一部分。
3.DBCC ErrorLog :如果很少重起mssqlserver服務,那么服務器的日志會增長得很快,而且打開和查看日志的速度也會很慢。使用這個命令,可以截斷當前的服務器日志,主要是生成一個新的日志。可以考慮設置一個調度任務,每周執(zhí)行這個命令自動截斷服務器日志。使用存儲過程sp_cycle_errorlog也可以達到同樣的目的。
4.DBCC FLUSHPROCINDB:用于清理一個數(shù)據(jù)庫實例中指定數(shù)據(jù)庫的存儲過程使用的緩存。數(shù)據(jù)庫的ID是必輸參數(shù)。
在測試時保證以前的存儲過程計劃不會對測試結果造成負面影響,可以使用這個存儲過程。
例子:
- DECLARE @intDBID INTEGER SET @intDBID = (SELECT dbid FROM
- master.dbo.sysdatabases WHERE name = ’database_name’)
- DBCC FLUSHPROCINDB (@intDBID)
5.DBCC FREEPROCCACHE:用于清理所有數(shù)據(jù)庫的過程高速緩存。例如,釋放過程高速緩存將導致重新編譯某些部分(例如特別 SQL 語句),而不是從高速緩存中對其再使用。
6.DBCC MEMORYSTATUS:列出一個詳細分類,分類中顯示sql server緩存如何分配,包括緩存的活動。
7.SQL Server DBCC PAGE:用于查看sql server 中一個數(shù)據(jù)頁的內容。
例:
- DBCC PAGE((dbid|dbname),pagenum [,Print Option][,cache][,logical])
參數(shù)說明:
Dbid or dbname :可以是數(shù)據(jù)庫ID或數(shù)據(jù)庫名。
PageNum:要檢查的頁號
Print option:(可選)打印選項的值是:0,1,2。
0-(缺省)顯示頁的頭信息。
1- 顯示頁的頭信息,頁中每行的信息以及頁的偏移表。逐行顯示頁中的行。
2- 與選項1相同,除了不是逐行顯示頁行,而是顯示一個單個的信息塊。
Cache:(可選)該參數(shù)的值是1或0
0- 命令直接從磁盤查找頁號而不是檢查頁號是否在高速緩存中DBCC PAGE
1- 若頁在高速緩存中,優(yōu)先從高速緩存中獲取頁,而不是直接從磁盤中獲取頁
Logical:(可選)該參數(shù)用于頁號是從虛擬頁中獲取還是邏輯頁中獲取。這個參數(shù)的值可以是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):若內存頁的數(shù)量非常大,這也許是個提示:表明一些用戶連接正在預處理許多TSQL語句。
Number CSql Objects:表明已經在高速緩存中的TSQL的語句的總數(shù)。
Number False Hits:有時,當sql server在匹配在高速緩存中已經存在的TSQL語句時會出現(xiàn)錯誤的命中。在理想的情況下,這個數(shù)字應該盡可能地小。
9.SQL Server DBCC SQLPERF():這個命令包括了那些有文檔說明和沒有說明的選項。
- DBCC SQLPERF ( LOGSPACE )
提供有關所有數(shù)據(jù)庫中的事務日志空間使用情況的統(tǒng)計信息。具體說明可參考聯(lián)機幫助。
DBCC SQLPERF(UMSSTATS):提供有關sql server 線程管理情況的統(tǒng)計信息。
運行這個命令,結果如下:
- 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
以下是一些關鍵統(tǒng)計信息的解釋:
Scheduler ID:每個CPU對應一個調度程序,這是調度程序的序號。
Num user:目前在調度隊列中的SQL Server線程數(shù)目。
Num runnable: 目前正在運行的SQL Server線程數(shù)目。
Num Workers:線程池的大小。
Idle workers:正在空閑的workers。
Cntxt switches:在可執(zhí)行的線程之間交換上下文的數(shù)目。
DBCC SQLPERF(WAITSTATS):提供有關sql server read-ahead activity的信息。
DBCC SQLOERF(IOSTATS):提供主要的SQL server讀和寫的信息。
SQL Server DBCC SQLPERF(RASTATS):提供SQL server read-ahead 活動的信息。
DBCC SQLPERF (THREADS):提供每個sql server線程的I/O,CPU及內存使用情況的信息。
【編輯推薦】