使用读取繁重的 Slave 管理热备中 Postgres 复制的冲突和滞后

2023-12-12

要求:

Avoid terminating connection due to conflict with recovery错误也可以接受replication lag.

Google Cloud PostgreSQL 9.6,复制已打开(使用流复制),PGPool-II 设置为仅执行负载平衡,并在从属设备上具有以下属性:

work_mem    3276800
commit_delay    100
max_wal_size    940
max_standby_archive_delay   -1
max_standby_streaming_delay -1
hot_standby_feedback    on

机器配置:

vCPU:8,内存:30 GB,SSD 存储:76 GB

工作量:

大师满载writes and reads,并且奴隶也满载了很多reads。 查询的最大长度可能约为8-10 secs.

我们之前尝试过的:

  • Set max_standby_archive_delay and max_standby_streaming_delay to 900000(900 秒),但是我们看到很多conflict errors.

  • Set max_standby_archive_delay and max_standby_streaming_delay to -1,这使得冲突错误消失,但是滞后增加了很多(在某个地方23mins)

  • Set max_standby_archive_delay and max_standby_streaming_delay to -1 and hot_standby_feedback to on。这也使得冲突错误消失,但是我们仍然看到复制滞后(大约500 secs)

用于滞后的查询:

SELECT
  pg_last_xlog_receive_location() receive,
  pg_last_xlog_replay_location() replay,
  (
   extract(epoch FROM now()) -
   extract(epoch FROM pg_last_xact_replay_timestamp())
  )::int lag;

在一段时间内每 1 秒测量一次的延迟图9 hours:

graph

问题:

  1. 考虑到我们的用例(从服务器被积极用于读取查询,我们如何确保没有冲突错误and合理的延迟(大约几秒)
  2. 滞后是什么意思?难道Master后面只有一张桌子吗?或者这是否意味着所有其他 WAL 也正在等待应用于从属设备。
  3. 如果 1. 使用配置属性无法实现,我们如何在代码中解决它(这是最不理想的,因为代码库很大并且需要大量更改)

Thanks!


你无法完全避免冲突——每一个陈述都像TRUNCATE or ALTER TABLE这需要一个ACCESS EXCLUSIVE锁会导致复制冲突。

但你可以避免由以下原因引起的复制冲突VACUUM:

  • Set hot_standby_feedback = on防止 PostgreSQL 删除备用数据库上仍需要的元组。

  • Set old_snapshot_threshold避免使用默认值以外的值(可能很高)真空截断.

    这种截断需要一个ACCESS EXCLUSIVE锁也可能导致冲突。

对于其余冲突,您可以选择延迟申请和取消查询。或者你改变工作量以避免ACCESS EXCLUSIVE locks.

要找出是什么阻碍了你,你必须使用pg_xlogdump在 WAL 文件上并搜索ACCESS EXCLUSIVE锁。这将使您能够找出哪个对象被锁定。要了解执行了何种操作,请检查 (VACUUM?)或之后立即(DDL?)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用读取繁重的 Slave 管理热备中 Postgres 复制的冲突和滞后 的相关文章

  • 如何在 PostgreSQL 中克隆记录

    我想循环查询 但也保留下一个循环的实际记录 这样我就可以比较两个相邻的行 CREATE OR REPLACE FUNCTION public test RETURNS void AS body DECLARE previous RECORD
  • 如何从主机连接到 Docker Postgres 容器

    我按照以下说明搭建了一个 Rails 开发环境https docs docker com compose rails https docs docker com compose rails 它可以工作 但我无法从主机连接到 Postgres
  • PSQL [错误] - 值被识别为列

    前几天刚开始学习数据库 我遇到了这个问题 我的值被识别为一列 并且它吐出了一个错误 这是我的News table id bodyText url createdAt updatedAt 这是我在 psql 中运行的命令 INSERT INT
  • PostgreSQL:有效地将 JSON 数组拆分为行

    我有一个表 表 A 其中包含一个包含 JSON 编码数据的文本列 JSON 数据始终是一个包含一到几千个普通对象的数组 我有另一个表 表 B 其中有几列 包括数据类型为 JSON 的列 我想从表 A 中选择所有行 将 json 数组拆分为其
  • 如何从 postgresql 函数或触发器发送一些 http 请求

    我需要通过 http 协议 GET 或 POST 请求 从函数或触发器发送数据 是否可以 您可以尝试用 PL Python 编写触发器并使用 urllib2 进行 POST
  • PostgreSQL:比较 json [重复]

    这个问题在这里已经有答案了 众所周知 目前 PostgreSQL 还没有方法来比较两个 json 值 比较就像json json不起作用 但是选角呢json to text before Then select x a y b json t
  • Postgres 平均值计算忽略 null

    这是我的 postgres 表 name revenue John 100 Will 100 Tom 100 Susan 100 Ben 5 rows 在这里 当我计算平均收入时 它返回 100 这显然不是这种情况 而总和 计数 即 400
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • MySQL 复制是双向的

    我们已经成功设置了 MySQL 文献中描述的主从复制 不过 我很好奇是否有人设置了双向复制 例如 如果安装了 Drupal 或 Wordpress 第一个 主 数据库服务器出现故障 第二个 从属 数据库服务器恢复正常 与此同时 用户不断进行
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • 如何在连接到 Heroku PostgreSQL 的 Flask 应用程序上处理更多并发用户?

    Heroku 上的 Flask API 有许多端点 它们在将 json 化结果返回给客户端之前在我的 Heroku PostgreSQL 数据库上运行查询 我当前的计划是 Hobby Basic 层 因此数据库最多只能处理 20 个连接 如
  • Django 中从 sqlite 迁移到 postgresql

    我想迁移自sqlite to PostgreSQL db 我安装了 postgresql 并在其 shell 上创建数据库 然后配置我的 django 设置如下 default ENGINE django db backends postg
  • Npgsql 参数化查询输出与 PostGIS 不兼容

    我在 Npgsql 命令中有这个参数化查询 UPDATE raw geocoding SET the geom ST Transform ST GeomFromText POINT longitude latitude 4326 3081
  • pg_dump 没有对象注释?

    有没有办法执行 pg dump 并排除表 视图和列的 COMMENT ON 我广泛使用 COMMENT ON 命令来描述所有对象 并且经常在其中包含换行符以获得更清晰的描述 例如 COMMENT ON TABLE mytable1 IS M
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • postgresql:插入...(选择*...)

    我不确定它是否是标准 SQL INSERT INTO tblA SELECT id time FROM tblB WHERE time gt 1000 我正在寻找的是 如果 tblA 和 tblB 位于不同的数据库服务器中怎么办 Postg
  • pymongo复制辅助读取引用不起作用

    我们有 MongoDB 2 6 和 2 副本集 并且我们使用pymongo驱动程序并使用以下 url 连接 Mongodb 副本集 mongodb admin email protected cdn cgi l email protecti
  • 使用 PostGIS 拥有通用 GEOGRAPHY 列

    在 PostgreSQL 9 PostGIS 1 5 中 有没有办法创建 通用 GEOGRAPHY 列 我指的是接受 POINT 以及 POLYGON LINESTRING 等的列 到目前为止 我只在 Internet 上看到过像 GEOG

随机推荐

  • 将输入文本值作为参数传递

    我想将用户输入作为参数传递到另一个页面 这是我的代码
  • Java 正则表达式抛出 java.util.regex.PatternSyntaxException:字母 g 的转义序列非法/不受支持

    我需要查看字符串中是否存在整个单词 这就是我尝试这样做的方式 if text matches word b do something 它适用于大多数单词 但以 a 开头的单词g导致错误 Exception in thread main ja
  • Cython - 动态 2D C++ 数组的 Memoryview

    目标 使用 Cython 从 2D C 字符数组获取 Memoryview 一点背景 我有一个本机 C 库 它生成一些数据并通过char 到 Cython 世界 数组在库中的初始化和操作大约是这样的 struct Result buffer
  • 从字符串列表创建 numpy 结构化数组

    我正在开发一个 python 实用程序来从第谷 2 星目录中获取数据 我正在开发的功能之一是查询目录并返回给定明星 ID 或一组明星 ID 的所有信息 我目前正在通过循环遍历目录文件的行来执行此操作 然后尝试将行解析为 numpy 结构化数
  • jQuery 甚至没有被调用

    我不知道这里发生了什么 我正在尝试在我的菜单上添加一个滑动切换 看起来非常简单 我试图简化它以尝试找到问题 这意味着我已经采取了所有链接出来和额外的jquery 只有底部的例子 最后的段落 但我不知道错误是什么 除了它不做任何事情 包括 剧
  • ASP.Net MVC 框架和数据绑定

    我在理解 MVC 框架背后的一些概念时遇到了一些困难 我正在做一个非常简单的应用程序 对产品进行分类 创建屏幕将仅使用一个下拉列表 显示类别列表 产品名称并提交 在普通的 Net 应用程序中 我会在 Page Load 中对服务器下拉列表进
  • 如何从窗口获取像素数据\像素缓冲区并提取RGB?

    我正在窗口上绘制文本 textOut 和矩形 我想从中获取 RGB 缓冲区 我该怎么做 有 2 个选项 首先 您可以使用 GetPixel 我用过很多次 它工作正常 COLORREF GetPixel HDC hdc int nXPos i
  • 如何找到 appleid.apple.com/auth/revoke 端点所需的 client_id 和 client_secret 值?

    我想在我的项目中为通过 Apple REST API 登录的用户使用帐户删除功能 在我的 iOS 应用程序中 curl 请求中指定的 client id 和 client secret 值对应于什么值 curl v POST https a
  • jquery 验证插件 - 提交时不验证

    我有一个包含多个字段的表单 我想在键盘输入和提交时验证其中一些字段 我调用 jquery 1 9 1 然后调用插件 1 11 1 然后使用我的 js 调用外部文件 我通过 Firebug 看到它们都在加载 如果我使用下面的代码 它根本不会验
  • HTML 全屏布局,具有最小宽度、最大宽度

    我有一个项目 例如 一个 div 标签 它占据屏幕宽度的 1 3 最小宽度为 500px 最大宽度为 700px 在它旁边 还有另一个项目占据屏幕的其余部分 如果我只是指定 66 的宽度 只要其他项目的高度不采用最大值之一 它就可以正常工作
  • 阻止杰克逊将数字读取为字符串

    Jackson 将输入数字读取为字符串 作为下面的示例 Student 类将名称 4567 读取为字符串 例如 输入 name 4567 Java类 Class Student String name Jackson 正在解析 JSON 文
  • 使用 StickyGridHeaders

    粘性网格标题 但它没有按应有的方式工作 或者至少没有按我想要的方式工作 所以我得到了这个列表 里面有其他列表 然后我创建了一个标题列表 我使用原始列表 和一个完整的项目列表 所有子项目 然后像这样调用适配器 List
  • 为什么在创建 SqlClient 类型时会出现缺少方法异常运行时?

    我有以下代码 open FSharp Data
  • $_SERVER['REQUEST_URI'] 也带有 #hash 吗?

    如果我要求site page php hash the SERVER REQUEST URI 只是 page php 有没有办法在 php 没有后来的 ajax 中知道用户请求的页面 hash Thanks 简短回答 不 哈希不会传递到服务
  • Grails 使用带有 3 个以上逻辑参数的动态查找器

    我成功地使用 Hibernate 的动态查找器在数据库中进行搜索 def temp User findByNameAndStreet name street 虽然 我需要这样的三重逻辑论证 def temp User findByNameA
  • 嵌入式 Flash MP3 播放器在某些文件上速度缓慢,在其他文件上正常

    我正在使用基于 Flash 的嵌入式 MP3 播放器 独立版本WordPress 音频播放器 准确的说 在客户端的网页上播放音频 鉴于基于 Flash 的播放器的性质 AFAIK 他们都使用 Flash 的音频 视频解码库 确切的播放器产品
  • 如何向 Console.ReadLine() 添加超时?

    我有一个控制台应用程序 我想在其中向用户提供x秒响应提示 如果在一段时间后没有输入 程序逻辑应该继续 我们假设超时意味着空响应 解决这个问题最直接的方法是什么 我惊讶地发现 5 年后 所有答案仍然存在以下一个或多个问题 使用了 ReadLi
  • 无法使用 Facebook API 获取位置和电子邮件

    在我的 Android 应用程序中 我开发了这段代码来使用我的帐户登录并获取用户属性 例如姓名 位置和电子邮件 问题是我可以获得姓名 但无法获得电子邮件和位置 当我尝试我的代码而不尝试捕获应用程序崩溃和我的日志点时getproperty e
  • @RequestMapping正则表达式

    我正在尝试为 spring RequestMapping 注释创建 value 属性来像这样映射 url educationDistrict 308 action resetAddressesForYear 1 and this educa
  • 使用读取繁重的 Slave 管理热备中 Postgres 复制的冲突和滞后

    要求 Avoid terminating connection due to conflict with recovery错误也可以接受replication lag Google Cloud PostgreSQL 9 6 复制已打开 使用