postgresql-shared_buffers参数详解

news2024/12/24 2:49:55

shared_buffers 是 PostgreSQL 中一个非常关键的参数,用于配置服务器使用的共享内存缓冲区的大小。这些缓冲区用于存储数据页,以便数据库可以更快地访问磁盘上的数据。

这个参数在 PostgreSQL 的性能方面有着重要的影响。增加 shared_buffers 可以提高数据库的性能,尤其是对于频繁的读取操作。但是,设置得太大可能会导致内存不足,影响其他系统进程的性能,需要谨慎平衡。

以下是关于 shared_buffers 的一些重要信息:

  1. 作用: 控制 PostgreSQL 服务器用于缓存数据页的共享内存大小。这些数据页是数据库从磁盘读取的数据的副本,在内存中存储以提高后续读取操作的速度。

  2. 默认值: 默认情况下,shared_buffers 的值是相对于系统总内存的一部分。默认设置通常比较保守,以兼顾系统的其他资源需求。

  3. 调整建议: 适当设置 shared_buffers 的值取决于多个因素,包括系统的可用内存、数据库负载、运行中的查询类型等。增加 shared_buffers 可以提高性能,但并不是所有情况下都能带来线性的性能提升。

  4. 内存计算: 通常建议将 shared_buffers 设置为物理内存的 25% 到 40% 之间。这只是一个起点,最佳值需要根据实际情况和性能测试来确定。

  5. 影响:shared_buffers 设置得过小可能导致频繁的磁盘 I/O 操作,影响性能;而设置得过大可能占用大量内存,影响系统的稳定性和其他进程的性能。

修改 shared_buffers 后通常需要重启 PostgreSQL 服务器才能使更改生效。

1. 计算机缓存机制

计算机缓存是指用于临时存储数据的一种高速存储器,其目的是提高数据访问速度并加速计算机系统的性能。缓存系统通过在数据的访问路径中引入更快的存储介质,减少了对慢速存储(如硬盘)的访问次数,从而加快数据的读取和写入。

1.1. 类型和工作原理:

  1. CPU 缓存(Cache Memory): 在现代计算机系统中,CPU 缓存是其中最重要的缓存之一。它通常分为三级:一级缓存(L1 Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)。这些缓存以层级结构的方式嵌入在 CPU 内部,并用于存储CPU经常需要访问的数据和指令。这些缓存级别按速度和容量递减排列,L1 最快但容量最小,L3 最慢但容量最大。

  2. 硬盘缓存(Disk Cache): 操作系统和文件系统会使用部分内存作为硬盘缓存,用于存储磁盘上最近访问的数据块的副本。这样的缓存减少了从慢速的机械硬盘读取数据的需求,提高了文件访问速度。

  3. 数据库缓存: 数据库系统通常有自己的缓存机制,如之前提到的 PostgreSQL 的 Shared Buffers。这些缓存用于存储数据库中经常被访问的数据,以减少对存储介质(如磁盘)的访问,提高数据库查询的性能。

1.2. 缓存优势和局限性:

  • 优势:

    • 提高数据读取速度:通过存储最近使用的数据副本,可以快速响应对相同数据的再次访问。
    • 减少延迟:由于缓存通常位于 CPU 或内存之类的更快速介质中,因此访问这些缓存的延迟更低。
    • 改善性能:优化内存和磁盘之间的数据传输,降低系统响应时间,提高整体性能。
  • 局限性:

    • 有限容量:缓存的容量有限,因此可能无法容纳所有的数据。
    • 数据一致性问题:缓存数据更新不及时可能导致一致性问题。
    • 成本:更大容量、更快速的缓存通常成本更高。

1.3. 管理和优化缓存:

  • 合理配置大小: 根据应用需求和硬件条件,合理配置缓存的大小以平衡性能和成本。
  • 监控和优化: 定期监控缓存使用情况,优化缓存命中率,避免缓存污染(淘汰频繁使用的数据)等问题。
  • 使用合适的缓存策略: 包括先进先出(FIFO)、最近最少使用(LRU)、最不经常使用(LFU)等策略以及写回、写通过等写入策略。

综合来说,缓存在计算机系统中扮演着至关重要的角色,对于提高系统的整体性能至关重要。因此,合理利用和管理缓存是优化系统性能的关键一环。

1.4. OS Cache

  • Linux: 在 Linux 上,可以通过修改内核参数(如 vm.dirty_* 和 vm.swappiness)来影响磁盘缓存的行为。这些参数控制着内核对于脏页(未写入磁盘的数据页)的处理方式以及内存交换(swapping)行为。但是,修改这些参数需要谨慎,最好了解其影响和风险。

  • Windows: Windows 操作系统也有一些控制文件系统缓存的参数,但通常情况下,Windows 会自动管理这些参数。

2. BGWriter在PostgreSQL中的作用是什么?

`BGWriter`(Background Writer)是 PostgreSQL 中的一个重要后台进程,负责管理缓冲区(Buffer Cache)并尽可能将脏页(已被修改但尚未写入磁盘)异步地写入到磁盘,以确保数据的持久性和系统性能的最优化。

以下是 `BGWriter` 后台进程的主要功能和作用:

1. **脏页管理**:`BGWriter` 负责管理共享缓冲区中的脏页,这些脏页包含了已经被修改但尚未写入磁盘的数据。

2. **异步写入脏页**:它定期检查缓冲区中的脏页,并尝试将这些脏页异步地写入到磁盘。这样做有助于降低对磁盘的频繁访问,提高数据库系统的性能。

3. **减少后续写入操作的影响**:通过将脏页定期写入磁盘,`BGWriter` 可以减少后续写入操作对系统性能的影响。这有助于确保写入操作不会阻塞太多,并且减少了系统性能突然下降的风险。

4. **优化磁盘写入**:`BGWriter` 通过尝试合并或共享磁盘写入操作,以提高写入磁盘的效率,减少对磁盘的访问次数,进而优化系统性能。

需要注意的是,`BGWriter` 进程的行为相对被动,其工作是在后台周期性地进行。默认情况下,它会根据配置中的参数自动执行,通常不需要额外的手动调整。然而,在某些高负载或特定场景下,对 `BGWriter` 参数的微调可能有助于进一步优化数据库的性能。

在这里插入图片描述

3. 修改参数的优点和缺点

在 PostgreSQL 中,修改 shared_buffers 参数后,重启数据库服务器并重新启动之后,对于 UPDATE 操作的速度可能会有一定影响,但影响的具体程度取决于多种因素。

shared_buffers 参数控制着数据库系统用于缓存数据的共享内存区域大小。增大 shared_buffers 的值通常会增加数据库系统在内存中缓存数据的能力,从而提高查询性能,尤其是能够更快地访问和操作缓存中的数据。

然而,增大 shared_buffers 参数值可能会导致数据库系统在启动时需要更多的内存,并且在运行过程中可能占用更多的系统资源。因此,如果您在修改 shared_buffers 参数后重启 PostgreSQL,可能会出现以下情况:

  1. 启动时间增加:如果您将 shared_buffers 值增大到一个较大的数值,可能会导致 PostgreSQL 在启动时需要更长的时间来分配和管理这部分较大的内存空间。

  2. 内存占用增加:增大 shared_buffers 参数会占用更多的内存。如果系统可用内存不足,可能会导致其他进程的内存竞争,甚至可能出现交换(swap)。

  3. 影响 UPDATE 操作速度:在某些情况下,增大 shared_buffers 可能会提高 UPDATE 操作的速度,尤其是对于频繁读取的数据,因为缓存命中率可能会提高。但并不是所有的 UPDATE 操作都会直接受益于这种变化。

总体来说,修改 shared_buffers 后对 UPDATE 操作速度的影响因多种因素而异,包括系统的硬件资源、数据库的使用模式、查询访问模式等。为了评估对性能的影响,建议在生产环境之前在测试环境中进行测试和评估,以便更好地了解参数调整对系统的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1263381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基本数据结构二叉树(3)

目录 4.二叉树链式结构的操作 4.1 前置说明 4.2二叉树的遍历 4.2.1 前序、中序以及后序遍历 4.3 节点个数以及高度等 4.二叉树链式结构的操作 4.1 前置说明 由于博主对二叉树的结果掌握还不够深入,因此在讲解相关操作前将手动创建一颗简单的二叉树&#xff0c…

【C++初阶(九)】 priority_queue的使用与模拟实现

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

vscode 里怎么自动提示 webpack 配置项?

webpack 的配置项非常多,容易忘记,能自动提示很有用,就是在配置文件里面添加下面代码 // 下面这行用于 vscode 中智能化自动提示 webpack 配置项 /** type {import(webpack).Configuration} */

学习知识回顾随笔(远程连接MySQL|远程访问Django|HTTP协议|Web框架)

文章目录 如何远程连接MySQL数据库1.创建用户来运行,此用户从任何主机连接到mysql数据库2.使用IP地址来访问MySQL数据库 如何远程访问Django项目Web应用什么是Web应用应用程序的两种模式Web应用程序的优缺点 HTTP协议(超文本传输协议)简介HTT…

vue+uniapp校园寻物失物招领平台 微信小程序1f6z5

系统中的核心用户是管理员,管理员登录后,通过管理员菜单来管理后台系统。主要功能有:首页、个人中心、用户管理、物品分类管理、物品信息管理、物品归还管理、留言板管理、系统管理等功能。管理员用例如图3-7所示。 对于本网上失物招领小程序…

Java高级技术(反射:获取类)

一,认识反射 二, 反射第一步 三,案例

传奇手游白日门【纵横天下】win服务端+双端+GM后台+详细架设教程

搭建资源下载地址:传奇手游白日门【纵横天下】win服务端双端GM后台详细架设教程-海盗空间

【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现

文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中,包括表的定义、分区、表的属性等信息。 hi…

1和0的故事-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息: 题目:1和0的故事 作者:Eas0a 提示:无 解题附件: 解题思路: 哦?1和0的故事?(奸笑.jpg),打开看看啊。 emmm...j…

Python小技巧:探索函数调用为何加速代码执行

更多资料获取 📚 个人网站:ipengtao.com Python 作为一种解释型语言,其执行速度相对于编译型语言可能会较慢。然而,在Python中,通常观察到代码在函数中运行得更快的现象。这个现象主要是由于函数调用的内部优化和解释…

Java高级技术(反射:获取类的构造器)

一,常用方法 二,案例 (1),获取全部构造器 (2),获取某个构造器 (3),实验类 三, 初始化对象 四,案例

Stable Diffusion绘画系列【5】:粉色机甲少女

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

庆祝 Lacoste 成立 90 周年,The Sandbox 与 Lacoste 携手推出 Lacoste 全球巡游体验活动

Lacoste 全球巡游体验让玩家沉浸在以品牌历史为基础的游戏化世界中。 The Sandbox 非常高兴地宣布与 Lacoste 建立新的合作伙伴关系,共同打造 Lacoste 全球巡游体验。 该体验活动将汇聚来自世界各地的 Lacoste 品牌粉丝,让他们揭开传说中鳄鱼部落所在地…

香港科技大学数据建模(MSc DDM)硕士学位项目(2024年秋季入学)招生宣讲会-武汉专场

时间:2023 年12 月 8 日(周五) 15:00 地点:华中科技大学大学生活动中心B座303 嘉宾教授:张锐 教授 项目旨在培养科学或工程背景的学员从数据中提取信息的数据建模能力,训练其拥有优秀的解难和逻辑思考与分…

Python基础:标准库概览

1. 标准库介绍 Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写),Python 程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Pyt…

MindStudio学习记录三:推理应用开发 acl mindx sdk

1.推理应用流程 1.1.创建工程 1.2.模型转换 1.3代码开发 1.3.1ACL代码 1.3.2MindX SDK开发 可视化模块化设计 中间的图片与处理 是基于AIPP的可视化处理 1.5.编译 交叉编译 1.6.运行与调试 1.7 调优工具 profiling性能分析 2.开发举例 resnet-50 2.1 准备工程 2.2.准备模型…

哈希和unordered系列封装(C++)

哈希和unordered系列封装 一、哈希1. 概念2. 哈希函数,哈希碰撞哈希函数(常用的两个)哈希冲突(碰撞)小结 3. 解决哈希碰撞闭散列线性探测二次探测代码实现载荷因子(扩容) 开散列哈希桶代码实现扩…

bluez inquiry 流程梳理--从代码层面理解bluez架构

贴一张bluez架构图方便理解 user space APP:上层应⽤程序 Pluseaudio/pipewire:A2DP的组件 Bluetoothd: 蓝⽛守护进程 Bluez: 包括Bluez tool跟Bluez lib kernel space 内核代码包含以下⼏部分 driver/bluetooth net/bluetooth include/net/bluetooth…

webpack项目工程初始化

一、初始化项目 默认系统已经安装node //初始化 pnpm init//安装webpack pnpm i -D webpack webpack-cli 新建一个index.html的入口文件 新建一个src文件存放js代码,src里面新建一个index.js package.josn配置打包命令 {"name": "webpack-cs&q…

vue+elementUI的tabs与table表格联动固定与滚动位置

有个变态的需求,要求tabs左侧固定,右侧是表格,点击左侧tab,右侧表格滚动到指定位置,同时,右侧滚动的时候,左侧tab高亮相应的item 上图 右侧的高度非常高,内容非常多 常规的瞄点不适…