WAL 模式(PostgreSQL 14 Internals翻译版)

性能

当服务器正常运行时,WAL文件不断被写入磁盘。但是,这些写操作是顺序的:几乎没有随机访问,因此即使是HDD也可以处理这个任务。由于这种类型的加载与典型的数据文件访问非常不同,因此有必要为WAL文件设置一个单独的物理存储,并用一个指向已挂载文件系统中的目录的符号链接替换PGDATA/pg_wal编录。

有几种情况下,必须同时写入和读取WAL文件。第一个是明显的崩溃恢复案例;第二个是流复制。walsender进程直接从文件中读取WAL条目。因此,如果副本没有接收到WAL条目,而所需的页面仍在主服务器的操作系统缓冲区中,则必须从磁盘读取数据。但是访问仍然是顺序的,而不是随机的。

WAL条目可以用以下一种方式写入:

  • 同步模式禁止任何进一步的操作,直到事务提交将所有相关的WAL条目保存到磁盘。
  • 异步模式意味着即时事务提交,稍后在后台将WAL条目写入磁盘。

当前模式由synchronous_commit参数定义。

同步模式。 为了可靠地注册提交的事实,仅仅将WAL条目传递给操作系统是不够的;您必须确保磁盘同步已成功完成。由于同步意味着实际的I/O操作(相当慢),因此尽可能少地执行它是有益的。

为此,完成事务并将WAL条目写入磁盘的后端可以执行一个由commit_delay参数定义的小暂停。但是,只有当系统中至少有5个commit_sibling活动事务时才会发生这种情况:在此暂停期间,其中一些事务可能会完成,服务器将设法一次性同步所有WAL条目。这很像扶着电梯门让别人冲进来。

缺省情况下,没有暂停。只有对执行大量短OLTP事务的系统修改commit_delay参数才有意义。

在可能的暂停之后,完成事务的进程将所有累积的WAL条目刷新到磁盘并执行同步(保存提交条目和与此事务相关的所有先前条目非常重要;其余部分之所以被编写,只是因为它不会增加成本)。

从这个时候开始,ACID的持久性需求得到了保证——事务被认为是可靠地提交了。这就是为什么同步模式是默认的。

同步通信的缺点是较长的延迟(COMMIT命令在同步结束之前不会返回控制)和较低的系统吞吐量,特别是对于OLTP负载。

异步模式。 要启用异步提交,必须关闭synchronous_commit参数。在异步模式下,walwriter进程将WAL条目写入磁盘,该进程在工作和睡眠之间交替进行。暂停的持续时间由wal_writer_delay值定义。

从暂停中唤醒,进程检查缓存中是否有新的完全填满的WAL页面。如果出现任何这样的页面,进程将它们写到磁盘,跳过当前页面。否则,它将写入当前的半空页面,因为它已经唤醒了。

该算法的目的是避免多次刷新同一个页面,这为具有大量数据更改的工作负载带来了明显的性能提升。

虽然WAL缓存被用作环形缓冲区,但是walwriter在到达缓存的最后一页时停止;暂停后,下一个写作周期从第一页开始。因此,在最坏的情况下,walwriter需要运行三次才能到达特定的WAL条目:首先,它将写入位于缓存末尾的所有完整页面,然后它将返回到开头,最后,它将处理包含条目的未填充页面。但在大多数情况下,这需要一到两个周期。

每次写入wal_writer_flush_after数据量时执行同步,并在写入周期结束时再次执行同步。

异步提交比同步提交快,因为它们不需要等待物理写入磁盘。但是可靠性会受到影响:您可能会丢失在故障之前3×wal_writer_delay时间范围内提交的数据(默认情况下为0.6秒)。

在现实世界中,这两种模式相辅相成。在同步模式下,与长事务相关的WAL条目仍然可以异步写入空闲的WAL缓冲区。反之亦然,即使在异步模式下,与即将从缓冲区缓存中驱逐的页面相关的WAL条目也会立即刷新到磁盘中,否则无法继续操作。

在大多数情况下,系统设计师必须在性能和耐用性之间做出艰难的选择。

还可以为特定事务设置synchronous_commit参数。如果可以在应用程序级别将所有事务分类为绝对关键(例如处理财务数据)或不太重要,则可以提高性能,同时承担只丢失非关键事务的风险。

为了了解异步提交的潜在性能增益,让我们使用pgbench测试比较两种模式下的延迟和吞吐量。

首先,初始化所需的表:

在这里插入图片描述
以同步模式启动一个30秒的测试:

在这里插入图片描述
现在在异步模式下运行相同的测试:

在这里插入图片描述

在异步模式下,这个简单的基准测试显示出更低的延迟和更高的吞吐量(TPS)。当然,每个特定系统都有自己的数据,具体取决于当前负载,但很明显,对短OLTP事务的影响是非常明显的。

让我们恢复默认设置:

在这里插入图片描述

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

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

相关文章

数据结构之堆

目录 前言 堆的概念与结构 堆的实现 堆的初始化 堆的销毁 堆的显示 堆的插入 堆的向上调整算法 堆的删除 堆的向下调整算法 堆的判空 获取堆顶元素 堆的数据个数 堆的创建 前言 二叉树的顺序结构存储即使用数组存储,而数组存储适用于完全二叉树&#xf…

【具身智能综述1】A Survey of Embodied AI: From Simulators to Research Tasks

论文标题:A Survey of Embodied AI: From Simulators to Research Tasks 论文作者:Jiafei Duan, Samson Yu, Hui Li Tan, Hongyuan Zhu, Cheston Tan 论文原文:https://arxiv.org/abs/2103.04918 论文出处:IEEE Transactions on E…

柯桥银泰附近有学德语的地方吗,留学德语培训

01 die Garantiefr jemandem/etwas 给某人或某事的保障 Das System bietet die Garantie fr die Bauer. 02 der Gebrauch von etwas 使用某物 Wir haben den Gebrauch vom Computer gelerbt. 我们学会了使用电脑。 03 Die Geduld mit jemandem/etwas 对..的耐心 Der Lehre…

智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台

一、方案背景 我国江河湖泊众多,水系发达。伴随着经济社会快速发展,水生态水环境问题成为群众最关注的民生议题之一。一些河流开发利用已接近甚至超出水环境承载能力,一些地区废污水排放量居高不下,一些地方侵占河道、围垦湖泊等…

如何在不恢复出厂设置的情况下解锁 Android 手机密码?

如何在不恢复出厂设置的情况下解锁 Android 手机密码? 当您忘记 Android 手机的密码时,可能会有压力,尤其是当您不想恢复出厂设置并删除所有数据时。但是,有一些方法可以在不诉诸如此激烈的步骤的情况下解锁手机。我们将在这篇文…

数据仓库扫盲系列(1):数据仓库诞生原因、基本特点、和数据库的区别

数据仓库的诞生原因 随着互联网的普及,信息技术已经深入到各行各业,并逐步融入到企业的日常运营中。然而,当前企业在信息化建设过程中遇到了一些困境与挑战。 1、历史数据积存。 过去企业的业务系统往往是在较长时间内建设的,很…

JavaSE编程题目练习(三)

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,欢迎关注小弟! 博主小留言:哈喽!各位CSDN的uu们,我是你的小弟Cool&#xff0…

2023.10.20期中考核复现(misc)

杂项题就是2023陇剑杯的题目,可能还是不感兴趣吧,自从打完蓝帽杯之后除了web以外什么都没看 flow analysis 1 题目:What is the backdoor file name that comes with the server?( Including file suffix) 服务器附带的后门文件名是什么&am…

【前端】图片裁剪路径绘制及图片不规则裁剪

说明 项目中可能需要用户根据展示的图片,然后绘制需要裁剪的路径,再根据绘制的坐标进行裁剪,以下是前端的裁剪路径绘制的代码示例,后端可以根据当前的获取到的坐标进行裁剪,裁剪的坐标保存在coordinate数组中。 代码 …

【Maven教程】(八):使用 Nexus 创建私服 ~

Maven 使用 Nexus 创建私服 1️⃣ Nexus简介2️⃣ 安装 Nexus2.1 下载 Nexus2.2 Bundle 方式安装 Nexus2.3 WAR 方式安装 Nexus2.4 登录 Nexus 3️⃣ Nexus 的仓库与仓库组3.1 Nexus 内置的仓库3.2 Nexus 仓库分类的概念3.3 创建 Nexus 宿主仓库3.4 创建 Nexus 代理仓库3.5 创…

计算机毕业设计 基于SpringBoot笔记记录分享网站的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制

文章目录 openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制 openGauss学习笔记-105 openGauss 数据库管理-管理用户及权限-默认权限机制 数据库对象创建后,进行对象创建的用户就是该对象的所有者。openGauss安装后的默认情况下&#xff0c…

C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例

分割数组的最大值 相关知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例:付视频课程 二分 过些天整理基础知识 题目 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法…

聊聊分布式架构09——分布式中的一致性协议

目录 01从集中式到分布式 系统特点 集中式特点 分布式特点 事务处理差异 02一致性协议与Paxos算法 2PC(Two-Phase Commit) 阶段一:提交事务请求 阶段二:执行事务提交 优缺点 3PC(Three-Phase Commit&#x…

11-k8s-service网络

文章目录 一、网络相关资源介绍二、开启ipvs三、nginx网络示例四、pod之间的访问示例五、service反向代理示例 一、网络相关资源介绍 Servcie介绍 Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现…

如何在电脑上设置新的蓝牙耳机

本文介绍如何将蓝牙耳机连接到Windows或Mac电脑。 如何在Windows上设置新的蓝牙耳机 蓝牙耳机的设置过程因平台而异,但以下是Windows 11的步骤: 1、选择“开始”,然后在搜索框中输入蓝牙,以显示蓝牙和其他设备。 2、选择添加设…

【马蹄集】—— 概率论专题:第二类斯特林数

概率论专题:第二类斯特林数 目录 MT2224 矩阵乘法MT2231 越狱MT2232 找朋友MT2233 盒子与球MT2234 点餐 MT2224 矩阵乘法 难度:黄金    时间限制:5秒    占用内存:128M 题目描述 输入两个矩阵,第一个矩阵尺寸为 l…

2024年仁爱学院专升本招生专业对应范围专业目录更新的通知

天津仁爱学院2024年高职升本科招生专业对应范围专业目录 为了更好的进行天津仁爱学院专升本工作,动画专业不分文理进行录取。为了进一步提升录取专业的培养需要,请同学们复习专业课时加强专业课学习,请同学们在报考时关注天津仁爱学院招生章…

Unreal Engine 4 + miniconda + Python2.7 + Pycharm

1.​首先启用UE4插件里的Python Scripting插件 ​ 2. 在UE4项目设置中 开启Python开发者模式 生成unreal.py文件,用于在Pychram中引入Unreal PythonAPI 生成的unreal.py 在: "项目路径\Intermediate\PythonStub\unreal.py"3. 安装Miniconda…

关于opencv的contourArea计算方法

cv::contourArea计算的轮廓面积并不等于轮廓点计数,原因是cv::contourArea是基于Green公式计算 老外的讨论 github 举一个直观的例子,图中有7个像素,橙色为轮廓点连线,按照contourArea的定义,轮廓的面积为橙色所包围…