postgresql性能优化插件——pgfincore

前端之家收集整理的这篇文章主要介绍了postgresql性能优化插件——pgfincore前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文来自:http://blog.csdn.net/lengzijian/article/details/8252270

这不想过多讲解pgfincore的安装和使用,只想记录下使用心得,如果读者向读到更多内容,请查看一下内容

use posix_fadvise pre-cache frequency data

http://blog.163.com/digoal@126/blog/static/163877040201062944945126/

a powerful upgrade from pgfincore 1.0

http://blog.163.com/digoal@126/blog/static/1638770402011630102117658/

实际使用

http://blog.163.com/digoal@126/blog/static/163877040201221382150858/

就像德哥说的一样,当数据库启动时,数据库是冷数据,开始的每一次查询都要到磁盘去读取,然后写入数据库缓存。如果当数据库启动时,就有大量的数据库访问,可能造成数据库堵死。

这时,我们就需要一种工具能够直接把磁盘内容刷到内存,而内存又不占用pg的buffer,pgfincore刚好做到这这一点,它不依赖于pg配置文件中对buffer的限制,因为它使用的内存是OS内存。

看了很多人的文章,据说是使用该工具,使整个系统的性能提高了几十倍,包括在德哥的blog中写道,查询速度从12.96毫秒降到0.45毫秒。

看到这里可能会心花怒放,恨不得赶快把这工具应用于自己的系统当中,我也是这样;

在我的系统中遇见一个问题,语句的查询速度优化后也停留在50ms左右(需求问题),本以为问题能够得到解决,但是后来才发现,我误解了其中的很多道理。

至今一直不理解这样的问题,把所有数据写到内存中,有没有类似的索引查询,还是在内存中顺序查找?

在我的系统中,我把表和索引都通过pgfadvise_willneed函数添加到内存当中,但是执行效率没有任何提升。

也许是我哪里用错的缘故,后来想了想,可能我的语句中大部分是>=和 <=这类操作导致的。

于是我自己建了一张表,只有一个id和一个日期,其中有100万数据;

当不建索引时,首次查询时间为460ms,当用pgfincore时,首次查询耗时182ms。

当建立索引,首次查询11ms,当用pgfincore时,同样11ms。

这里先留空,等有空测试多进程

首先用pgbench压了下数据库

使用和不适用pgfincore时,查询速度都是11ms左右。

后来想了想原因,可能是数据库本身缓存的信息,所以用重启数据库的方式继续测了一遍:

不用pgfincore时,查询速度是38ms;

使用pgfincore时,查询速度是11ms;

这进一步印证的我的猜想。

可以说明一点,pgfincore并不是所有情况下都会提高数据库性能,目前,我所理解的是:当数据库重启时,或者数据库内存中还没有大量缓存数据时,用pgfincore可以提高几倍的性能。希望不要盲目使用。

还有一点pgfincore写入内存并非永久写入,如果读写频率较大,os内存也是会被替换掉的。(所以某些场景反而不适合用pgfincore)

如果想要永久写入内存请参考德哥文章文件永久cache到内存的工具filecache

http://blog.163.com/digoal@126/blog/static/16387704020122198214650/

原文链接:https://www.f2er.com/postgresql/196342.html

猜你在找的Postgre SQL相关文章