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

利用OSCACHE提升PostgreSQL查询性能
本文探讨了如何通过优化PostgreSQL查询,尤其是利用OSCACHE预加载数据到内存来提高查询速度。通过预查询和使用`pgfadvise_willneed`、`pgfincore`命令,可以将表加载到操作系统的缓存中,从而加快全表扫描和COUNT操作。实验显示,这种方法能显著减少简单查询的响应时间,尤其适用于频繁查询的场景。

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值