某数据库服务器CPU突然占用超过40%了,平时只有5%以下,可看正在执行的语句,发现有大量的相同语句在运行,可能是执行计划不正确导致,所以我们可以只对这个语句进行执行计划的清除,清除后会自动重新再生成新的执行计划,这样实现了执行计划的更新。

SELECT a.execution_count ,
        a.max_worker_time ,
        a.total_worker_time ,
        a.total_worker_time / a.execution_count ,--毫秒 
        a.sql_handle ,
        a.plan_handle ,
        query_plan ,
        text
 FROM   sys.dm_exec_query_stats a
        CROSS APPLY sys.dm_exec_sql_text(a.sql_handle)
        CROSS APPLY sys.dm_exec_query_plan(a.plan_handle)
 WHERE  text LIKE '%查要询的语句内容(@P0 datetime2,@P1 datetime2,@P2 int)'
 
 DBCC freeproccache( 0x02000000518B9009534DAC8FFFE0BF952670BDF8B82E1EB0)--用sql_handle清空某个语句的执行计划

建议使用两次以上的语句,因为在执行DBCC时可能正巧刚刚被重新编译了,仍然是旧计划。