防止SQL Server中的缓存

Jim*_*ant 16 sql-server caching sql-server-2005

使用谷歌叔叔环顾网络后,我无法找到这个问题的答案:

监视运行IIS和MS SQL Server 2005的生产服务器的性能和响应能力的最佳方法是什么?

我目前正在使用Pingdom,并希望它指向一个基本上模仿"真实世界查询"的URL,但出于显而易见的原因,不希望查询从缓存中运行.该URL将每5分钟调用一次.

我无法清除缓存,缓冲区等,因为这会对生产服务器产生负面影响.我尝试在SELECT语句中使用随机生成的数字以生成唯一查询,但仍然使用缓存查询.

有没有办法模拟MySQL中的NO_CACHE?

问候

Kei*_*ith 25

要清除SQL缓冲区并计划缓存:

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

使用DROPCLEANBUFFERS使用冷缓冲区缓存测试查询,而无需关闭并重新启动服务器.(来源)

使用DBCC FREEPROCCACHE仔细清除计划缓存.例如,释放计划高速缓存会导致重新编译存储过程,而不是从高速缓存中重用.(来源)

  • 值得一提的是,这将清除整个服务器的缓存,因此在生产服务器上运行它可能不是最好的主意.它可能还需要几秒到半小时才能完成,具体取决于数据库和缓存计划的数量. (4认同)

Noe*_*oel 4

SQL Server 没有像 MySQL 或 Oracle 这样的结果缓存,所以我对你的问题有点困惑。如果您希望服务器重新编译存储过程的计划缓存,可以使用 RECOMPILE 执行它。您可以删除缓冲区缓存,但这会影响您知道的所有查询。

在我的公司,我们分别测试可用性和性能。我建议您使用此查询只是为了确保您的系统从前端到数据库都能协同工作,然后编写其他测试来检查各个组件以判断性能。SQL Server 提供了数量惊人的方法来检查您是否遇到瓶颈以及瓶颈所在。我广泛使用 PerfMon 和 DMV。我使用 PerfMon 检查 CPU 和页面的预期寿命,并查看磁盘队列的长度。使用 DMV,我可以查明我的查询是否花费了太长的时间 (sys.dm_exec_query_stats) 或者等待时间是否很长 (sys.dm_os_wait_stats)。

IIS 的两个最大瓶颈往往是 CPU 和内存,并且 IIS 附带了自己的 PerfMon 对象套件来查询,但我对这些不太熟悉。