【发布时间】:2021-01-27 07:04:43
【问题描述】:
为了压力测试,我在 PostgreSQL 中执行以下表格:
CREATE TABLE tempxx (sid numeric(10,0));
CREATE TABLE temptab(
r1 numeric(10,0),
r2 numeric(10,0),
r3 numeric(10,0),
v1 varchar(40),
v2 varchar(40));
CREATE UNIQUE INDEX stemptab ON temptab (r1 ASC,r2 ASC);
INSERT INTO tempxx VALUES (1);
那我用这个函数:
CREATE OR REPLACE FUNCTION stresstest1() RETURNS VOID
LANGUAGE plpgsql AS $$
DECLARE
S1 TIMESTAMP;
S2 TIMESTAMP;
S3 TIMESTAMP;
xm1 int;
BEGIN
UPDATE tempxx SET sid=sid+1;
S1:=CURRENT_TIMESTAMP;
FOR REC IN 1..100000 LOOP
UPDATE TEMPXX SET SID=SID+1 returning SID into xm1;
INSERT INTO TEMPTAB VALUES (xm1,REC,rec,'TEST '||REC,'TEST2 '||REC);
END LOOP;
S2:=CURRENT_TIMESTAMP;
S3:=CURRENT_TIMESTAMP;
RAISE NOTICE '%','STARTED AT '||S1||' TO '||S2||' TO '||S3||' '||(S2-S1)||' '||(S3-S1);
END
$$;
SELECT stresstest1();
大约需要 14m。我想缩短这段时间。我做了这些调整,但结果并没有改变。
ALTER SYSTEM SET shared_buffers = '1GB';
ALTER SYSTEM SET work_mem = '5242kB';
ALTER SYSTEM SET random_page_cost = '4';
如何优化查询以缩短时间?我可以优化循环中的“更新”和“插入”命令吗?
【问题讨论】:
标签: postgresql query-optimization stress-testing