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