太阳集团tyc5997|官网【中国】有限公司

PostgreSQL中真空命令的使用说明
  • 作者:admin
  • 发表时间:2021-04-26 07:51
  • 来源:未知

每当PostgreSQL数据库中的表中的一行被更新或删除时,就会留下一个死行。真空将移除它们,以便空间可以重复使用。如果一个表不清空,就会变得臃肿,浪费磁盘空间,降低顺序表扫描速度,将索引扫描速度降低到更小的程度。

真空命令只能删除这些不再需要的行版本(也称为元组)。如果已删除事务的事务标识(存储在xmax系统列中)比PostgreSQL数据库(或整个集群共享表)中仍然活动的最早事务(xmin边界)旧,则不再需要该元组。

PostgreSQL集群中的xmin边界可以通过注意以下三种情况来抑制

1.查找长期运行的事务

我们可以找到长时间运行的事务,然后使用pg _ terminate _后端()函数来终止阻止VALUE命令的数据库会话。

2.找到复印位置

复制槽是一种数据结构,它防止PostgreSQL服务器丢弃备用服务器仍然需要的信息。如果复制延迟或备用服务器关闭,复制插槽将阻止真空命令删除旧行。

复制插槽提供了一种自动化的方法来确保主服务器不会删除WAL块,直到它们被所有从服务器接收到。此外,即使从属服务器断开连接,主服务器也不会删除可能导致恢复冲突的行。

复制插槽仅保留已知的所需数量的WAL块,不超过所需数量。

使用复制插槽可以避免这个问题:当从属服务器没有连接时,在任何时间段都不会提供保护。

我们可以使用pg_drop_replication_slot()函数来丢弃不必要的复制槽。

只有在热备份反馈参数设置为开时,物理复制才会出现这种情况。如果是逻辑副本,也会有类似的危险,但受影响的只是系统目录。

3.查找准备好的交易

两阶段提交协议是一种原子确认协议。它是一种分布式算法,用于协调分布式原子事务中涉及的所有进程,并确定是提交还是终止(回滚)事务。

唐山网站设计

在两阶段提交的过程中,分布式事务首先使用PRESENT TRANSACTION为两阶段提交准备当前事务。如果PREPARE TRANSACTION命令由于任何原因失败,它将变成ROLLBACK,并且当前事务将被取消。

然后,我们使用COMMIT PREPARED来提交为两阶段提交做好准备的事务。

一旦事务准备就绪,它将保持“徘徊”状态,直到被提交或中止。通常情况下,事务不会长时间保持就绪状态,但有时会出现错误,因此必须由管理员手动删除事务。

我们还可以使用ROLLBACK PREPARED来取消为两阶段提交准备的事务。

补充:postgresql真空操作

在PostgreSQL数据库管理中,定期抽真空是一项重要的工作。

真空的影响

1.1释放并重新使用更新/删除行占用的磁盘空间。

1.2更新POSTGRESQL查询计划中使用的统计数据

Baidu
sogou