标签: index-bloat

UUID V1 和 V4 在顺序插入和删除后显着膨胀。与串行和时间 BTree(不会膨胀)相比,为什么会这样?

我试图了解在大量插入和删除后删除对表和索引膨胀的影响。插入和删除遵循相当严格的模式:首先,记录按顺序插入,在下一个时间段(通常为五年)内很少(或几乎从不)更新,一旦超过此阈值(五年)就删除。这是许多企业软件系统中的典型场景,出于合规性原因需要保留记录。

数据库 (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)

index postgresql-9.6 index-bloat

6
推荐指数
1
解决办法
336
查看次数

标签 统计

index ×1

index-bloat ×1

postgresql-9.6 ×1