【问题标题】:How to Clear down Query Execution Statistics in SQL Server 2005/2008如何在 SQL Server 2005/2008 中清除查询执行统计信息
【发布时间】:2011-01-15 15:52:02
【问题描述】:

基于使用从这篇帖子Most Executed Stored Procedure - Stack Overflow 获得的这条非常有用的 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

如何彻底清除这些执行统计数据并从头开始?

这将特别有用,因为开发错误和测试已导致例程通常被大量调用,从而使真正的使用级别无效。

【问题讨论】:

    标签: sql sql-server performance statistics sql-execution-plan


    【解决方案1】:
    DBCC FREEPROCCACHE
    DBCC DROPCLEANBUFFERS
    

    【讨论】:

    • 这在测试环境中有效 - 在生产环境中这样做有任何风险吗?
    • 是的,虽然它被列为开发错误和测试,所以除非他们针对产品​​进行测试/开发,否则应该没问题。在生产环境中,它会严重占用 CPU,但会恢复。
    • SQL Server 2012 我刚刚使用了DBCC FREEPROCCACHE。为什么我们还要清除buffer
    • 如果您不删除缓冲区,则查询的后续运行将使用缓存到内存中的数据 - 扭曲结果,因为整个过程现在很有可能使用逻辑 IO,不是物理的。 msdn.microsoft.com/en-us/library/ms187762.aspx
    • re “在生产中要小心” - 因为这会清除执行计划缓存,服务器必须从头开始创建和编译它们。在我们的(相对较大的)应用程序中,需要半天时间才能将所有计划恢复到缓存中。
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多