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

标签 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知识略高于基础,所以我不确定这是做什么的。在我意识到我连接到错误的机器后,我取消了查询。

谁能解释一下这组语句的作用以及是否有任何影响?

最佳答案

是的。

没有永久性损坏(假设存储过程没有做任何事情),但是您刚刚清除了整个过程缓存并从生产机器上的缓冲区缓存中删除了所有非脏页。 (脏页是在内存中被修改但尚未写入磁盘的页)

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

顺便说一句:我建议使用免费的 SSMS 工具包插件。您可以使用 Window Connection Coloring例如给所有生产服务器窗口一个红色的标题栏,以减少这种错误的可能性。

SSMS Tools Pack

关于Sql 查询性能问题 - 我搞砸了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272821/

相关文章:

sql - 根据列中的重复项选择行

mysql - 如何通过sql将更多的字符串搜索成更小的字符串

mysql - EF6交易

sql - 数据类型tinyint 的算术溢出错误,值= -1

mysql - 即使条件不是我,也选择一些数据

mysql - 如何在 MySQL 中使用关键字 IN OR 内部连接 ​​3 个表?

php - 数据库不会用 mysqli 第二次更新

sql - 将子记录添加到新列而不是新行

SQL Server 查看主键

mysql - 根据复合主键的值读取增量数据