当前位置: 首页 > news >正文

PostgreSQL 大表字段回填最佳实践:高并发无锁更新 + 分批提交 + 完整进度显示

在实际生产环境中,我们经常会遇到这样的需求:

“表中某个字段有几十万乃至几百万行是 NULL,需要全部改成 0,
并且不能影响线上业务(QPS 高),不能锁表,不能长事务。”

听起来简单,但如果处理不当,会导致:

  • 全表锁

  • 长时间阻塞线上写入

  • 大事务造成 WAL 量爆炸

  • 表膨胀、autovacuum 跟不上

  • UPDATE 越跑越慢

  • 线上接口 RT 飙升

这篇文章将结合 真实生产案例(QPS≈3000),讲解一个完全可落地、可长时间运行、不会锁表的 backfill 方案:

📌 小批更新 + 分批提交 + SKIP LOCKED + 部分索引 + 进度百分比 + 性能计时

这里,我有36万数据,每批只更新10个,等待0.5s,大约要更新15个小时,可以做参考

beta环境没有并发,1s可以更新1000个,但是到了Prod,10个数据都需要1.5s去更新,可以说是很耗时了

同时一个简单的update,居然需要这么多方式去做辅助更新,体现了我们从一开始设计字段时的重要性。


🚨 常见坑点(很多人不注意)

❌ 坑 1:直接 UPDATE 整表,轻则卡 10 分钟,重则死锁

UPDATE table_account SET is_reseller = 0 WHERE is_reseller IS NULL;

为什么危险?

  • 扫全表(可能几千万行)

  • 锁大量行

  • 大量 dead tuple 导致 WAL 写放大

  • autovacuum 无法及时清理

  • 一个大事务 commit 可能卡住几十秒甚至更长


❌ 坑 2:分批 SELECT…FOR UPDATE,但不加 SKIP LOCKED,会被业务锁住

FOR UPDATE   -- ❌ 会等待别人的锁

业务正在更新某些行,你的回填脚本就会被锁住 → 整个 batch 卡住

👉

http://www.dtcms.com/a/610907.html

相关文章:

  • STM32_标准库转hal库
  • 织梦怎么做单页网站创建网站的工作流程
  • 做网站流量是什么上海制作网站的公司
  • PHP安装ZSTD压缩库扩展
  • 完美解决phpstudy安装后mysql无法启动
  • 新能源知识库(124)新能源接入对电能质量的影响
  • 磁共振成像原理(理论)28:饱和恢复序列 (Saturation-Recovery Sequence)
  • 桂林网站开发公司电话2345网址导航怎么彻底删掉win10
  • 网站册数平面设计可以自学吗
  • Boost库中Boost.PropertyTree使用和实战示例
  • 公司网站维护建设费入什么科目广东华电建设股份有限公司网站
  • 上海营销型网站建设价格线上运营推广是做什么的
  • 织梦绿色企业网站模板 苗木企业网站源码 dedecms5.7内核WordPress 营利
  • 高端建设网站建设北京网站建设最好公司
  • 成都制作网站软件网站建设新闻稿
  • 网站地图格式wordpress安装虚拟主机
  • 代理模式啦
  • 自动化测试:Python开发IDE介绍
  • 国产操作系统调研报告:产业现状与未来方向
  • 好用的远程软件!ToDesk、向日葵、UU远程横测
  • 商务网站建设用的是什么软件成都比较好的设计公司
  • ESP32基础-PWM_步进电机
  • (修改认证方式、设置密码策略);)Zabbix安装(配置清华源、安装必要组件);)数据库初始化(创建库/用户、导入数据);)服... ...
  • 爱网站在线观看视频vi展示效果图
  • 网站ip地址查询域名网站建设388
  • 郑州网站建设价格wordpress编辑文章更新失败
  • 打造“移动的风景线”:RTMP推流平台EasyDSS无人机推流直播实现文旅宣传新形态
  • 测试测试测试测试测试
  • 异形零件自动化排列:整列机与传统振动盘的 5 大技术维度解析
  • google网站质量做网站的网页用什么软件好