我正在对在 ubuntu 机器 (natty) 上的 postgres 8.4 上运行的一些大型 SQL 脚本进行性能基准测试。
我遇到了一些相当不稳定的性能,即使我应该是机器上唯一一个运行的人(完全相同的数据上的相同脚本可能会在 20 分钟内运行,然后在 40 分钟内运行,而没有特定的原因)。
因此,记起我远程的 DBA 培训,我决定应该使用 刷新 postgres 缓存sudo /etc/init.d/postgresql restart
,但它仍然不稳定!
我的问题是:也许我的磁盘/操作系统中缺少一些缓存?我正在使用 NetApp 设备作为存储。我走在正确的轨道上吗?在开始调整之前,我是否甚至想确保获得可重复的性能?
答案1
如果您的存储是通过网络安装的,那么网络和存储设备上的活动可能会改变您的结果。您使用的配置涉及多层缓存。
- 数据库缓存
- 操作系统缓存
- Netapp 设备缓存
- 磁盘/控制器缓存
就您而言,我认为操作系统和 Netapp 缓存可能是影响因素。更可能的是,它是从 Netapp 设备访问数据。
其中许多都很难清除。根据我的经验,清除缓存其实没什么用。除非您在未使用的数据库/服务器上运行查询,否则有许多因素会对您的结果产生较大影响。
即使您是系统上的唯一用户,也会有 cron 作业定期运行并使用资源。如果您在每小时的相同分钟数(9:15、10:15、11:15 ...)运行测试,看看是否能获得更稳定的结果。
您可能需要设置一个munin
服务器来监控您的测试服务器,并查看在不同的运行过程中是否有类似的配置文件。sar
在后台运行可以提供有关瓶颈的有用信息。 sar
由软件包提供atsar
。
答案2
在 Linux 上,您可以用来sync && sysctl vm.drop_caches=3
删除页面缓存、dentry 和 inode。