Postgresql 理解cache 在 postgres中的意义 与 share buffer 到底设置多大性能最好

本文探讨了PostgreSQL数据库的缓存策略,包括share_buffer的管理、内存与OS cache的关系,以及LINUX缓存在数据访问速度上的关键作用。通过实验对比,揭示了数据在内存中的查询效率远超磁盘,LRU算法的应用以及pg_prewarm工具在数据预加载中的作用。

f9b016e240906d8b0f2cff29f27d67d8.png

数据库中一个核心的功能就是数据的访问, 数据的访问与计算单元越近越好,而CPU中的缓存的价格是昂贵的,并且也是稀少的,这就需要有CPU的 1  2 3 级别的缓存,CPU有一大部分的时间在处理这些缓存之间的信息交换,当然这些CACHE 也不大够处理我们的数据,所以就有了内存,同时为了永久的存储信息,将这些信息又存储到了磁盘。这就是我们整体的数据处理和存储最基本的原理,而数据库软件也一直以此来设计数据库的软件,并让他达到最大性价比。

POSTGRESQL 数据库的CACHE 要接受什么,数据,以及索引,这些信息已8KB的块存储在磁盘上,在需要处理的时候,需要将他们读入4KB的为存储单元的CACHE 中。除此以外还有查询的执行计划,把他作为一个定义存储到缓存中。

对于数据库最重要的就是如何将数以亿计的数据从磁盘加载到内存中,让计算变得可能,并且尽可能的快, postgresql 与其他的数据库不同在于,它对数据的依赖不在与磁盘,而在于LINUX 的cache,每次的数据提取都是从linux的file cache中获得的。而数据库中大部分的努力都是想让处理的数据尽量留在内存中,并且时间足够长,同时也想让不在使用的数据尽量的从内存中“轰出来”。这就是我们熟悉的LRU 算法对于数据库的意义。

PG 通过postmaster 为每一个数据库数据的访问分配一个基于他下面的子进程,并且这些进程在访问 share buffer后,基于LRU算法会让这些数据持续的在缓冲中,当这些数据在一定时间不再需要后,会通过checkpoint 子进程将这些数据重新写入到磁盘,空出缓冲承接新的数据。

实际上cache 在PG中的意义(这里的cache 指 os cache)

1  降低PG 内部缓冲与数据调用的代码,而是调用操作系统代码调取数据,系统的构造变得简单,并且随着操作系统的升级,对于PG本身的性能有提高的可能,属于一箭三雕。(当然如果操作系统不怎么样,那就.....)

2  通过os cache 加速数据的读取,os cache 够大 share buffer 的意义会削弱

反思:  随着硬件的变动,SSD 的磁盘系统性能越来越高,价格越来越

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值