0

0

通过表分区优化 PostgreSQL 批量删除

聖光之護

聖光之護

发布时间:2024-10-09 08:12:09

|

882人浏览过

|

来源于dev.to

转载

通过表分区优化 postgresql 批量删除

在数据库管理中,高效处理大规模数据操作至关重要。一项常见的挑战是在大型表上执行批量删除而不降低整体性能。本文探讨 postgresql 的表分区功能如何显着加快进程
帮助维持平稳的数据库操作。

在这里查看我的更多作品。

大规模删除的挑战

从 postgresql 表中删除大量行可能是一项耗时的操作。它涉及:

  1. 扫描表以查找要删除的行
  2. 删除行并更新索引
  3. 用吸尘器清理桌子以回收空间

对于具有数百万行的表,此过程可能会导致长时间运行的事务和表锁定,可能会影响数据库响应能力。

输入表分区

表分区是一种将大表分为更小、更易于管理的部分(称为分区)的技术。这些分区是单独的表,与父表共享相同的架构。

我的基准设置

为了量化分区的好处,我在容器化环境中使用 postgresql 的三个场景设置了基准:

Cardify卡片工坊
Cardify卡片工坊

使用Markdown一键生成精美的小红书知识卡片

下载
  1. 简单表:标准的非分区表
  2. 分区表(行删除):按周分区的表,删除第一周的行
  3. 分区表(分区删除): 与 #2 相同,但删除整个第一周的分区

postgresql 容器规范

  • postgresql 版本:16.4
  • docker 版本:27.0.3
  • 资源限制:
    • cpu 限制:8 个 cpu
    • 内存限制:1 gb

数据特征

  • 总记录:400万条
  • 分配:4周内均匀分配(每周100万)
  • 索引:两个表(简单表和分区表)在时间列上都有索引

主要发现

scenario deletion time table size
simple table 1.26s 728 mb
partitioned (delete rows) 734ms 908 mb
partitioned (drop partition) 6.43ms 908 mb
  1. 显着的速度提升:删除分区比从简单表中删除行快 196 倍。
  2. 存储权衡: 由于额外的元数据和每分区索引,分区表使用了大约 25% 的更多存储空间。
  3. 插入影响最小:分区仅略微增加了数据填充时间(约 2.8%)。

为什么它有效

  1. 有针对性的操作:分区允许数据库处理数据的子集,从而缩小操作范围。
  2. 元数据操作:删除分区主要是元数据操作,避免扫描和删除单个行的需要。
  3. 减少锁争用:较小的分区意味着更少的锁,从而实现更好的并发性。

实施亮点

这是如何在 postgresql 中设置分区表的简化示例:

CREATE TABLE records (<br>
    id BIGSERIAL,<br>
    time TIMESTAMPTZ NOT NULL,<br>
    body TEXT<br>
) PARTITION BY RANGE (time);

<p>CREATE TABLE records_week_1 PARTITION OF records<br>
    FOR VALUES FROM ('2023-01-01') TO ('2023-01-08');</p>

<p>-- Create index on the partition<br>
CREATE INDEX idx_records_week_1_time ON records_week_1 (time);</p>

<p>-- To delete a week's worth of data:<br>
ALTER TABLE records DETACH PARTITION records_week_1;<br>
DROP TABLE records_week_1;<br>
</p>




结论

对于处理时间序列数据的数据库或任何常见大规模删除的场景,实施表分区可以带来显着的性能提升。虽然存储和插入速度之间存在较小的权衡,但删除效率的收益通常远远超过这些成本。

通过利用分区,即使数据增长,您也可以保持高性能,确保您的 postgresql 数据库保持响应速度和高效。

完整基准代码和详细结果的链接

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

289

2023.11.13

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

222

2023.12.29

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

516

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

417

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

454

2024.04.08

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

42

2026.02.11

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

164

2023.10.10

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 2.1万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 18.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号