以下是一些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從這個命令可以得到一些關鍵的統計資訊:l
Hit Ratio
:顯示特定對象可以在sql server的緩衝中被命中的百分比,這個數值越大,越好l
Object Count
:顯示特定類型的對象在sql server的緩衝中被命中的總數l
Avg.Cost:sql server用於測量編譯一個執行計畫所需的時間,以及這個計劃所需的記憶體。根據這個值,可以決定執行計畫是否應該載入在緩衝中。l
Avg.Pages:測量在緩衝中的對象使用8K頁的平均總數l
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),filenum,pagenum [,Print Option][,cache][,logical])參數說明:Dbid or dbname :可以是資料庫ID或資料庫名。PageNum:要檢查的頁號Print option:(可選)列印選項的值是:0,1,2。 0-(預設)顯示頁的頭資訊 1- 顯示頁的頭資訊,頁中每行的資訊以及頁的位移表。逐行顯示頁中的行。 2- 與選項1相同,除了不是逐行顯示頁行,而是顯示一個單個的資訊塊。Cache:(可選)該參數的值是1或0,0- 命令直接從磁碟尋找頁號而不是檢查頁號是否在快取中DBCC PAGE1- 若頁在快取中,優先從快取中擷取頁,而不是直接從磁碟中擷取頁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其中:l Memor Used(8K Pages):若記憶體頁的數量非常大,這也許是個提示:表明一些使用者串連正在預先處理許多TSQL語句。l Number CSql Objects:表明已經在快取中的TSQL的語句的總數l Number False Hits:有時,當sql server在匹配在快取中已經存在的TSQL語句時會出現錯誤的命中。在理想的情況下,這個數字應該儘可能地小。
8
.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.0Scheduler Switches 0.0Total Work 54056.0 以下是一些關鍵統計資訊的解釋:l Scheduler ID:每個CPU對應一個發送器,這是發送器的序號l Num user:目前在調度隊列中的SQL Server線程數目l Num runnable: 目前正在啟動並執行SQL Server線程數目l Num Workers:線程池的大小l Idle workers:正在閒置workers。l 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及記憶體使用量情況的資訊。
DBCC IND ('pagesplittest', 't1', 1);
GO
This command list all the pages that are allocated to an index. Here's the output in this case:
The columns mean:
- PageFID - the file ID of the page
- PagePID - the page number in the file
- IAMFID - the file ID of the IAM page that maps this page (this will be NULL for IAM pages themselves as they're not self-referential)
- IAMPID - the page number in the file of the IAM page that maps this page
- ObjectID - the ID of the object this page is part of
- IndexID - the ID of the index this page is part of
- PartitionNumber - the partition number (as defined by the partitioning scheme for the index) of the partition this page is part of
- PartitionID - the internal ID of the partition this page is part of
- iam_chain_type - see IAM chains and allocation units in SQL Server 2005
- PageType - the page type. Some common ones are:
- 1 - data page
- 2 - index page
- 3 and 4 - text pages
- 8 - GAM page
- 9 - SGAM page
- 10 - IAM page
- 11 - PFS page
- IndexLevel - what level the page is at in the index (if at all). Remember that index levels go from 0 at the leaf to N at the root page (except in clustered indexes in SQL Server 2000 and 7.0 - where there's a 0 at the leaf level (data pages) and a 0 at the next level up (first level of index pages))
- NextPageFID and NextPagePID - the page ID of the next page in the doubly-linked list of pages at this level of the index
- PrevPageFID and PrevPagePID - the page ID of the previous page in the doubly-linked list of pages at this level of the index