您好,登录后才能下订单哦!
今天就跟大家聊聊有关PostgreSQL如何使用系统OS cache 提升查询性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
今天我们就来说说一个PG的扩展 pgfincore 让这个扩展来为我们更完善相关的服务和缓存状态的展示,pgfincore是2ndQuadrant 公司,一家专门为的开源插件。
下面其他的先不讲,先看这个插件能帮助我们做些什么,在讲其他的。
下图很清楚的显示了,一个300万行的表在系统中经历了2次 count的操作大致使用的时间,按照一般的数据库系统来说,我第一次查询和第二次查询如果查询语句是一致的,那第二次的速度应该比第一次快,因为我缓存了查询的语句和结果之间的对应关系(当然这里也有其他的情况,不在展开)。
图中我们使用pgfincore插件中的一个,将表或索引预装入到OS 缓存层面的功能,我们再次查询,发现比第二次的速度还快,仅仅300万的数据使用82毫秒。这说明我们将表或索引提升至OS的缓存中,对查询的加速是有效的吗,即使我们用不上什么索引,或没有所以的情况下。
select * from pgsysconf();
通过pgsyusconf() 可以查看当前系统的OS 控制的页面有多少,剩余多少。在通过这个插件可以很清晰的指导,当然我们缺少不缺少系统OS层面的缓存。(缺不缺 OS 系统缓存的问题我们可以解决了)
当然我们通过
select * from pgfincore('test'); 可以看到一个表的DISK 与OS PAGE 之间的对应的关系,
下面做一个实验来证明,加载和不加载OS 内存的情况下,到底有什么区别,下图中包含了15次频繁的对一个表的 select * from 表 limit 10;的操作
总体的数据在0.6986秒
我们在加载了OS 系统缓存后,我们在做15次
显示总体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如何使用系统OS cache 提升查询性能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。