之前的兩篇部落格中有2個例子,來示範要講述的內容。其中提到了部分查看資料庫狀態的方法,那裡並不是很全面,這篇部落格羅列幾個我們在後面系列部落格中會用到查看這些狀態,資料的地方。以及測試中清除緩衝的方法。
前面兩篇部落格的連結地址如下:
SQL Server 索引基礎知識(1)--- 記錄資料的基本格式
http://blog.joycode.com/ghj/archive/2008/01/02/113290.aspx
SQL Server 索引基礎知識(2)----叢集索引,非叢集索引
http://blog.joycode.com/ghj/archive/2008/01/02/113291.aspx
如何獲得索引的一些資訊
比如:查看索引的深度SQL 指令碼如下:
select INDEXPROPERTY (OBJECT_ID('ChargeHeap'),'ChargeHeap_NCInd','IndexDepth')
其中的 'ChargeHeap' 為我們要查看索引所在的表名,'ChargeHeap_NCInd' 為所要查看的索引名,'IndexDepth' 為所要查看的索引屬性。
更多屬性請參看下面頁面的參數說明:
http://technet.microsoft.com/zh-cn/library/ms187729.aspx
或者我們在 SQL Server Management Studio 中選中我們要查看的索引,然後在右鍵菜單中查看索引的屬性。其中 Fragmentation 標籤頁會有很多我們對
這個索引感興趣的內容,比如:
我們可以在這裡看到索引的深度,子節點數,資料頁數等等資訊。這些資訊對我們分析查詢語句的效能非常有協助。
如何查看磁碟I/O操作資訊
SET STATISTICS IO ON 命令是一個 使 SQL Server 顯示有關由 Transact-SQL 陳述式產生的磁碟活動量的資訊。
我們在分析索引效能的時候,會非常有用。
啟用了這個屬性後,我們在執行 SQL 陳述式後,會收到類似如下的資訊,這有利於我們分析SQL的效能:
(3999 row(s) affected)
表 'ChargeCL'。掃描計數 1,邏輯讀取 9547 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
其中的 lob 邏輯讀取、lob 物理讀取、lob 預讀 這三個指標是 讀取 text、ntext、image 或大實值型別 (varchar(max)、nvarchar(max)、varbinary(max)) 時的指標。
而 邏輯讀取、物理讀取、預讀 是對普通資料頁的讀取。
使用 SQL Server Management Studio Standard Reports
我們在 SQL Server Management Studio 中,選擇資料庫伺服器,或者具體資料庫,或者Security -- Logins 時,或者Management 時,Notification Services 或者 SQL Server Agent 對象時候,都會看到SQL Server 替我們提供的一些現成報表,這些報表的資料,有利於我們分析資料庫的狀態。
比如在 SQL Server 索引基礎知識(1)--- 記錄資料的基本格式
http://blog.joycode.com/ghj/archive/2008/01/02/113290.aspx
中,我們就使用資料表佔用空間的報表
具體報表可以參考以下連結:
SQL Server Management Studio Standard Reports - Overview
http://blogs.msdn.com/buckwoody/archive/2007/10/09/sql-server-management-studio-standard-reports-overview.aspx
測試中,釋放緩衝的一些方法
尤其查詢語句效能測試時,資料是否被緩衝,這是測試中一個重要點。下面幾個命令協助我們清除緩衝。方便測試。
清除緩衝有關的命令:
SQL 2000裡面除了dbcc unpintable好像就沒有了 而且這個操作也不會立即釋放表記憶體Buffer
(DBCC UNPINTABLE does not cause the table to be immediately flushed from the data cache. It specifies that all of the pages for the table in the buffer cache can be flushed if space is needed to read in a new page from disk.)
SQL 2005/2008讓DBA能夠更自由的對SQL所佔用的記憶體空間做處理 如:
CHECKPOINT
將當前資料庫的全部髒頁寫入磁碟。“髒頁”是已輸入緩衝區快取且已修改但尚未寫入磁碟的資料頁。CHECKPOINT 可建立一個檢查點,在該點保證全部髒頁都已寫入磁碟,從而在以後的恢複過程中節省時間。
DBCC DROPCLEANBUFFERS
從緩衝池中刪除所有清除緩衝區。
DBCC FREEPROCCACHE
從過程緩衝中刪除所有元素。
DBCC FREESYSTEMCACHE
從所有緩衝中釋放所有未使用的緩衝條目。SQL Server 2005 資料庫引擎會事先在後台清理未使用的緩衝條目,以使記憶體可用於當前條目。但是,可以使用此命令從所有緩衝中手動刪除未使用的條目。
另外還可以 sp_cursor_list 查看全部遊標
DBCC OPENTRAN查看資料庫開啟事務狀態等
參考資料:
CSDN 這個文章的 rouqu(石林#黃果樹)的回複
http://topic.csdn.net/u/20070404/14/6ee765a4-fc32-4d2c-a62c-6d51291e6007.html