2011-07-13 130 views
10

说完看了看周围使用谷歌大叔净,我无法找到这个问题的答案:防止缓存在SQL Server

什么是监测的运行IIS和MS SQL Server生产服务器的性能和响应能力的最佳途径2005年?

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

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

有什么办法可以模拟MySQL中的NO_CACHE吗?

问候

+0

嗨米奇,我们有3个服务器,一个Web,应用程序和数据库服务器。监视首页并不代表我们用户正在经历的查询时间或响应性,因此“真实世界查询”由PHP脚本执行。我修改了原来的问题。 –

+0

IIS和2K5位于不同的服务器上。 –

回答

3

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对象进行查询,但我并不熟悉这些。

+0

您好诺埃尔,问的原因是我有一个查询需要10秒钟执行第一次,第二次只需要2秒。改变客户端或日期(仍然使用相同的表格等),它会回到第一次运行10秒钟,后续运行2秒钟。 –

+0

Jim,它听起来像SQL Server正在缓存内存中的页面,否则您将从磁盘读取,因此您看到不同的查询时间。我发现你试图通过随机字符来防止计划重用,但这不会导致你的缓冲区被丢弃。如果你添加了TOP x,你应该在那里放置一个随机的排序顺序(ORDER BY NEWID()),或者你应该每次选择一个随机范围的行,这会导致SQL从磁盘读取数据(如果这些页面不在其他查询的记忆中)。 – Noel

17

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

DBCC DROPCLEANBUFFERS 
GO 
DBCC FREEPROCCACHE 
GO 

使用DROPCLEANBUFFERS测试用冷缓冲区高速缓存的查询,而无需关闭和重新启动服务器。 (source

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

+2

值得一提的是,这将清除整个服务器的缓存,所以在生产服务器上运行它可能不是最好的主意。根据数据库和缓存计划的数量,它可能需要几秒到半小时才能完成。 – Groo