一些文件中沒有介紹的SQL Server DBCC命令

iSQlServer發表於2009-04-09
主要介紹了一些特別有用但文件中沒有介紹的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及記憶體使用情況的資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-586878/,如需轉載,請註明出處,否則將追究法律責任。

相關文章