我试图了解在大量插入和删除后删除对表和索引膨胀的影响。插入和删除遵循相当严格的模式:首先,记录按顺序插入,在下一个时间段(通常为五年)内很少(或几乎从不)更新,一旦超过此阈值(五年)就删除。这是许多企业软件系统中的典型场景,出于合规性原因需要保留记录。
数据库 (PostgreSQL 9.6.5) 以非常标准的配置运行(增加了一些参数以进行快速查询和维护处理)。
我正在尝试模拟和分析表和(典型)索引的膨胀。在概念层面上,(1)创建一个表,(2)分析它(3)插入记录(4)再次分析它,(5)删除一半的记录(6)分析它(7)再次分析它,( 8) 再次插入已删除记录的数量 (9) 分析它并 (10) 再次分析它和 (11) 检查索引和表是否膨胀。
完整的SQL代码如下:
set LC_MESSAGES ='C'
create extension "uuid-ossp"
drop table v1;
create table v1 (
id serial primary key,
id_uuid_v1 uuid default uuid_generate_v1(),
id_uuid_v4 uuid default uuid_generate_v4(),
t timestamp with time zone default clock_timestamp(),
name varchar
);
create index ix_v1_uuid on v1 (id_uuid_v1);
create index ix_v4_uuid on v1 (id_uuid_v4);
create index ix_v1_t on v1 (t);
vacuum (verbose, analyze, freeze) v1;
select pg_size_pretty(pg_relation_size('v1')), count(*)
from v1;
-- emtpy …
Run Code Online (Sandbox Code Playgroud)