首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么每次事务回滚之后,PostgreSQL中的表大小都在增加?

为什么每次事务回滚之后,PostgreSQL中的表大小都在增加?
EN

Stack Overflow用户
提问于 2017-02-11 15:39:08
回答 1查看 743关注 0票数 0

我正在PostgreSQL9.6上运行一些测试。我创造了一张桌子:

代码语言:javascript
复制
CREATE TABLE salary
(
  id serial NOT NULL,
  employee_id numeric,
  salary_amount numeric,
  CONSTRAINT salary_pkey PRIMARY KEY (id)
)

然后插入一些数据并回滚:

代码语言:javascript
复制
begin;
insert into salary (employee_id, salary_amount)
values 
(2,1000),(3,2000),(5,2000),(6,2000),(7,2000),(9,2000),(4,2000);

rollback;

回滚此事务后,薪资表的大小正在增加,但没有创建记录。

  1. 为什么每次事务回滚后空表的大小都在增加?
  2. 这会影响查询性能吗?
EN

回答 1

Stack Overflow用户

发布于 2017-02-11 15:54:03

文件变得更大,因为在回滚事务之前,记录被写入表的文件。它们对其他事务是不可见的,即使它们在文件中。

查询性能受文件中死元组的影响,因为简单地说,查询在查找活动记录时可能需要读取它们。这就是为什么PostgreSQL有一个名为“清除”的操作,该操作可以清除未使用的数据,为新记录腾出空间。

任何最近的PostgreSQL版本都会在必要时自动关闭您的表。还可以使用真空SQL命令强制执行此操作:

代码语言:javascript
复制
 VACUUM salary;

或在命令行上:

代码语言:javascript
复制
 vacuumdb -t salary database

不过,你不需要这样做,除非你有一些严肃的大规模活动在桌面上。请注意,文件通常不会变得更小,即使是在清空之后:真空不会移动记录,因此文件大小由最后一个活动记录的位置控制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42177733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档