【发布时间】:2020-07-15 23:56:38
【问题描述】:
我已经安装了 postgres 12 并使用分区进行了测试(如下所示)。我的问题是,为什么在比较 5 个分区与 5 个分区和 5 个子分区时,即使表中有 1/4 亿行,插入数据也没有显着的性能提升。
我的目标是在通常超过 1/4 亿行的大表中快速导入数据,我的印象是,拥有更多分区会减小索引的大小并提高插入数据的速度。
这是测试的设置:
机器:本地电脑,16 GB 内存
Postgres 版本:12
分区测试:表 a) 5 个哈希分区和 5 个哈希子分区。表 b) 5 个哈希分区
Tablesetup(只有 5 个分区的示例)
CREATE TABLE public.only_5_partitions
(
id integer NOT NULL,
title character varying COLLATE pg_catalog."default",
project_id integer
) PARTITION BY HASH (id) ;
--代码示例中未添加所有 3 列的索引,但所有 3 列都有索引。
--分区
CREATE TABLE public.only_5_partitions_0 PARTITION OF public.only_5_partitions
FOR VALUES WITH (modulus 5, remainder 0)
PARTITION BY HASH (id);
CREATE TABLE public.only_5_partitions_1 PARTITION OF public.only_5_partitions
FOR VALUES WITH (modulus 5, remainder 1)
PARTITION BY HASH (id);
CREATE TABLE public.only_5_partitions_2 PARTITION OF public.only_5_partitions
FOR VALUES WITH (modulus 5, remainder 2)
PARTITION BY HASH (id);
CREATE TABLE public.only_5_partitions_3 PARTITION OF public.only_5_partitions
FOR VALUES WITH (modulus 5, remainder 3)
PARTITION BY HASH (id);
CREATE TABLE public.only_5_partitions_4 PARTITION OF public.only_5_partitions
FOR VALUES WITH (modulus 5, remainder 4)
PARTITION BY HASH (id);
插入的行:使用此示例代码生成的行:
INSERT INTO tableb
SELECT generate_series(1,10000000), 'someting new', generate_series(1,10000000);
从测试中可以看出,在表 A(只有 5 个分区)中插入数据或多或少与表 B 相同。在某些运行中,少量分区甚至表现更好。
在最后一次插入中,我将插入增加到 50 mio 行,以检测性能变化。
【问题讨论】:
-
不同存储系统上的不同表空间中的分区吗?
-
它们都在同一个表空间中
-
那么就没有性能提升了。