在 Postgres 10 中快速生成 100 GB Postgres 关系

问题描述 投票:0回答:2

我正在尝试快速生成一个 100 GB 的 postgres 表。我需要这个关系来预热缓冲区缓存。我尝试过使用 bytea 和文本字段。这使得实际关系较小而 TOAST 表较大。棘手的部分是,由于权限问题,TOAST 表无法加载到缓存中。我想知道是否有人有快速创建这么大表的经验?

postgresql caching performance-testing database-performance
2个回答
1
投票

我不知道这是否是绝对最快的,但这应该相当不错:

create unlogged table j (x text);
alter table j alter x set storage plain ;
insert into j select repeat('a',4100) from generate_series(1,13107200);

像这样设置存储子句将禁用 TOAST、线外存储和线内压缩。使其不记录将阻止它流式传输到任何副本或 WAL 存档。将其大小设置为超过半页可确保每页仅写入一行。它仍然会消耗主服务器上的存储,但我认为托管服务没有任何办法可以解决这个问题。

您可能希望使用 COPY FREEZE 填充它以避免需要清理,但我认为您无法让它在托管服务上很好地工作。


0
投票

您可以使用

pgbench
生成虚假银行数据并指定您想要多少数据。它速度快、显示进度、可预测且有据可查。

作为示例,以下命令在我的测试中很快生成了约 62GB 的数据。

pgbench -iq -s 5000 --unlogged -I dtg -U postgres -h my_database_hostname_ip DBNAME

-s
选项是控制生成数据量的缩放因子。根据文档,1X 的比例会生成大约 100K 的数据行。通过实证测试,5000 的规模为我们提供了约 63 GB 的数据。

-I dtg
具体指定了初始化步骤,我们选择跳过真空和索引。如果您确实计划对虚假数据进行更多操作,请随意省略。就我而言,我只是想快速填充数据库以进行 IO 和带宽测试。

© www.soinside.com 2019 - 2024. All rights reserved.