有没有办法找到上表统计数据读取和写入的SQL Server 2005/2008指望?
我专门找DMVs/DMFs
,而无需使用触发器或审计。
这里的目标是找出适当的填充因子指标 -得到了这篇文章的想法( 填充因子定义 )。
[更新]对ServerFault跟进问题
如何确定读/自DMV / DMF统计数据写入密集型表
有没有办法找到上表统计数据读取和写入的SQL Server 2005/2008指望?
我专门找DMVs/DMFs
,而无需使用触发器或审计。
这里的目标是找出适当的填充因子指标 -得到了这篇文章的想法( 填充因子定义 )。
[更新]对ServerFault跟进问题
如何确定读/自DMV / DMF统计数据写入密集型表
记住“表”是指聚簇索引或“堆”。
下面的查询可用于查找读取的数量和数据库中的所有表写入。 此查询结果可以导出为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
要确定一个表的索引适当的填充因子,你需要看的页面分割存在的次数。 这显示在sys.dm_db_index_operational_stats
:
叶分配次数 :在索引的叶级页拆分的总数。
非叶分配次数 :页面分割索引的叶级以上的总数。
叶页合并计数 :页面总数合并在索引的叶级。
做了一些挖后,我已经看到了一些职位,说从DMV的页面拆分数字是没有多大用处的(我没有亲自证实了这一点),但也有一个性能计数器“页拆分/秒” (但它只是在SQL Server实例级别)。
我用拇指普通表使用默认的90%的填充因子,高插表70介于两者之间的规则 - 85%(取决于行大小)。 只读表可以使用100%的填充因子
如果你有一个很好的聚集索引(即不断增加的,独特的,窄)则填充因数真正确定问题是表的更新方式和数据类型的列。 如果列是所有固定大小(例如,整数,小数,浮动,CHAR)和不可为空则更新可以在不增加用于行所需的存储。 鉴于你应该选择的90+的填充因子甚至100,因为页拆分不会发生良好的聚集索引。 如果你有几个变长列(如VARCHAR到保存用户名)和列插入后很少更新,那么你仍然可以保持较高的填充因子。 如果你有在长度上高度可变的数据(例如,UNC路径注释字段,XML),那么填充因子应减少。 特别是如果列被频繁更新和成长(如评论列)。 非聚集索引通常除了索引键同样可以产生更多的问题(非唯一的,也许不是不断增加)。 我认为sys.dm_db_index_physical_stats给出了这个最好的衡量标准,但它是在事后。 看看平均/最大/最小记录大小,平均大小的frag,用于获取如何索引空间正在使用的图片平均页面空间。 HTH。