通过在运行 SQL 查询之前运行 SET STATISTICS IO ON,我可以了解查询完成后对每个索引执行的逻辑读取次数。
通过查看视图 sys.dm_exec_requests,我可以了解到目前为止对任何正在进行的查询执行的逻辑读取数(总计)。
对于正在进行的查询,我如何才能了解到目前为止对每个索引执行了多少逻辑读取?
通过在运行 SQL 查询之前运行 SET STATISTICS IO ON,我可以了解查询完成后对每个索引执行的逻辑读取次数。
通过查看视图 sys.dm_exec_requests,我可以了解到目前为止对任何正在进行的查询执行的逻辑读取数(总计)。
对于正在进行的查询,我如何才能了解到目前为止对每个索引执行了多少逻辑读取?
您可以使用 DMV sys.dm_db_index_usage_stats查看有关正在使用的索引的一些信息。一个例子:
(来自 MSDN 的示例代码)。
一旦特定索引用于数据收集,读取和写入列就会增长。
这是一个很好的问题,让我开始思考。
好的,2 免责声明。首先,这感觉很脏,我不敢相信没有更好的方法。其次,不要在生产服务器上运行它,因为 a) 它使用未记录的功能,并且 b) 它会清除您的缓冲区缓存。
我提出的前提是拆除缓冲区缓存,找到索引的页码,运行查询然后计算已写回内存的页面。
下面是实现方法:
所以事实证明答案是您无法找到到目前为止对正在进行的查询执行的每个索引的逻辑读取。
很明显,Microsoft 确实跟踪此信息以便在查询完成后报告逻辑读取,但没有跟踪标志或 dmv 可帮助提供此信息。
执行的扫描/查找次数和内存中的页数接近标记,但没有完全减少。
更新在 SQL Server 2014 中,您完全可以。有一个新的 DMV sys.dm_exec_query_profiles