繁体   English   中英

刷新缓存以在PostgreSQL 9.1中进行基准测试

[英]Flushing the cache for benchmarking in PostgreSQL 9.1

我正在使用在Debian Linux上运行的Postgresql 9.1执行一些基准测试任务。 我想对共享相同部分的查询工作量进行基准测试。 在运行每个查询之前,我重新启动数据库并执行以下命令:

回声3> / proc / sys / vm / drop_caches

旨在同时删除共享内存和操作系统缓存。 但是,我注意到,如果我以不同的顺序运行相同的查询工作负载,则会得到不同的查询响应时间。 我怀疑查询优化器以某种方式“记住”了如何有效执行常见查询部分,或者重用了某些先前缓存的结果。

您是否有解决此问题的想法? 无论查询顺序如何,我都希望获得大致相同的响应时间。 注意,我正在解析EXPLAIN输出以提取实际运行时间。

首先想到的是autovacuum(PostgreSQL中的后台维护任务: http : //www.postgresql.org/docs/current/interactive/routine-vacuuming.html#AUTOVACUUM )正在做一些工作, -以难以预测的方式填充缓存。 您可以禁用它,但是要注意,这可能会导致膨胀,错误的统计信息导致错误的计划选择,以及将更多的工作推到前端流程上,因此通常不建议这样做。 解决此问题的另一种方法是在加载数据后运行VACUUM FREEZE ANALYZE,将所有内容置于维护良好的状态,停止PostgreSQL,刷新OS缓存,然后启动并进行基准测试。

问题的另一个可能来源是检查站。 您应确保已将checkpoint_segments配置为足够高,以避免强制执行频繁的检查点,并且应根据在基准测试期间何时出现检查点来考虑checkpoint_timeout设置。

RAID控制器卡或硬盘驱动器也可能足够缓存而已-我不知道刷新OS缓存是否可以清除这些缓存,但我对此表示怀疑。

通常,请记住,PostgreSQL附带了旨在让数据库启动并在小型笔记本电脑上运行的设置-最佳性能通常需要进行一些调整,因此,除非您的基准测试不同配置设置的效果,否则您可能需要查看一下基准测试之前的整体配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM