From: | Jan Strube <js(at)deriva(dot)de> |
---|---|
To: | pgsql-general(at)postgresql(dot)org <pgsql-general(at)postgresql(dot)org> |
Subject: | Performance slowing down when doing same UPDATE many times |
Date: | 2015-02-10 11:03:11 |
Message-ID: | zarafa.54d9e56f.0657.4b083e8e36b436b0@zarafa.deriva.de |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi,
we recently found a bug in one of our applications which was doing exactly the same UPDATE operation a few thousand times inside a transaction. This caused the UPDATEs to become slower and slower from some milliseconds to some seconds. We already fixed the application but I am wondering if this might be a PostgreSQL bug, too.
Here is a simple test case that performs and benchmarks 100,000 UPDATEs (benchmarking only every 10,000th to reduce output):
BEGIN;
CREATE TEMP TABLE test (id integer PRIMARY KEY, flag boolean DEFAULT false);
INSERT INTO test (id) SELECT generate_series(1, 100000);
DO $$
DECLARE
s timestamp;
e timestamp;
BEGIN
FOR i IN 1..100000 LOOP
SELECT clock_timestamp() INTO s;
UPDATE test SET flag = true WHERE id = 12345;
SELECT clock_timestamp() INTO e;
IF i%10000 = 0 THEN
RAISE NOTICE '%', e-s;
END IF;
END LOOP;
END $$;
ROLLBACK;
The output looks like this:
NOTICE: 00:00:00.000525
NOTICE: 00:00:00.000992
NOTICE: 00:00:00.001404
NOTICE: 00:00:00.001936
NOTICE: 00:00:00.002374
NOTICE: 00:00:00.002925
NOTICE: 00:00:00.003525
NOTICE: 00:00:00.004015
NOTICE: 00:00:00.00453
NOTICE: 00:00:00.004976
The problem only occurs inside a transaction and if the same dataset is updated. I´m using PostgreSQL 9.1.15.
Jan
From | Date | Subject | |
---|---|---|---|
Next Message | Novák | 2015-02-10 11:49:13 | Data corruption after restarting replica |
Previous Message | Andres Freund | 2015-02-10 08:59:04 | Re: Logical Decoding Callbacks |