【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试

news2025/2/23 10:33:15

在这里插入图片描述

通过禁用参数可以来调整事务工作负载synchronous_commit。该措施有惊人效果。但在操作系统崩溃期间丢失已提交事务的可能性使其成为许多应用程序无法启动的因素。因此我决定写下来。

WAL 刷新是事务数据库工作负载的瓶颈

为了确保已提交的事务不会丢失,PostgreSQL 必须确保事务的WAL已刷新到磁盘,然后才能向客户端报告成功。如果数据库工作负载主要由小数据修改组成,则这些事务产生的IOPS可能会使磁盘饱和,即使写入的数据量适中。

参数对commit_delay可以commit_siblings通过减少这些 WAL 刷新所需的 IOPS 数量来缓解瓶颈。

commit_delay和如何commit_siblings工作?

您可以通过将其设置为大于零的值来激活该功能commit_delay。每当事务在提交期间达到将 WAL 刷新到磁盘的点时,它首先检查当前有多少其他事务处于活动状态。如果至少有其他commit_siblings事务处于打开状态并且没有等待锁定,PostgreSQL 不会立即刷新 WAL,而是等待commit_delay几微秒。经过该延迟后,其他一些事务可能已达到准备刷新 WAL 的点。然后,所有这些后端都可以在单个 I/O 操作中执行其 WAL 刷新。

commit_delay调整起来并不容易,因为延迟会使事务耗时更长。另一方面,如果选择的值太低,则在延迟过去时可能没有其他事务准备就绪,并且您无法减少执行的 IOPS 数量。

commit_delay基准设置

基准测试在我的 ASUS ZenBook UX433F 笔记本上运行,该笔记本具有本地 NVME 磁盘、8 个 CPU 核心和 16GB RAM。我设置了shared_buffers = 3GB、max_wal_size = 100GB和。然后我使用比例因子 100checkpoint_timeout = 15min初始化标准数据库。我使用pg_prewarm将所有表和索引加载到共享缓冲区中。这样,就永远不会有读取 I/O,并且除了检查点之外,唯一的 I/O 将是 WAL 写入。

pgbench我使用的命令是

pgbench -b simple-update -c 10 -T 1200

限制磁盘

我的笔记本电脑内置的 NVME 非常强大,我无法用 来满足它的需求pgbench。因此,我决定使用Linux 控制组将设备限制为 1000 IOPS。在我的 Fedora 40 系统上,我必须为 systemd 切片启用 I/O 控制:

echo '+memory +pids +io' > /sys/fs/cgroup/system.slice/cgroup.subtree_control

然后,我可以为 PostgreSQL v17 服务的写入设置 NVME 上的 IOPS 限制:

echo '259:0 wiops=1000' > /sys/fs/cgroup/system.slice/postgresql-17.service/io.max

您可能会说,这让我的测试显得很虚假。但是,将数据库托管在公共云中的人会受到类似这样的限制。而且,无论如何,您永远无法将基准测试的结果直接应用于不同的系统和工作负载。

commit_delay基准测试结果

在这里插入图片描述
我们在 1000 μs 的设置下实现了最佳性能commit_delay。使用此设置时,pgbench每秒执行的交易数比不使用时少两倍commit_delay。值得注意的是,在最佳状态下,磁盘远未饱和,因此可能实现更好的结果。

结论

虽然commit_delay不能以同样的方式提高事务工作负载的性能synchronous_commit = off,但我们仍然能够实现显着的性能改进。如果您无法承受操作系统崩溃后丢失事务的后果,那么调优commit_delay是加快由短事务组成的工作负载的最佳方法。
#PG证书#PG考试#PostgreSQL培训#PostgreSQL考试#PostgreSQL认证

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

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

相关文章

AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)

背景 当前大模型的权重加载和调用,主要是通过在HuggingFace官网下载并使用transformer的库来加以实现;其中大模型的权重文件较大(部分>100GB),若只是快速研究网络结构和数据流变化,则无需下载权重。本文…

Ollama+WebUI+DeepSeek部署自己的本地大模型

前言 使用AI几乎成为互联网工作者必备技能了,DeepSeek的出现把AI再次推向高潮,在本文中,我们将带领大家借助 Ollama、WebUI 和 deepseek 这三个工具,成功搭建属于自己的本地大模型环境。Ollama 作为一款轻量级的大模型运行工具&a…

(篇六)基于PyDracula搭建一个深度学习的软件之新版本ultralytics-8.3.28调试

ultralytics-8.3.28版本debug记录 1传入文件 代码太多不粘贴在这里了,完整代码写在了篇三 def open_src_file(self):config_file config/fold.jsonconfig json.load(open(config_file, r, encodingutf-8))open_fold config[open_fold]if not os.path.exists(op…

NLP Word Embeddings

Word representation One-hot形式 在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。 比如下面的例子,即使语言模型已经知道orange juice是常用组合词&#xf…

使用HX搭建UNI-APP云开发项目(适合新手小白与想学云开发的宝子)

什么是uni-app云开发 uni-app云开发是uni-app提供的一套后端服务,它可以帮助开发者快速搭建起一个完整的后端服务,包括数据库、云函数、存储等。开发者只需要关注前端页面的开发,后端服务由uni-app云开发提供。 uni-app云开发的优势: 快速搭建后端服务:uni-app云开发提供了…

sql:时间盲注和boolen盲注

关于时间盲注&#xff0c;boolen盲注的后面几个获取表、列、具体数据的函数补全 时间盲注方法 import time import requests# 获取数据库名 def inject_database(url):dataname for i in range(1, 20):low 32high 128mid (low high) // 2while low < high:payload &q…

【STM32】ADC|多通道ADC采集

本次实现的是ADC实现数字信号与模拟信号的转化&#xff0c;数字信号时不连续的&#xff0c;模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法&#xff0c;使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时&#xff0c;0~ 3.3v(模拟信…

arcgis for js实现层叠立体效果

在 Web 开发中&#xff0c;利用 ArcGIS for JS 实现一些炫酷的地图效果能够极大地提升用户体验。本文将详细介绍如何使用 ArcGIS for JS 实现层叠立体效果&#xff0c;并展示最终的效果图。 效果图 实现思路 要实现层叠立体效果&#xff0c;关键在于获取边界图形的坐标&#xf…

多模态本地部署和ollama部署Llama-Vision实现视觉问答

文章目录 一、模型介绍二、预期用途1. 视觉问答(VQA)与视觉推理2. 文档视觉问答(DocVQA)3. 图像字幕4. 图像-文本检索5. 视觉接地 三、本地部署1. 下载模型2. 模型大小3. 运行代码 四、ollama部署1. 安装ollama2. 安装 Llama 3.2 Vision 模型3. 运行 Llama 3.2-Vision 五、效果…

【DeepSeek】deepseek可视化部署

目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用&#xff0c;可是每次都需要winR输入cmd调出命令行进入到命令模式&#xff0c;输入命令ollama run deepseek-r1:latest。体验很…

【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 相关笔记&#xff1a; https://blog.csdn.net/dj…

Fabric.js、leaferjs、pixi.js 库的对比分析

文章目录 一、引言二、参与对比的 canvas 库简介三、性能对比四、易用性对比五、功能特性对比六、综合评价与使用建议七、总结 在前端开发中&#xff0c;canvas 库为实现丰富的图形效果和交互功能提供了强大的支持。本文将对 Fabric.js、leaferjs 和 pixi.js 这三个常见的 canv…

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法&#xff1a; 可达性分析算法&#xff1a; 五种对象引用 软引用&#xff1a; 弱引用&#xff1a; 引用计数法和可达性分析法 引用计数法&#xff1a; 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&…

2.11 sqlite3数据库【数据库的相关操作指令、函数】

练习&#xff1a; 将 epoll 服务器 客户端拿来用 客户端&#xff1a;写一个界面&#xff0c;里面有注册登录 服务器&#xff1a;处理注册和登录逻辑&#xff0c;注册的话将注册的账号密码写入数据库&#xff0c;登录的话查询数据库中是否存在账号&#xff0c;并验证密码是否正确…

相得益彰,Mendix AI connector 秒连DeepSeek ,实现研发制造域场景

在当今快速发展的科技领域&#xff0c;低代码一体化平台已成为企业数字化转型的关键工具&#xff0c;同时&#xff0c;大型语言模型&#xff08;LLM&#xff09;如 DeepSeek 在自动生成代码和提供智能建议方面表现出色。 Mendix 于近期发布的 GenAI 万能连接器&#xff0c;目前…

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年&#xff0c;人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸&#xff0c;不仅在国内掀起了技术热潮&#xff0c;并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球&#xff0c;这不仅重塑了产业格…

.NET Web-静态文件访问目录浏览

一、Web根目录访问 创建wwwroot文件夹app.UseStaticFiles(); // 启⽤静态⽂件中间件url/路径 进行访问 二、Web根目录之外的文件 app.UseStaticFiles(new StaticFileOptions {FileProvider new PhysicalFileProvider(Path.Combine(builder.Environment.ContentRootPath,&qu…

【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS

本篇&#xff0c;将使用CubeMXKeil, 创建一个 USBTF卡存储FatFS 的虚拟U盘读写工程。 目录 一、简述 二、CubeMX 配置 SDIO DMA FatFs USB 三、Keil 编辑代码 四、实验效果 串口助手&#xff0c;实现效果&#xff1a; U盘&#xff0c;识别效果&#xff1a; 一、简述 上…

node.js+兰空图床实现随机图

之前博客一直用的公共的随机图API&#xff0c;虽然图片的质量都挺不错的&#xff0c;但是稳定性都比较一般&#xff0c;遂打算使用之前部署的兰空图床&#xff0c;自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作&#xff0c;有兴趣的话可…

DeepSeek AI 满血版功能集成到WPS或Microsoft Office中

DeepSeek AI集成到 WPS或Microsoft Office中, 由于deepseek被攻击或者非常繁忙导致超时的服务器&#xff0c;所以可以用硅基流动部署的DeepSeek 。当然用官网的也可以。 使用 OfficeAI 插件集成(wps为例)&#xff1a; 下载并安装 OfficeAI 插件&#xff1a;从可靠的软件下载平台…