Con*_*bil 5 postgresql performance postgresql-performance
我一直在对各种 postgres SQL 查询进行一些测试。
测试通常涉及更改查询的语法、更改表连接或偶尔完全重写查询。
我注意到有时我会得到“明显”的大幅性能提升。我将运行一个查询,运行需要(比如)60 秒,我会做一个小改动,然后运行(比如)5 秒。
起初我认为这是因为我的小调整提高了性能。我已经意识到实际上必须有一些缓存正在进行,(要看到这一点,请尝试运行 60 秒的查询,然后几秒钟后再次运行它 - 它总是第二次运行得更快),我假设这个是因为数据已经在本地缓存在某处,所以当数据需要第二次读取时,它已经到手了。
我确信这是一个有用的性能特性,但它确实使得在调整查询时很难发现真正的性能改进。是否可以在每次执行之前刷新缓存以确保每个测试从同一位置开始?
谢谢
PostgreSQL 严重依赖操作系统缓存以及它自己的缓存。所以你必须清除PostgreSQL缓存(重启postgres服务)并清除操作系统缓存(要么重启机器,要么按照注释中的方法清除而不重启,如果你是Linux的话)。
但是,你为什么要这样做呢?如果查询是参数化的,您可以每次更改参数,以便它们引用数据的不同部分。如果查询没有参数化,那么为什么它需要在生产机器上运行之间从缓存中删除它需要的数据?
当不同的参数化由于不同的结果大小而具有不同的性能时,最确定的解决方案是编写一个驱动程序,使用随机(但现实)的参数化重复查询多次,并希望参数引起的变化在您的调整之间达到平均设置。这是一种痛苦,但当我不得不求助于它时,我通常希望我必须早点这样做。这比从冷缓存执行每个查询要好,因为在实际生产情况下,您不太可能拥有完全冷缓存。数据的某些部分将与所有参数化相同,并且该部分将足够“热”以始终在缓存中。
| 归档时间: |
|
| 查看次数: |
4730 次 |
| 最近记录: |