Received: from localhost (unknown [200.46.204.187]) by postgresql.org (Postfix) with ESMTP id 3199A9F9DA6 for ; Wed, 3 Oct 2007 04:01:00 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.187]) (amavisd-maia, port 10024) with ESMTP id 38546-04 for ; Wed, 3 Oct 2007 04:00:52 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.5 Received: from nz-out-0506.google.com (nz-out-0506.google.com [64.233.162.226]) by postgresql.org (Postfix) with ESMTP id 5CE029F9D8C for ; Wed, 3 Oct 2007 04:00:54 -0300 (ADT) Received: by nz-out-0506.google.com with SMTP id l8so2836868nzf for ; Wed, 03 Oct 2007 00:00:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:mime-version:content-type:content-transfer-encoding:content-disposition; bh=Hekr7qudzNubxR4+KkAFnGFrzITnumk8SphrRbzXF4U=; b=dHN72r5LmoAEbourVIoXCewz5WvObxge4glGdokKxXMwKd0ZpLPT5vIDMl+sZPC3HXkIM1P6nNxHhCCYlic3Hqz+boFsQj+Mh4wOm3Wn9tQYiM3i6AMNo9QXPFW/fN95Z3aNfpdUZz3r9G21j00Cde6d+FQwLC2lCeLZLyn4iTM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:mime-version:content-type:content-transfer-encoding:content-disposition; b=jm5+Vkw7tUKvGApUJHlwahM880QouLDxvoa18PfTqaqbwsjoBUSWlGZsuMmt0Vr7fK8tOtBlqlWDZCH6e+im0dPeYgtfWm7ep5/PI0yEuZw045HXk4E6ffb0Wdd0d+NtyQfIgltQshb3U8WuPnm/Yb3i23O+UK3imyf3I90xGmI= Received: by 10.142.157.15 with SMTP id f15mr871647wfe.1191394852528; Wed, 03 Oct 2007 00:00:52 -0700 (PDT) Received: by 10.142.140.6 with HTTP; Wed, 3 Oct 2007 00:00:52 -0700 (PDT) Message-ID: Date: Wed, 3 Oct 2007 09:00:52 +0200 From: "Giulio Cesare Solaroli" To: pgsql-performance@postgresql.org Subject: Re: Newbie question about degraded performance on delete statement. (SOLVED) Cc: "Greg Williamson" MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200710/19 X-Sequence-Number: 27041 Hello, thanks to the added info available running the explain plan through pgsl (instead of using pgAdmin) I was able to realize that an (implicitly created) trigger was the culprit of the slowdown I was suffering. Adding an index on the foreign key the trigger was monitoring solved the issue. THANKS EVERYBODY for your kind attention. Best regards, Giulio Cesare On 10/3/07, Giulio Cesare Solaroli wrote: > Hello Gregory, > > On 10/3/07, Greg Williamson wrote: > > Giulio Cesare Solaroli wrote: > > > Hello everybody, > > > > > > I have just joined the list, as I am experiencing a degradation on > > > performances on my PostgreSQL instance, and I was looking for some > > > insights on how to fix/avoid it. > > > > > > What I have observed are impossibly high time on delete statements on > > > some tables. > > > > > > The delete statement is very simple: > > > delete from table where pk = ? > > > > > > The explain query report a single index scan on the primary key index, > > > as expected. > > > > > > I have run vacuum using the pgAdmin tool, but to no avail. > > > > > > I have also dropped and recreated the indexes, again without any benefit. > > > > > Make sure you run ANALYZE on the table in question after changes to make > > sure the stats are up to date. > > I have run Analyze (always through the pgAdmin interface), and it did > not provide any benefits. > > > > > I have later created a copy of the table using the "create table > > > table_copy as select * from table" syntax. > > > > > > Matching the configuration of the original table also on the copy > > > (indexes and constraints), I was able to delete the raws from the new > > > table with regular performances, from 20 to 100 times faster than > > > deleting from the original table. > > > > > > > > As another poster indicated, this sounds like foreign constraints where > > the postmaster process has to make sure there are no child references in > > dependent tables; if you are lacking proper indexing on those tables a > > sequential scan would be involved. > > > > Posting the DDL for the table in question and anything that might refer > > to it with an FK relationship would help the list help you. > > clipperz_connection=> \d clipperz.rcrvrs > Table "clipperz.rcrvrs" > Column | Type | Modifiers > ----------------------+--------------------------+----------- > id_rcrvrs | integer | not null > id_rcr | integer | not null > id_prvrcrvrs | integer | > reference | character varying(1000) | not null > header | text | not null > data | text | not null > version | character varying(100) | not null > creation_date | timestamp with time zone | not null > access_date | timestamp with time zone | not null > update_date | timestamp with time zone | not null > previous_version_key | text | not null > Indexes: > "rcrvrs_pkey" PRIMARY KEY, btree (id_rcrvrs) > "unique_rcrvrs_referecnce" UNIQUE, btree (id_rcr, reference) > Foreign-key constraints: > "rcrvrs_id_prvrcrvrs_fkey" FOREIGN KEY (id_prvrcrvrs) REFERENCES > rcrvrs(id_rcrvrs) > "rcrvrs_id_rcr_fkey" FOREIGN KEY (id_rcr) REFERENCES rcr(id_rcr) > DEFERRABLE INITIALLY DEFERRED > > Is this a complete listing of all the DDL involved in defining the > table, or is there something possibly missing here? > > > > > Try running the query with EXPLAIN ANALYZE ... to see what the planner > > says. Put this in a transaction and roll it back if you want to leave > > the data unchanged, e.g. > > BEGIN; > > EXPLAIN ANALYZE DELETE FROM foo WHERE pk = 1234; -- or whatever values > > you'd be using > > ROLLBACK; > > I have already tried the explain plan, but only using the pgAdmin > interface; running it from psql shows some more data that looks very > promising: > > -------------------------------------------------------------------------------------------------------------------- > Index Scan using rcrvrs_pkey on rcrvrs (cost=0.00..3.68 rows=1 > width=6) (actual time=2.643..2.643 rows=1 loops=1) > Index Cond: (id_rcrvrs = 15434) > Trigger for constraint rcrvrs_id_prvrcrvrs_fkey: time=875.992 calls=1 > Total runtime: 878.641 ms > (4 rows) > > The trigger stuff was not shown on the pgAdmin interface. > > I will try to add an index on the foreign key field (id_prvrcrvrs) to > see if this improves performances of the incriminated query. > > Thanks for the kind attention. > > Best regards, > > > Giulio Cesare >