ToB企服应用市场:ToB评测及商务社交产业平台

标题: PostgresSql VACUUM 剖析 [打印本页]

作者: 怀念夏天    时间: 2024-6-27 17:59
标题: PostgresSql VACUUM 剖析
为什么必要 Vacuum

MVCC

MVCC:Multi-Version Concurrency Control,即多版本并发控制。
PostgreSQL 使用多版本并发控制(MVCC)来支持高并发的事务处理,同时保持数据的一致性和隔离性。MVCC 是一种用于管理数据库并发操作的技能,它允很多个事务同时访问同一数据,而不会产生辩论或壅闭。
MVCC 的工作原理

MVCC 的关键特点:

MVCC 的挑战:

MVCC 是 PostgreSQL 强大并发控制机制的核心,它使得数据库能够高效地处理大量的并发事务,同时保持数据的一致性和隔离性。
表膨胀

多版本并发控制机制(MVCC)的原理在于,当它必要更改某块数据的时候,它不会直接去更改,而是会创建这份数据的新版本,在新版本进行更改,所以会存储多份版本,每个事务能望见哪一份版本的数据,由事务隔离级别控制。
MVCC引入了一个问题,怎样消除老旧的、没有使用的无用数据(版本),现在主流上有3种处理实现方式:
来看看各种数据库的解决方式:
Vacuum 工作原理

PostgreSQL的表膨胀清理就必要依靠vacuum,vacuum的主要使命就是清理表和索引中不必要的数据(dead tuples),为新加入的数据清理出来空间。
Vacuum

PostgreSQL中的VACUUM​命令是一种数据库维护使命,用于清理数据库中的无用空间(也称为“dead tuples”或“ghost tuples”),并防止表膨胀。VACUUM​还更新数据库的统计信息,这些信息由查询优化器用来选择最有效的查询计划。以下是VACUUM​怎样工作的详细步骤:
​VACUUM ​在这段时间删除的数据,并不会从此磁盘上删除,只是将数据标为可删除,这部分可删除的空间会出现以下两种环境:
Vacuum Full

Vacuum Full和Vacuum最大的不同就是,Vacuum Full是物理删除dead tuples,并把开释的空间重新交给操作体系,所以在vacuum full后,表的大小会减小为现实的空间大小。其处理过程和 vacuum 大不相同,处理步骤如下:
综上所述,vacuum full的本质是生成一个新的数据文件,然后把原有表的live tuples存放到该数据文件中。对比vacuum, vacuum  full缺点就是在执行期间不能对表进行访问,由于必要往新表中导入live  tuples数据,其执行服从也会很慢。优点是执行后,表空间只存放live tuples,没有冗余的dead  tuples,在执行查询服从上会有所提高。
但是,vacuum full 也有存在的问题,在执行过程中,它会block所有对表的访问,不光是写操作,读操作也会全部block。很多环境下这是不可接受的,尤其是生产环境。
Vacuum 的利益

PostgreSQL中的VACUUM​命令具有多个利益,主要包罗:
​VACUUM​是PostgreSQL数据库维护和性能优化的重要组成部分,正确理解和运用VACUUM​命令及其变种,对于保持数据库的精良运行状态具有重要意义。
Vacuum 的最佳实践

PostgreSQL中的VACUUM​操作是数据库维护的重要组成部分,以下是一些最佳实践:
通过遵循这些最佳实践,可以确保数据库的性能和健康状况得到精良的维护。

参考文档:
Kimi.ai - 帮你看更大的天下
PostgreSQL的表膨胀与Vacuum和Vacuum Full - 明矾 - 博客园
深入浅出 PostgreSQL VACUUM 流程,全面掌控数据健康与性能! - ByteZoneX社区
blog/202405/20240530_01.md at master · digoal/blog · GitHub


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4