如何在SQL Server 2005/2008中清除查询执行统计信息

Sim*_*ith 28 sql sql-server statistics performance sql-execution-plan

基于使用从这篇文章获得的这个非常有用的SQL获取查询执行统计信息最常执行的存储过程 - 堆栈溢出:

SELECT TOP 100
   qt.TEXT AS 'SP Name',
   SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query,
   qs.execution_count AS 'Execution Count',
   qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime',
   qs.total_worker_time AS 'TotalWorkerTime',
   qs.total_physical_reads AS 'PhysicalReads',
   qs.creation_time 'CreationTime',
   qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.dbid = (SELECT dbid
                FROM sys.sysdatabases
               WHERE name = 'BSP')
ORDER BY qs.total_worker_time/qs.execution_count DESC
Run Code Online (Sandbox Code Playgroud)

我如何完全清除这些执行统计信息并从头开始?

这将特别有用,因为开发错误和测试已经导致例程被调用通常很多次,从而无视真实的使用级别.

And*_*rew 54

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)

  • 如果不删除缓冲区,则后续运行的查询将使用缓存到内存中的数据 - 因为整个过程现在都有可能使用逻辑IO,而不是物理,因此会使结果发生偏差.http://msdn.microsoft.com/en-us/library/ms187762.aspx (2认同)