某数据库服务器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时可能正巧刚刚被重新编译了,仍然是旧计划。