插入性能-Oracle vs Postgres

时间:2018-08-24 21:47:07

标签: oracle postgresql performance-testing database-performance

我发现了这种情况;在Oracle中,我有此表:

CREATE TABLE "MYSCHEMA"."MYTABLE" 
(   
"COL1" NUMBER, 
"COL2" DATE, 
"COL3" VARCHAR2(20 BYTE), 
"COL4" NUMBER, 
....
"COL34" VARCHAR2(2 BYTE)
);
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX3" ON "MYSCHEMA"."MYTABLE" ("COL4") 
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX4" ON "MYSCHEMA"."MYTABLE" ("COL10") 
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX5" ON "MYSCHEMA"."MYTABLE" ("COL1") 
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX6" ON "MYSCHEMA"."MYTABLE" ("COL20") 
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX1" ON "MYSCHEMA"."MYTABLE" ("COL3") 
CREATE INDEX "MYSCHEMA"."MYTABLE_INDEX2" ON "MYSCHEMA"."MYTABLE" ("COL5") 

CREATE TABLE MYSCHEMA.MYTABLE_AUX AS (SELECT * FROM MYSCHEMA.MYTABLE);

我为postgres复制了同一张表;如您所见,mytable_aux没有索引。

在oracle中,此查询需要157秒:

--table mytable count=0 rows
--table mytable_aux=8.289.678 rows
insert into MYSCHEMA.MYTABLE(select * from MYSCHEMA.MYTABLE_AUX); --175 seg

在postgres中,记录更少,花费的时间超过10分钟

--table mytable count=0 rows
--table mytable_aux=3.557.365 rows
insert into myschema.mytable (select * from myschema.mytable_aux ); --10 minutes

请放心,两个数据库引擎中的表是等效的,并且它们管理相同的记录。有什么我想念的吗?如何提高postgres的性能?

2 个答案:

答案 0 :(得分:0)

提供以上所有注释均正确,并且应使用PostgreSQL dba分析问题,可以尝试在会话级别调整work_mem参数:

SET work_mem to '1MB';

INSERT INTO myschema.mytable SELECT * FROM myschema.mytable_aux;

SET work_mem to '10MB';

INSERT INTO myschema.mytable SELECT * FROM myschema.mytable_aux;

如果可行,您也可以尝试禁用/启用表记录! 如果可行,您也可以尝试使用附加提示插入行! 目前尚不清楚您使用的是哪种PostgreSQL。

答案 1 :(得分:0)

我将检查每个服务器使用的磁盘类型-如果在AWS上,EBS的速度将比EFS快,在服务器中,本地SSD的速度比旋转磁盘或NFS快,等等。