如何从DMV / DMF统计中确定读/写密集表

这是堆栈溢出问题的后续问题

如何找出SQL Server表的读/写统计信息?

目标与上一个问题相同

这里的目标是为索引找出适当的填充因子

根据Mitch Wheat的回答,他build议

…普通表使用默认的90%填充因子,高位插入表在70-85%之间(取决于行大小)。 只读表可以使用100%的填充因子

即使找出了指数统计数据,我也很难理解结果。

你如何确定一张桌子是否高

  • 插入/读取表格?

你必须考虑所有的统计数据,如leaf_insert_countleaf_delete_countuser_seek/scan/lookup_count等吗?
或者我需要只看几个域名?

我很想看看还有哪些方法可以确定如何确定特定索引的填充因子。

查询用于获取索引统计信息,

 select db_name(US.database_id) , object_name(US.object_id) , I.name as IndexName , OS.leaf_allocation_count , OS.nonleaf_allocation_count , OS.leaf_page_merge_count , OS.leaf_insert_count , OS.leaf_delete_count , OS.leaf_update_count , * from sys.dm_db_index_usage_stats US join sys.indexes I on I.object_id = US.object_id and I.index_id = US.index_id join sys.dm_db_index_operational_stats(db_id(), null, null, null) OS on OS.object_id = I.object_id and OS.index_id = I.Index_id where I.type <> 0 -- not heap and object_name(US.object_id) not like 'sys%' order by OS.leaf_allocation_count desc, OS.nonleaf_allocation_count desc, OS.leaf_page_merge_count desc, US.User_updates desc, US.User_Seeks desc, US.User_Scans desc, US.User_Lookups desc 

并取样结果。

替代文字

我问了一个类似的问题,但专门为由身份字段组成的聚集索引。 有好的答案:

使用代理标识密钥更正聚集索引的填充因子值

我决定全局设置所有表/索引的填充因子为80%,身份聚集索引为90%

我删除碎片每日重build指数碎片> = 30%和重新组织索引> 5%和<30%。

我将这些操作logging在一个表格中,我会定期查看这些表格,并用作提高/降低填充因子的指导。

填充因子是你必须玩的东西,直到你得到正确的设置。

桌子的高度没有关系。 80%可能并不总是一个好数字。 如果这些值总是按顺序使用,则使用100%。 如果你不需要,在页面上留下可用的空间是毫无意义的。

如果你有一个索引,当新值将遍布整个地方,那么你需要更高的填充因子。 如果您在GUID上编制索引(而不是按顺序创buildGUID),则可能需要50%的填充因子(取决于表插入比率,索引重build频率等)。