2009-10-15 51 views
9

有沒有辦法找到SQL Server上的表讀寫計數的統計信息2005/2008如何找出SQL Server表的讀寫統計信息?

我特別在尋找DMVs/DMFs而不使用觸發器或審計。

目標這裏是要找出適當填充係數指標 - 得到了這篇文章(Fill Factor Defined)的想法。


[UPDATE]上有ServerFault
How to determine Read/Write intensive table from DMV/DMF statistics

+0

問題當前的鏈接重定向到似乎是病毒。 – 2017-05-05 12:58:47

回答

8

記住'表'表示聚集索引或'堆'。

+0

@Remus:經過一番調查,上述所有DMV/DMF的組合都是我需要找出填充因子值來設置的。稍後我會問一個跟進問題,看看我是否提出了正確或不正確的問題。謝謝,Remus。 – Sung 2009-10-16 14:07:48

3

要確定表格索引的適當填充因子,您需要查看發生頁面拆分的次數。這顯示在sys.dm_db_index_operational_stats中:

葉分配計數:索引葉級別處的頁分裂總數。

非葉分配數:索引葉級以上的頁分裂總數。

葉頁合併計數:索引葉級合併的頁面總數。

在做了一些挖掘之後,我看到一些帖子說DMV中的頁面拆分數字沒有那麼有用(我沒有親自證實過這一點),但是也有一個性能計數器「頁面split/sec「(但它僅在SQL Server實例級別)。

我使用的經驗法則是普通表使用默認的90%填充因子,高位插入表在70-85%之間(取決於行大小)。只讀表可以使用100%的填充因子

+0

@Mitch:在更新葉子/非葉子分配數量較高的某些高度更新的表上的填充因子後,讓我看看「DMV中的頁面拆分數字沒有那麼有用」,然後回到這個問題上。謝謝你爲我指出這一點。 – Sung 2009-10-16 14:08:50

17

以下查詢可用於查找數據庫中所有表的讀取和寫入次數。這個查詢結果可以導出到CSV文件,然後使用Excel公式可以輕鬆計算出讀寫比例。非常有用的,而在表上規劃指標

DECLARE @dbid int 
SELECT @dbid = db_id('database_name') 

SELECT TableName = object_name(s.object_id), 
     Reads = SUM(user_seeks + user_scans + user_lookups), Writes = SUM(user_updates) 
FROM sys.dm_db_index_usage_stats AS s 
INNER JOIN sys.indexes AS i 
ON s.object_id = i.object_id 
AND i.index_id = s.index_id 
WHERE objectproperty(s.object_id,'IsUserTable') = 1 
AND s.database_id = @dbid 
GROUP BY object_name(s.object_id) 
ORDER BY writes DESC 
+0

我們可以有日期過濾器嗎? – 2016-04-27 09:54:59

+0

不,我們不能擁有日期過濾器@PhilipMorris – 2016-04-29 03:44:48

1

如果你有一個很好的聚集索引(即不斷增加的,獨特的,窄)則填充因數真正確定問題是表的更新方式和數據類型的列。 如果列的大小都是固定大小(例如,整數,小數,浮點,字符)並且不可爲空,則更新無法增加行所需的存儲空間。鑑於良好的聚集索引,你應該選擇90 +甚至100的填充因子,因爲頁面拆分不會發生。 如果你有幾個可變長度的列(例如一個Varchar來保存用戶名),並且插入後很少更新列,那麼你仍然可以保持相對較高的填充因子。 如果您的數據長度變化很大(例如,UNC路徑,註釋字段,XML),那麼應該減少填充因子。特別是如果列經常更新和增長(如評論欄)。 非聚集索引通常是相同的,除了索引鍵可能更成問題(非唯一,可能不會增加)。 我認爲sys.dm_db_index_physical_stats給出了這個最好的指標,但它是事實。查看avg/min/max記錄大小,avg frag大小,平均頁面空間,用於獲取如何使用索引空間的圖片。 HTH。

相關問題