PostgreSQL 从底层如何加速数据查询

PostgreSQL 数据查询优化一般都是从,语句的撰写方式,或者添加索引来进行优化。对于复杂的业务来说,是一个好办法,但对于简单的查询来说,优化起来就没有什么可以插手的方式了。

从另一个思路考虑,数据的查询一般都会牵扯与磁盘的交互,如果将数据在查询之前尽可能的拿到内存中进行处理,速度应该是比到查询的时候在到内存中拿取更好。

一种方式是提权预读,将需要的数据通过预查询的方式将他提到缓冲中,PG有一个工具通过另一种方式将表提到OS cache中,通过这样的方式来提高读取的数据的速度。

1a44c84c452a5551f68634fda755474b.png

创建一个表,在表中插入100万的数据。我们通过普通查询看看如果进行select count(*) from test; 的结果是多少。

我们通过下面的案例来去看如何从底层来加速数据的加载

select * from  pgfadvise_willneed('test');

select * from  pgfincore('test');

ce089092e6e7cfa7418df07061cc4b29.png

这两个命令是将test 表加入到 OS CACHE 层面, 然后我们查看数据表是否加载到OS CACHE 页面中。

然后我们随便查询, 95%以上全表扫描方式都是在 3毫秒以内

732a568efe9bb793036f60ae75550835.png

我们将test 表从OS cache中卸载出去

73b9182f402f6e86d5d448d5ce354267.png

50% 以上的查询均超过3毫秒

b2179a58e7c7df66632a8a50eabaad1f.png

实际上POSTGRESQL 读取数据的方式是下图的方式,中间有一层LINUX的 CACHE作为2级缓冲,这也是SHARE BUFFER 设置中和其他数据库不大一样的地方,不会设置的比较满,而是在内存的25%左右。剩下的需要将他给LINUX 的OS CACHE 让他来从 disk中先加载数据。

上面的命令主要的功能就是提前将所选择的表加载到OS CACHE 中,提高访问的速度,尤其对于全表扫描和count的操作是非常有利的。

c55a05d45c3188a9869944a83c163e07.png

同时组件中的命令pgsysconf() 可以查看整体的OS 的数据页面的使用情况。

99da559afb541c7f7b31f5910e96e26f.png

插件是 2象限公司开发并维护的, 对于频繁简单的语句查询有明显的性能提升。

至于安装这里就不重复了,之前有介绍相关安装的文字,直接对下载的文件进行make  即可,并且针对数据库 创建 extension 就可以马上使用,OS cache 余热加载的功能了。

9bb6e0c72b9011ec5c1541b58e4996fd.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值