前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL Vacuum Do you need it ?

PostgreSQL Vacuum Do you need it ?

作者头像
AustinDatabases
发布2019-06-21 16:37:50
6420
发布2019-06-21 16:37:50
举报
文章被收录于专栏:AustinDatabases

如果你理解 POSTGRESQL 的原理,尤其是在MVCC 上关于事务,在Update 或者 Delete 数据后,留下的 dead rows,是需要清理的,所以就引出了我们今天要看的 vacuum.

What is VACUUM on PostgreSQL ?

VACUUM (真空吸尘), 比喻的还蛮恰当的, Vacuum 进程就是在POSTGRESQL 中进行DEAD ROWS 清理的进程。

主要这个进程要做的有四点

1 恢复和重新利用磁盘空间

2 更新数据统计信息

3 加速索引的扫描(里边的原理暂不谈)

4 保证正常使用的数据不被清理

通过下面的查询我们可以获得表中

dead_tup 通过 live_tup 之间的对比关系就能发现当前的表是否存在“数据膨胀的问题”。

其中有一个问题,就是当vacuum 不在进行数据清理的,则空间会进行膨胀,数据库的性能也会降低。这也就是说要删除的事务中的"元组,必须比当前活跃的事务的元组 Xmax 要小,才能清空这个"元组”。

我们可以通过上面的查询得到相关PID 的信息, 并他通过 pg_terminate_backend来终止某些阻止 vacuum的进行的session.

另外还有一个事情就是 复制槽,如果复制槽不在被使用或者延迟等等事情发生,也会造成 VACUUM 不能正常进行

然后在通过pg_drop_replication_slot 复制槽的清理工作。

对自动的vacuum 需要查看是否处于打开的状态

最后我们的vacuum 的进程其实是一直在工作的

这些都是监控和日常中应该进行监控和检测的事情。

其实说到这里,如果是MYSQL的DBA ,可能还对VACUUM 的存在有一种混乱的印象,如果MYSQL DBA 可以想一下 UNDO LOG 的问题,通过UNDO LOG 尝试理解 这个问题,因为 POSTGRESQL 是没有 UNDO LOG 的,POSTGRESQL 是通过在每行标记 事务点的方式来进行数据的 回滚,这意味每张POSTGRESQL 的表中就已经带有UNDO LOG 的 某些功能了。当然如果是ORACLE的DBA 则很容易理解这件事情。

待续.....

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档