首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL 2005 -禁用页面缓存

SQL 2005 -禁用页面缓存
EN

Server Fault用户
提问于 2011-06-22 16:51:05
回答 2查看 181关注 0票数 1

我知道这是一个很有趣的请求,但是我想在我们的开发数据库中禁用页面缓存。我相信这将使我们更容易看到所做的各种调整的影响,而且我最好奇的是检索未被缓存的页面的时间,而不是MSSQL从缓存中提取数据的效率。

但是,这必须在数据库级别上完成,因此我不能仅仅将服务器的内存缓存设置为一个荒谬的低级别(而且这有机会删除索引缓存,而我不愿意这样做,而且我们的开发系统还有其他我不愿意接触的数据库)。

用于刷新数据库AFAIK的命令将在所有数据库中刷新它,我不想对我们的开发数据库这样做。

这并不是一件强制性的事情,但是当我可以将整个开发数据库放在页面缓存中时,基准测试是相当困难的。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2011-06-23 17:31:46

在运行测试之前考虑使用DROPCLEANBUFFERS。这将做你想做的事,作为缓存的一次下降。您需要在每个测试开始时运行它。

票数 1
EN

Server Fault用户

发布于 2011-06-25 11:02:49

如果您的测试数据库没有被其他任何东西使用,您可以分离,然后立即重新附加数据库。(您可以使用几个系统存储过程调用( sp_detach_db和sp_attach_db)来实现这一点。)这将将任何页面从缓存中抛出,并且在开始运行查询之前缓存的数据页将非常少(如果有的话)。

当然,如果您正在对比单个查询更复杂的内容进行基准测试,而其他人在您共享开发系统上的其他数据库上运行一个大型查询,则您的结果(以秒为单位来运行该查询)可能会出现偏差,因为您的部分或全部页面可能会被抛出数据缓存,从而使您的查询运行的时间比其他时间长。

如果您的目标是对单个查询(或一组查询,或一个存储过程)进行基准测试,以优化这些查询,并且您没有自己的服务器,那么我建议您将精力集中在页面读取上,而不是运行查询所需的时间。

如果您有一个慢(开发)服务器和一个快速(生产)服务器,具有相同的数据和代码,查询可能在慢服务器上运行10秒,在快速服务器上运行1秒。他们都将阅读相同的页数。(你会发现一些微小的变化,但通常不到1%。)如果您改进了查询,使其在慢速服务器上读取更少的页面,那么它将在快速服务器上读取更少的页面。读取较少页的查询几乎总是性能最好的查询。

您可以从Profiler获得页面读取信息,它可以监视任何客户端程序。(使用Profiler时,请确保筛选出不需要的任何连接/数据库/事件/列,并且不影响正在分析的服务器的性能。)

(当dev系统是单核且服务器可能是双核或四核时,这一点会更加困难。开发系统上的计划对于大型查询是不同的,这是您通常想要优化的。)

另一个工作角度是在SSMS中运行逻辑读取和物理读取查询。在查询选项的对话框中查找"set statistics I/O on“选项。在“高级”区。这对单个查询或简单存储过程最有效。对于复杂的东西,接触到很多桌子,它变得丑陋。在这种情况下,试着找出一些最坏的部分,隔离那些真正不好的部分,然后详细地看看这些部分。

您将希望尽量减少逻辑读取。如果将逻辑读取最小化,则当服务器需要从磁盘中提取数据时,phsyical读取也会下降。此外,在需要缓存数据的情况下,最小化逻辑读取将使查询运行得更快。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/284026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档