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.rhkb.cn/news/169270.html

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

相关文章

labelimg使用以及xml和txt转化

一、使用 winr——输入cmd 激活已有的环境 conda activate torch1.2.0 下载lebelme pip install labelme3.16.7 再输入labelme打开软件就可 可以设置自动保存,View——auto save mode打上勾 二、注意 1.自己类的定义名称,在txt中是0,1&a…

自动驾驶之—车道线感知

零、前言 : 最近在学习自动驾驶方向的东西,简单整理一些学习笔记,学习过程中发现宝藏up 手写AI 一、视觉系统坐标系 视觉系统一共有四个坐标系:像素平面坐标系(u,v)、图像坐标系(x,y&#xff09…

QT:编译opencv4.5.3

软件版本 QT:5.9.11 OpenCV 4.5.3 mingw 530(32位) cmake 3.15.3 下载地址: opencv下载:https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/ cmake下载:https://cmake.org/files/ qt下…

2.3.C++项目:网络版五子棋对战之实用工具类模块的设计

文章目录 一、实用工具类模块(一)功能 二、设计和封装(一)日志宏封装(二)mysql_util封装(三)Jsoncpp-API封装(四)file_util封装(五)st…

centos7安装mysql

首先检查是否已经已经下载mysql安装包: rpm -qa | grep mysql 如果存在则可以删除: rpm -e xxxx xxxx表示包名称 下载mysql安装包: wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 然后安装mysql包&#…

如何判断LED透明屏质量好坏?

要判断LED透明屏的质量好坏,您可以考虑以下几个关键因素: 焊点品质。焊点饱满的证明焊接工艺好,亮度高的透明屏,证明焊锡用的好;品质不好的是虚焊,容易出现接触不良现象。 灯珠温度。点亮一段时间后&#x…

实现多余内容变成省略号

实现效果 代码 <p class"item-content">{{ item.content }}</p>样式 .item-content {white-space: nowrap;/* 禁止换行 */overflow: hidden;/* 隐藏溢出部分 */text-overflow: ellipsis;/* 使用省略号表示溢出部分 */ }

freeCAD不合并导入step文件

1.问题描述 在使用freeCAD导入step文件的时候&#xff0c;一开始会导入成一个成体&#xff0c;想隐藏某些部件&#xff0c;却只能隐藏整个装配体&#xff0c;就是图示位置无法展开。 2.解决方法 找到首选项把第5步里面的不打钩就可以了。 3.freeCAD的用处 这个主要的用处还是用…

VR智慧景区,为游客开启智慧旅游新时代

近年来&#xff0c;文旅部加强了5G、VR虚拟技术等在文旅产业行业的运用&#xff0c;随着科技的不断发展&#xff0c;VR技术的运用越来越广泛&#xff0c;VR智慧景区作为一种全新的旅游方式&#xff0c;也渐渐的受到了人们广泛的关注&#xff0c;它可以让人们足不出户就欣赏到各…

golang 八股文整理

目录 进程、线程、协程Go 的垃圾回收机制GC 的触发条件GC 的调优GMP 调度和 CSP 模型Goroutine 的调度原理Goroutine 的切换时机Context 结构原理Context 工作原理Context 使用场景Golang 的内存分配机制竞态问题内存逃逸golang 内存对齐机制golang 中 new 和 make 的区别&…

自动驾驶的未来展望和挑战

自动驾驶技术是一项引人瞩目的创新&#xff0c;将在未来交通领域产生深远影响。然而&#xff0c;随着技术的不断演进&#xff0c;自动驾驶也面临着一系列挑战和障碍。本文将探讨自动驾驶的未来发展方向、技术面临的挑战&#xff0c;以及自动驾驶对社会和环境的潜在影响。 自动驾…

openCV的CUDA GPU 版本安装 (Ubuntu windows 通用)

需要做template match, 比较注重时间,因此opencv 的普通版本不适用。需要用GPU 的。 4090的GPU 测试: 使用普通的python-opencv template match 耗时0.089秒。 GPU 版本:0.0065秒 快了13.69倍 Oh YEAH, case sealed 文章目录 下载确保准备好以下内容安装要用的conda 环境…

自动化运维ansible(ansible-playbook)

一、ansible-playbook的构成 Inventory&#xff1a;主机列表&#xff0c;表示剧本中的任务要应用在哪些主机上; Tasks&#xff1a;具体任务&#xff0c;即调用哪些模块完成操作&#xff0c;可以配置多个任务; Variables&#xff1a;变量&#xff0c;包含内置变量和自定义变量;…

Unity protobuf中repeated转C#文件List只读问题

Unity protobuf中repeated转C#文件List只读问题 介绍问题解决方案总结 介绍 工具这里我就不多介绍了&#xff0c;如果有用到ProtoGen工具的可以继续看一下我后面的方法。 问题 如下图所示&#xff0c;我这里随便用了一个.proto文件&#xff0c;看下我这里面的repeated标记的…

虚拟机VMware Workstation Pro安装配置使用服务器系统ubuntu-22.04.3-live-server-amd64.iso

虚拟机里安装ubuntu-23.04-beta-desktop-amd64开启SSH(换源和备份)配置中文以及中文输入法等 ​一、获取Ubuntu服务器版 获取Ubuntu服务器版 二、配置虚拟机 选择Custom(advanced)&#xff1a; 选择Workstation 17.x: 选择“I will install the operating system later.”…

数据驱动的智能决策:数字孪生在企业中的应用

数字化转型如今如火如荼&#xff0c;企业和组织都在积极寻求新的技术和策略&#xff0c;以应对快速变化的商业环境。在这个数字化浪潮中&#xff0c;数字孪生技术崭露头角&#xff0c;为企业带来了前所未有的机遇和优势。 数字孪生&#xff0c;是一种基于虚拟化和模拟的技术&a…

Postman —— postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..)&#xff0c;附带任何数量的参数 headers postman是一款支持http协议的接口调试与…

TCP网络通信

TCP通信的 实现发1收1 package TCP1;//完成TCP通信的 实现发1收1import java.io.DataOutputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class Client {public static void main(S…

酷开科技丨大屏购物买买买,酷开系统助力网购模式再升级

随着技术的发展和家庭场景智能化的趋势&#xff0c;消费者对品质和体验的需求不断提高。在这一背景下&#xff0c;OTT大屏营销生态得到了快速发展&#xff0c;大屏的购物功能进一步被释放&#xff0c;已经具备更强的“转化”能力。电视的智能化、交互简单化、账号同步化等特性使…

HashMap源码解析_jdk1.8(二)

HashMap源码解析_jdk1.8&#xff08;二&#xff09;构造函数put方法resize扩容方法 HashMap源码解析_jdk1.8&#xff08;二&#xff09; 构造函数 HashMap提供了如下几个构造函数&#xff1a; /*** 构造一个具有指定初始容量和负载因子的空HashMap.** param initialCapacit…