如何禁用postgresql"缓存"优化?

Jua*_*eza 19 postgresql

我正在尝试优化我的功能.
问题在于,一旦得到一个结果就运行查询.
第二次运行查询或第三次处理时间要小得多.

SELECT  map.get_near_link(a.X, a.Y, a.azimuth)
FROM traffic.avl;
Run Code Online (Sandbox Code Playgroud)

第一次17段

Total query runtime: 17188 ms.
801 rows retrieved.
Run Code Online (Sandbox Code Playgroud)

第二次11段

Total query runtime: 11406 ms.
801 rows retrieved.
Run Code Online (Sandbox Code Playgroud)

我猜测有一些缓存在场景后进行优化.如何禁用此行为,以便我可以获得更真实的运行时值?

Cra*_*ger 17

从查询结果缓存的意义上讲,PostgreSQL没有"缓存"优化.

它会缓存最近读入的表块shared_buffers,但对于大多数只有很小影响的安装.主缓存是操作系统的磁盘读缓存.有关更多信息,请参阅

查看并清除Postgres缓存/缓冲区?

听起来像你有一个系统具有合理数量的RAM和一个快速的CPU,但磁盘速度非常慢.因此,仅查看操作系统磁盘缓存的查询速度非常快,但进入磁盘的查询需要几秒钟才能读取数据.因此缓存效果非常强大.

你应该问explain (buffers, analyze, verbose) SELECT ...你的问题.尝试使用几个不同的输入值,直到慢速输入.比较计划.

如果计划相同,那可能就是这样.

如果计划不同,您可能会遇到查询计划程序根据表统计信息的变化做出错误选择的情况.增加感兴趣列的统计目标可能会有所帮助(参见手册).如果您有不同的计划并且被困/希望得到帮助,请随时在dba.stackexchange.com上发布详细信息.


rus*_*ils 12

sync; sudo service postgresql stop; echo 1 > /proc/sys/vm/drop_caches; sudo service postgresql start
Run Code Online (Sandbox Code Playgroud)

  • 呃,您可能想避免在生产服务器上这样做...... (6认同)