0

0

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

絕刀狂花

絕刀狂花

发布时间:2025-07-16 11:04:27

|

494人浏览过

|

来源于php中文网

原创

数据库的核心功能之一是数据访问,数据访问越接近计算单元越好。然而,cpu缓存昂贵且稀缺,因此需要使用cpu的1、2、3级缓存。cpu的大部分时间用于处理这些缓存之间的信息交换。然而,这些缓存仍不足以处理所有数据,因此引入了内存。为了永久存储信息,数据被存储在磁盘上。这就是数据处理和存储的基本原理,数据库软件也基于此设计,以达到最佳性价比。

POSTGRESQL数据库的缓存需要处理数据和索引,这些信息以8KB的块存储在磁盘上,处理时需要读取到4KB的缓存单元中。此外,查询的执行计划也被存储在缓存中。

对于数据库来说,最重要的是如何快速地将数十亿数据从磁盘加载到内存中,使计算成为可能。POSTGRESQL与其他数据库不同之处在于,它依赖于LINUX的缓存,每次数据提取都从LINUX的文件缓存中获取。数据库的主要努力是让处理的数据尽可能长时间地留在内存中,同时将不再使用的数据从内存中移除。这就是LRU算法在数据库中的意义。

PG通过postmaster为每个数据库数据访问分配一个基于其子进程的进程。这些进程在访问共享缓冲区后,根据LRU算法让数据持续留在缓冲区中。当这些数据在一定时间内不再需要时,checkpoint子进程会将这些数据重新写入磁盘,释放缓冲区以接纳新数据。

实际上,缓存(这里指操作系统缓存)在PG中的意义如下:

  1. 简化PG内部缓冲与数据调用的代码,调用操作系统代码来获取数据,使系统结构变得简单。随着操作系统的升级,PG的性能可能得到提升,达到一举三得的效果。当然,如果操作系统性能不佳,则会影响结果。

  2. 通过操作系统缓存加速数据读取,如果操作系统缓存足够大,共享缓冲区的意义会减弱。

反思:随着硬件的变化,SSD的性能越来越高,价格越来越便宜。硬件的变化对PG性能提升的意义更大。在某些SSD磁盘系统上进行测试,通过预加载数据对性能的提高有限。

我们进行一个实验,比较数据在内存中和不在内存中查询的差异(以下实验在传统SATA磁盘系统上)。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好我们向PG数据库中灌入5000万条数据。通过语句可以查出表在内存中的数据块数量。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好我们通过命令将数据库中people_warm的缓存从共享缓冲区中清空。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好我们通过简单查询5000万条数据,花费了26秒。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好此时,一部分数据已经进入缓存。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好我们再次清空数据。通过pg_prewarm将数据加载进缓存中。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好可以看到,这次查询仅需2秒。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好执行计划没有变化。这证明了数据在缓冲区中和不在缓冲区中的巨大差异。

pg_prewarm有三种模式:

  1. Prefetch:将数据迁移至LINUX系统的操作系统缓存,而不是PG的缓冲区,数据加载方式为异步。

  2. Read:读取所有数据加载到LINUX缓存中。

  3. Buffer:读取所有数据块到PG的共享缓冲区中。

    OpenArt
    OpenArt

    在线AI绘画艺术图片生成器工具

    下载

下图展示了几个工具和参数在数据引入内存的深度问题上的不同。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好通过工具的使用,我们也能了解到postgresql本身的数据读取必须通过LINUX的缓存,也称为操作系统缓存。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好另一个问题是PG的共享缓冲区与系统剩余内存容量之间的关系。之前官方的调整参数建议是1/4共享缓冲区,3/4LINUX操作系统。

我们通过一个测试来看看是否如此。

这里有一个4核,8G内存,SSD磁盘系统的系统,并且通过pgbench生成一个5000万的表。然后我们通过改变共享缓冲区的情况,观察数据库性能与共享缓冲区变化的关系。

pgbench -i --unlogged-tables -s 500 -U postgres -p 5432 -d pgbench

之前写的一篇与此相关的文章:

PostgreSQL 自己的 DB buffer & 与别的人的OS cache 之 回答问题https://cloud.tencent.com/developer/article/1536270

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好通过一个简单的测试,我们将共享缓冲区设置成不同的数值,然后观察每条SQL的平均延迟,以及30秒内运行的事务总数。当然,以下的测试并不严谨,严谨的测试需要在时间、客户端数量以及测试数据等方面进行更多的数据测试,并且每个测试至少要测试10次,并取平均数。

由于时间有限,以下测试结果仅供参考,根据结果:

  1. 共享缓冲区可以设置超过总物理内存的大小,系统不会报错。

  2. 这里3G,占总内存的37.5%的结果是最好的,而不是2G根据官方的建议,我们这里应该设置成2G。

  3. 虽然2G不是最好的成绩,但在9次测试中是较好的成绩。

  4. 最差的成绩是将所有的内存都设置成共享缓冲区。

  5. 将共享缓冲区设置成9G并不是这些成绩中最差的,比5G和4G的成绩要好。

Postgresql  理解cache 在 postgres中的意义 与  share buffer 到底设置多大性能最好当然,以上的测试并不能说明我们最好将内存设置为总体内存的37.5%,但我们需要思考,并且有时候需要问自己一个问题:

  1. 为什么官方的建议是0.25?

  2. 原因是什么?

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

680

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

574

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

416

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

Excel 教程
Excel 教程

共162课时 | 12.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号