Postgresql 为什么子分区不能提高postgres的插入速度性能?
我已经安装了postgres 12并使用分区进行了测试(如下所示)。我的问题是,为什么在比较5个分区与5个分区和5个子分区时,插入数据(即使表中有¼亿行)没有显著的性能提高 我的目标是在通常具有+¼亿行的大型表中快速导入数据,我的印象是,拥有更多分区将减少索引的大小并提高插入数据的速度 这是测试的设置: 机器:本地pc,16 GB ram Postgres版本:12 分区测试:表a)5个散列分区和5个散列子分区。表b)5个散列分区Postgresql 为什么子分区不能提高postgres的插入速度性能?,postgresql,postgresql-12,Postgresql,Postgresql 12,我已经安装了postgres 12并使用分区进行了测试(如下所示)。我的问题是,为什么在比较5个分区与5个分区和5个子分区时,插入数据(即使表中有¼亿行)没有显著的性能提高 我的目标是在通常具有+¼亿行的大型表中快速导入数据,我的印象是,拥有更多分区将减少索引的大小并提高插入数据的速度 这是测试的设置: 机器:本地pc,16 GB ram Postgres版本:12 分区测试:表a)5个散列分区和5个散列子分区。表b)5个散列分区 CREATE TABLE public.only_5_parti
CREATE TABLE public.only_5_partitions
(
id integer NOT NULL,
title character varying COLLATE pg_catalog."default",
project_id integer
) PARTITION BY HASH (id) ;
表设置(示例仅包含5个分区)
--代码示例中未添加所有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相同。在某些运行中,少量分区的性能甚至更好
在上一次插入中,我将插入增加到5000万行,以检测性能变化
我的印象是,拥有更多的分区将减少索引的大小并提高插入数据的速度
为什么这会更快?您似乎同时访问了所有分区。索引更小,但更多,总大小大致相同。如果一次将插入对象定位到一个分区,可能会获得一些缓存好处,但这样做并不容易(使用哈希分区也不容易做到)。分区是否位于不同存储系统的不同表空间中?它们都位于同一表空间中,则性能不会有任何提高。