DDB*_*TTE 4 postgresql index disk-space
我们有一个包含大约 7 亿个条目的单个表的数据库。我们通过在服务器上添加新条目来更新数据库,然后使用 pg_dump 将服务器传输到生产服务器:
pg_dump -c 数据库 > /tmp/database_gen
(顺便说一下,我们使用 postgres 8.4)我们使用 psql 将数据库导出到生产服务器。pg_dump 生成的文件有关于如何创建和填充表的说明。
问题出在索引创建上。Postgres 填充表,然后花费数天时间创建索引。没关系,直到 postgres 无法再创建索引,因为它没有更多的磁盘空间,因为它使用大量磁盘空间来存储临时文件以进行排序和创建索引。通常数据库需要大约 200GB,但在创建索引期间,使用的磁盘空间增加到 600GB,然后在创建后又回到 200GB。
我的问题是:我们可以分几个步骤创建索引,比如为一半的表创建索引,然后添加表的其余部分并更新索引?
有没有人有同样的问题?
谢谢
如果在加载表之前创建索引,加载数据所花费的时间将显着增加。
预加载:
create table my_table1(val integer);
create index my_index1 on my_table1(val);
insert into my_table1(val) select generate_series(1,100000) order by random();
Time: 31755.858 ms
Run Code Online (Sandbox Code Playgroud)
后负载:
create table my_table2(val integer);
insert into my_table2(val) select generate_series(1,100000) order by random();
Time: 15344.130 ms
create index my_index2 on my_table2(val);
Time: 4073.686 ms
Run Code Online (Sandbox Code Playgroud)
如果你同意,pg_restore
你可以:
--schema-only
--index
--data-only
当然,“购买更多存储空间”很可能是这里的最佳答案......