PostgreSQL 如何“霸占”系统OS cache 提升查询性能

Posted wx5c241fe5127d0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL 如何“霸占”系统OS cache 提升查询性能相关的知识,希望对你有一定的参考价值。


 

PostgreSQL

(最近有一个疑问,不知道发生了什么,一周2天 mysql  2天 PG,之前 PG的阅读量基本上只能达到 MYSQL 的一半,而最近的两周,基本上处于 1比1 的状况,整体的阅读量也提升了30%)


上期回答了关于PG数据库缓存和系统的缓存之间的一些关系,其中可能有有一些可以在讨论的问题,既然数据库可以“黏住”常用的数据,那系统的缓存我们还是否可以继续利用,还是仅仅拿他当一个所谓的“二级缓存”(这个词可能不严谨)来使用。

今天我们就来说说一个PG的扩展 pgfincore 让这个扩展来为我们更完善相关的服务和缓存状态的展示,pgfincore是2ndQuadrant 公司,一家专门为的开源插件。

PostgreSQL

安装的过程就不说了,非常的简单,make&make install , create extension pgfincore


下面其他的先不讲,先看这个插件能帮助我们做些什么,在讲其他的。

下图很清楚的显示了,一个300万行的表在系统中经历了2次 count的操作大致使用的时间,按照一般的数据库系统来说,我第一次查询和第二次查询如果查询语句是一致的,那第二次的速度应该比第一次快,因为我缓存了查询的语句和结果之间的对应关系(当然这里也有其他的情况,不在展开)。

图中我们使用pgfincore插件中的一个,将表或索引预装入到OS 缓存层面的功能,我们再次查询,发现比第二次的速度还快,仅仅300万的数据使用82毫秒。这说明我们将表或索引提升至OS的缓存中,对查询的加速是有效的吗,即使我们用不上什么索引,或没有所以的情况下。

PostgreSQL


select * from pgsysconf();

PostgreSQL

通过pgsyusconf() 可以查看当前系统的OS 控制的页面有多少,剩余多少。在通过这个插件可以很清晰的指导,当然我们缺少不缺少系统OS层面的缓存。(缺不缺 OS 系统缓存的问题我们可以解决了)

当然我们通过

select * from pgfincore(test); 可以看到一个表的DISK 与OS PAGE 之间的对应的关系,

PostgreSQL


下面做一个实验来证明,加载和不加载OS 内存的情况下,到底有什么区别,下图中包含了15次频繁的对一个表的 select * from 表 limit 10;的操作

PostgreSQL

总体的数据在0.6986秒

我们在加载了OS 系统缓存后,我们在做15次

PostgreSQL

显示总体30次的查询事假在0.9625秒,那加载后查询的15次的时间是

0.9625 - 0.6986 = 0.2639 秒 也就是说大致节省了 3分之二2 强的时间。


另外在前几期中讲了pg_rewarm 插件,可以在系统重启之后进行类似MYSQL的 将系统重启动之前的数据灌入到INNODB BUFFER POOL中,但我们忽略了另一个问题,就是MYSQL 以及其他数据库是没有OS 缓存利用这么一说的,所以POSTGRESQL 如果你在重启后还可以考虑对部分数据,怎么快速的缓冲到 OS 的缓冲的事情。实际上在做了几个测试后,让我打消了使用pgfadvise_loader的想法,因为提升到速度只在第一次有效,另外如果是生产机有多少机会会经常重启,如果是测试机,有必要劳心劳力的作这个事情。


当然如果你感兴趣可以看一下官方的文档,关注一下 pgfadvise_loader可以满足你嫉妒优化的想法。


下面整理了一下相关的一些命令


1 select * from pgsysconf_pretty();

得到你系统的OS层面的缓冲信息

2 select * from pgfadvise_willneed(表名);

加载索引或表到OS CACHE 层面

3 select * from pgfadvise_dontneed(p表名);

卸载表的内容从OS CACHE 层面

PostgreSQL


另外还是,如果有问题的同学可以私信我,我们可以一起研究,共同提高。


以上是关于PostgreSQL 如何“霸占”系统OS cache 提升查询性能的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 PostgreSQL 服务器 Mac OS X 的状态

如何在 Mac OS 上使用自制软件将 postgresql 从 10.1 降级到 9.6 [关闭]

Psycopg2 安装,不被 Python 读取 - OS 10.8.4、Python 2.7、PostgreSQL 9.2

Postgresql服务部署

全球数据库排名:MySQL 三连跌,PostgreSQL 最稳

最新全球数据库排名:MySQL 三连跌,PostgreSQL 最稳