使用动态管理视图(DMVs)来检测SQL执行计划的突变,需要关注能够提供查询执行统计和计划信息的视图。以下是一些可以用于此目的的DMVs以及相应的查询示例:
sys.dm_exec_query_stats:这个视图提供了关于SQL Server中查询执行的统计信息,包括CPU时间、总工作时间、执行次数等。
sys.dm_exec_sql_text:结合sys.dm_exec_query_stats使用,可以获取与sql_handle对应的SQL文本。
sys.dm_exec_cached_plans:这个视图包含了缓存中的执行计划的统计信息,如计划的大小、执行次数等。
sys.dm_exec_query_plan:这个视图与sys.dm_exec_sql_text结合使用,可以获取特定查询的执行计划。
要检测执行计划的突变,可以定期运行上述查询,并将结果存储在表中,或者与之前的结果进行比较。
例如,可以比较两个不同时间点的total_worker_time或total_elapsed_time,以查看是否有显著变化,这可能表明执行计划已经改变。
由于sys.dm_exec_query_stats中的信息可能会被SQL Server周期性地重置,因此最好的做法是将这些信息记录到一个持久化表中,这样可以基于历史数据来检测突变。
此外,执行计划的突变可能需要结合多个DMVs的信息来综合判断。