我正在使用SQL Server Profiler (2008)运行跟踪,以捕获表/索引扫描,因为我只需要知道我们是否对大型表进行了扫描,因此我将添加的列最小化为EventClass (scan:started/stopped)、dbname、objectid、starttime、spid和index I。
在捕获结果中有两个问题,一个是一些对象is为空(即,在所讨论的数据库/所过滤的数据库中不存在),第二个问题是一些索引is不正确,例如,一些表只有一个聚集索引,跟踪提供的索引is被指定为8,另一个是122,尽管该表的索引少于20个。
我曾怀疑空对象id可能是内部虚拟表,我可以接受这一点,但不正确的索引id,假设在标准用户表上,会使我的性能故障排除失去平衡。
提前感谢你的建议,
纳曼
发布于 2012-03-05 09:52:21
如果您要做的只是识别是否正在进行扫描(而不是识别导致扫描的查询),而不是使用跟踪,那么查看system DMV sys.dm_db_index_operational_stats
可能会得到更好的结果。表扫描并不是完全独立的,而是出现在range_scan_count
列中。
另请参阅sys.dm_db_index_usage_stats
中的user_scans
https://stackoverflow.com/questions/9562849
复制相似问题