Vsj*_*kkc 7 sql-server stored-procedures index-tuning
如何扫描需要创建索引的存储过程。
任何人有任何想法?基本上我们有运行非常缓慢的存储过程。我想知道是否有某种自动脚本或应用程序可以扫描以指示是否需要创建索引?
对此没有考虑太多,仅回答所提出的特定问题,这里有一种方法可以识别所有引用表的存储过程,这些表在某些时候已被识别为附加索引的候选者。不幸的是,这是一个非常松散的关系......我不相信有任何直接的方法可以说“这个存储过程查询了这个表并且可以使用这个建议的索引”,除非你开始解析 sql 文本并针对列进行模糊匹配等由缺失的索引 DMV 推荐。这是一个开始朝着那个过程。也就是说,我有点同意 Henry 的观点,有很多更直接的方法可以分析和解决您确定的存储过程中的性能问题。例如,检查执行计划应该比您想要采用的这种迂回方法更直观地提供一些线索。无论如何,这是一个让您开始的查询:
SELECT
[Procedure] = QUOTENAME(OBJECT_SCHEMA_NAME(s.[object_id]))
+ '.' + QUOTENAME(OBJECT_NAME(s.[object_id])),
[Table] = QUOTENAME(r.referenced_schema_name)
+ '.' + QUOTENAME(r.referenced_entity_name),
i.equality_columns,
i.inequality_columns,
i.included_columns,
s.execution_count,
avg_time = s.total_elapsed_time*1.0/s.execution_count
FROM sys.dm_exec_procedure_stats AS s
CROSS APPLY sys.dm_sql_referenced_entities
(
QUOTENAME(OBJECT_SCHEMA_NAME(s.[object_id]))
+ '.' + QUOTENAME(OBJECT_NAME(s.[object_id])), 'OBJECT'
) AS r
INNER JOIN sys.dm_db_missing_index_details AS i
ON i.[object_id] = r.referenced_id
WHERE r.referenced_minor_id = 0;
Run Code Online (Sandbox Code Playgroud)
注意:DMV 通常只有自上次重启以来的数据。
从 SS 2005 开始,有一个名为 sys.dm_db_missing_index_details 的 DMV。谷歌一下,你会发现一些有用的脚本。
也就是说,您可能需要更全面地看待问题 - 您的硬件是否足够(Perfmon 计数器将帮助您解决此问题),同时运行的其他内容是什么,SQL 主要等待什么(Google DMV sys.dm_os_wait_stats对于一些很棒的脚本)。并且可以查看具体存储过程的执行计划来找出瓶颈在哪里。
归档时间: |
|
查看次数: |
4660 次 |
最近记录: |