SQL查询性能问题 - 我搞砸了什么?

时间:2011-09-01 15:43:01

标签: sql sql-server tsql

我为问题的模糊性道歉,但我在生产服务器上意外地运行了以下查询(我打算在我的本地服务器上测试它):

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
DECLARE @start DATETIME SET @start = getDate()
EXEC test_1a
SELECT getDate() - @start AS Execution_Time
GO

我的sql知识只是基本的,所以我不确定这是做什么的。在我意识到我连接到错误的机器后,我取消了查询。

有人可以解释一下这些陈述的作用以及是否有任何影响?

3 个答案:

答案 0 :(得分:11)

没有永久性损坏(假设存储过程没有执行任何操作)但您刚刚清除了整个过程高速缓存并从生产盒上的缓冲区高速缓存中删除了所有非脏页。 (脏页是在内存中已修改但尚未写入光盘的页面)

这意味着现在进入的查询都需要重新编译(高CPU使用率),并且几乎所有数据都需要从光盘重新读入。

BTW:我建议使用免费的SSMS Tools Pack Addin。您可以使用Window Connection Coloring为所有生产服务器窗口提供红色标题栏,例如,以减少此类错误。

SSMS Tools Pack

答案 1 :(得分:2)

简单回答:您已清除所有缓存的存储过程计划,需要重新编译它们。重新编译程序会在短时间内导致性能问题。

没有造成任何损害。

<强> FREEPROCCACHE

Removes all elements from the plan cache, removes a specific plan from the plan 
cache by specifying a plan handle or SQL handle, or removes all cache entries 
associated with a specified resource pool.

<强> DROPCLEANBUFFERS

Removes all clean buffers from the buffer pool.

答案 2 :(得分:-3)

我认为这不是有害代码,因为它的名称为FREEPROCCACHE和DROPCLEANBUFFERS,它们正在清理缓存和缓冲区,然后其余代码会看到程序的运行时间。