X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id CA957DBC0C for ; Thu, 24 Nov 2005 10:36:06 -0400 (AST) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 45293-03 for ; Thu, 24 Nov 2005 14:36:09 +0000 (GMT) X-Greylist: delayed 01:29:13.338951 by SQLgrey- Received: from hotmail.com (bay101-f39.bay101.hotmail.com [64.4.56.49]) by svr1.postgresql.org (Postfix) with ESMTP id A520BDBC7A for ; Thu, 24 Nov 2005 10:36:02 -0400 (AST) Received: from mail pickup service by hotmail.com with Microsoft SMTPSVC; Thu, 24 Nov 2005 06:36:06 -0800 Message-ID: Received: from 64.4.56.200 by by101fd.bay101.hotmail.msn.com with HTTP; Thu, 24 Nov 2005 14:36:06 GMT X-Originating-IP: [84.210.10.106] X-Originating-Email: [bealach_na_bo@hotmail.com] X-Sender: bealach_na_bo@hotmail.com In-Reply-To: From: "Bealach-na Bo" To: kometen@gmail.com Cc: pgsql-performance@postgresql.org Subject: Re: Very slow queries - please help. Date: Thu, 24 Nov 2005 14:36:06 +0000 Mime-Version: 1.0 Content-Type: text/plain; format=flowed X-OriginalArrivalTime: 24 Nov 2005 14:36:06.0791 (UTC) FILETIME=[67768170:01C5F104] X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=1.439 required=5 tests=[AWL=-0.480, DNS_FROM_RFC_ABUSE=0.479, DNS_FROM_RFC_POST=1.44, MSGID_FROM_MTA_HEADER=0] X-Spam-Score: 1.439 X-Spam-Level: * X-Archive-Number: 200511/494 X-Sequence-Number: 15751 Hi, Thanks for your comments. I've explicitly made any indexes, but the default ones are: user@10.0.0.2.dbdev=> \di List of relations Schema | Name | Type | Owner | Table ---------+-----------------+-------+---------+--------- user | job_log_id_pkey | index | user | job_log user | node_id_pkey | index | user | node user | node_name_key | index | user | node (3 rows) I'm also sending the EXPLAIN outputs. explain SELECT n.name,n.type, n.usage, j.status, j.job_start,j.job_stop, j.nfiles_in_job,j.job_name FROM job_log j INNER JOIN node n ON j.node_id = n.node_id WHERE n.name LIKE '56x%' AND n.type = 'K' AND n.usage = 'LIVE' AND j.job_name = 'COPY FILES' AND j.job_start >= '2005-11-14 00:00:00' AND (j.job_stop <= '2005-11-14 05:00:00' OR j.job_stop IS NULL) ORDER BY n.name; QUERY PLAN -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Nested Loop (cost=0.00..75753.31 rows=1 width=461) Join Filter: ("inner".node_id = "outer".node_id) -> Index Scan using node_name_key on node n (cost=0.00..307.75 rows=1 width=181) Filter: ((name ~~ '56x%'::text) AND ("type" = 'K'::bpchar) AND ("usage" = 'LIVE'::bpchar)) -> Seq Scan on job_log j (cost=0.00..75445.54 rows=1 width=288) Filter: ((job_name = 'COPY FILES'::bpchar) AND (job_start >= '2005-11-14 00:00:00'::timestamp without time zone) AND ((job_stop <= '2005-11-14 05:00:00'::timestamp without time zone) OR (job_stop IS NULL))) (6 rows) explain SELECT n.name, n.type, n.usage FROM node n WHERE n.name LIKE '56x%' AND n.type = 'K' AND n.usage = 'LIVE' AND n.node_id NOT IN (SELECT n.node_id FROM job_log j INNER JOIN node n ON j.node_id = n.node_id WHERE n.name LIKE '56x%' AND n.type = 'K' AND n.usage = 'LIVE' AND j.job_name = 'COPY FILES' AND j.job_start >= '2005-11-14 00:00:00' AND (j.job_stop <= '2005-11-14 05:00:00' OR j.job_stop IS NULL)) ORDER BY n.name; QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Index Scan using node_name_key on node n (cost=75451.55..75764.94 rows=1 width=177) Filter: ((name ~~ '56x%'::text) AND ("type" = 'K'::bpchar) AND ("usage" = 'LIVE'::bpchar) AND (NOT (hashed subplan))) SubPlan -> Nested Loop (cost=0.00..75451.54 rows=1 width=4) -> Seq Scan on job_log j (cost=0.00..75445.54 rows=1 width=4) Filter: ((job_name = 'COPY FILES'::bpchar) AND (job_start >= '2005-11-14 00:00:00'::timestamp without time zone) AND ((job_stop <= '2005-11-14 05:00:00'::timestamp without time zone) OR (job_stop IS NULL))) -> Index Scan using node_id_pkey on node n (cost=0.00..5.99 rows=1 width=4) Index Cond: ("outer".node_id = n.node_id) Filter: ((name ~~ '56x%'::text) AND ("type" = 'K'::bpchar) AND ("usage" = 'LIVE'::bpchar)) Yours, Bealach >From: Claus Guttesen >To: Bealach-na Bo >CC: pgsql-performance@postgresql.org >Subject: Re: [PERFORM] Very slow queries - please help. >Date: Thu, 24 Nov 2005 14:23:38 +0100 > > > Typical query > > ------------ > > > > SELECT n.name > > FROM node n > > WHERE n.name > > LIKE '56x%' > > AND n.type='H' > > AND n.usage='TEST' > > AND n.node_id > > NOT IN > > (select n.node_id > > FROM job_log j > > INNER JOIN node n > > ON j.node_id = n.node_id > > WHERE n.name > > LIKE '56x%' > > AND n.type='H' > > AND n.usage='TEST' > > AND j.job_name = 'COPY FILES' > > AND j.job_start >= '2005-11-14 00:00:00' > > AND (j.job_stop <= '2005-11-22 09:31:10' OR j.job_stop IS NULL)) > > ORDER BY n.name > >Do you have any indexes? > >regards >Claus