Re: [PERFORM] significant slow down with various LIMIT

2010-04-22 Thread norn
 Try this:

 ALTER TABLE ALTER plugins_guide_address
   ALTER COLUMN city_id SET STATISTICS 1000;
 ANALYZE plugins_guide_address;

 Then try your query.
No luck... The same query time...

 I have one more diagnostic query to test, if the above doesn't work:

 explain analyze
 SELECT id FROM
   (
     SELECT core_object.id
       FROM core_object
       JOIN plugins_plugin_addr
         ON (core_object.id = plugins_plugin_addr.oid_id)
       JOIN plugins_guide_address
         ON (plugins_plugin_addr.address_id =
             plugins_guide_address.id)
       WHERE plugins_guide_address.city_id = 4535
   ) x
   ORDER BY id DESC
   LIMIT 4;

Limit  (cost=0.00..8.29 rows=4 width=4) (actual time=0.284..1322.792
rows=4 loops=1)
   -  Merge Join  (cost=0.00..993770.68 rows=479473 width=4) (actual
time=0.281..1322.787 rows=4 loops=1)
 Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
 -  Nested Loop  (cost=0.00..887841.46 rows=479473 width=4)
(actual time=0.194..1201.318 rows=4 loops=1)
   -  Index Scan Backward using
plugins_plugin_addr_oid_id on plugins_plugin_addr
(cost=0.00..51546.26 rows=1980627 width=8) (actual time=0.117..87.035
rows=359525 loops=1)
   -  Index Scan using plugins_guide_address_pkey on
plugins_guide_address  (cost=0.00..0.41 rows=1 width=4) (actual
time=0.003..0.003 rows=0 loops=359525)
 Index Cond: (plugins_guide_address.id =
plugins_plugin_addr.address_id)
 Filter: (plugins_guide_address.city_id = 4535)
 -  Index Scan Backward using core_object_pkey on
core_object  (cost=0.00..91309.16 rows=3450658 width=4) (actual
time=0.079..73.071 rows=359525 loops=1)
 Total runtime: 1323.065 ms
(10 rows)


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-22 Thread norn
On Apr 21, 9:52 pm, kevin.gritt...@wicourts.gov (Kevin Grittner)
wrote:
 I wrote:
  ALTER TABLE ALTER plugins_guide_address
    ALTER COLUMN city_id SET STATISTICS 1000;

 One too many ALTERs in there.  Should be:

 ALTER TABLE plugins_guide_address
   ALTER COLUMN city_id SET STATISTICS 1000;


Yeah, I noticed it and ran correctly.

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-21 Thread Kevin Grittner
I wrote:
 
 ALTER TABLE ALTER plugins_guide_address
   ALTER COLUMN city_id SET STATISTICS 1000;
 
One too many ALTERs in there.  Should be:
 
ALTER TABLE plugins_guide_address
  ALTER COLUMN city_id SET STATISTICS 1000;
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-20 Thread norn
Kevin,
thanks for your time!
Here the requested tests.

 (1) Try it without the ORDER BY clause and the LIMIT.
W/o the 'order by' it works instantly (about 1ms!)
 Limit  (cost=0.00..3.59 rows=5 width=4) (actual time=0.127..0.229
rows=5 loops=1)
   -  Nested Loop  (cost=0.00..277863.53 rows=386544 width=4) (actual
time=0.125..0.224 rows=5 loops=1)
 -  Nested Loop  (cost=0.00..91136.78 rows=386544 width=4)
(actual time=0.106..0.154 rows=5 loops=1)
   -  Index Scan using plugins_guide_address_city_id on
plugins_guide_address  (cost=0.00..41109.07 rows=27673 width=4)
(actual time=0.068..0.080 rows=5 loops=1)
 Index Cond: (city_id = 4535)
   -  Index Scan using plugins_plugin_addr_address_id on
plugins_plugin_addr  (cost=0.00..1.63 rows=14 width=8) (actual
time=0.011..0.012 rows=1 loops=5)
 Index Cond: (plugins_plugin_addr.address_id =
plugins_guide_address.id)
 -  Index Scan using core_object_pkey on core_object
(cost=0.00..0.47 rows=1 width=4) (actual time=0.011..0.012 rows=1
loops=5)
   Index Cond: (core_object.id =
plugins_plugin_addr.oid_id)
 Total runtime: 0.328 ms
(10 rows)


W/o the limit it takes 1.4 seconds, which is anyway better than...
 Sort  (cost=199651.74..200618.10 rows=386544 width=4) (actual
time=1153.167..1157.841 rows=43898 loops=1)
   Sort Key: core_object.id
   Sort Method:  quicksort  Memory: 3594kB
   -  Hash Join  (cost=81234.35..163779.93 rows=386544 width=4)
(actual time=122.050..1128.909 rows=43898 loops=1)
 Hash Cond: (core_object.id = plugins_plugin_addr.oid_id)
 -  Seq Scan on core_object  (cost=0.00..46467.07
rows=3221307 width=4) (actual time=0.011..378.677 rows=3221349
loops=1)
 -  Hash  (cost=76402.55..76402.55 rows=386544 width=4)
(actual time=121.170..121.170 rows=43898 loops=1)
   -  Nested Loop  (cost=368.81..76402.55 rows=386544
width=4) (actual time=8.645..104.842 rows=43898 loops=1)
 -  Bitmap Heap Scan on plugins_guide_address
(cost=368.81..26374.83 rows=27673 width=4) (actual time=8.599..15.590
rows=26583 loops=1)
   Recheck Cond: (city_id = 4535)
   -  Bitmap Index Scan on
plugins_guide_address_city_id  (cost=0.00..361.89 rows=27673 width=0)
(actual time=7.856..7.856 rows=26583 loops=1)
 Index Cond: (city_id = 4535)
 -  Index Scan using
plugins_plugin_addr_address_id on plugins_plugin_addr
(cost=0.00..1.63 rows=14 width=8) (actual time=0.002..0.003 rows=2
loops=26583)
   Index Cond: (plugins_plugin_addr.address_id
= plugins_guide_address.id)
 Total runtime: 1162.193 ms
(15 rows)

(2) Temporarily take that top index out of consideration
It works nice! Query takes about 0.6 seconds as expected!

explain analyze SELECT core_object.id from core_object INNER JOIN
plugins_plugin_addr ON (core_object.id =
plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
(plugins_plugin_addr.address_id = plugins_guide_address.id)
WHERE plugins_guide_address.city_id = 4535  ORDER BY
core_object.id DESC;

 Limit  (cost=112274.36..112275.66 rows=5 width=4) (actual
time=200.758..637.039 rows=5 loops=1)
   -  Merge Join  (cost=112274.36..213042.22 rows=386544 width=4)
(actual time=200.754..637.035 rows=5 loops=1)
 Merge Cond: (core_object.id = plugins_plugin_addr.oid_id)
 -  Index Scan Backward using core_object_pkey on
core_object  (cost=0.00..86916.44 rows=3221307 width=4) (actual
time=0.115..302.512 rows=1374693 loops=1)
 -  Sort  (cost=112274.36..113240.72 rows=386544 width=4)
(actual time=154.635..154.635 rows=5 loops=1)
   Sort Key: plugins_plugin_addr.oid_id
   Sort Method:  quicksort  Memory: 3594kB
   -  Nested Loop  (cost=368.81..76402.55 rows=386544
width=4) (actual time=9.522..126.206 rows=43898 loops=1)
 -  Bitmap Heap Scan on plugins_guide_address
(cost=368.81..26374.83 rows=27673 width=4) (actual time=9.367..21.311
rows=26583 loops=1)
   Recheck Cond: (city_id = 4535)
   -  Bitmap Index Scan on
plugins_guide_address_city_id  (cost=0.00..361.89 rows=27673 width=0)
(actual time=8.577..8.577 rows=26583 loops=1)
 Index Cond: (city_id = 4535)
 -  Index Scan using
plugins_plugin_addr_address_id on plugins_plugin_addr
(cost=0.00..1.63 rows=14 width=8) (actual time=0.002..0.003 rows=2
loops=26583)
   Index Cond: (plugins_plugin_addr.address_id
= plugins_guide_address.id)
 Total runtime: 637.620 ms
(15 rows)


 (3) Try it like this (untested, so you may need to fix it up):
explain analyze
SELECT core_object.id
  from (SELECT id, city_id FROM plugins_guide_address
  WHERE city_id = 4535) plugins_guide_address
  JOIN plugins_plugin_addr
ON (plugins_plugin_addr.address_id
   = 

Re: [PERFORM] significant slow down with various LIMIT

2010-04-20 Thread Kevin Grittner
norn andrey.perl...@gmail.com wrote:
 
 (1) Try it without the ORDER BY clause and the LIMIT.
 W/o the 'order by' it works instantly (about 1ms!)
 
 W/o the limit it takes 1.4 seconds
 
(2) Temporarily take that top index out of consideration
 It works nice! Query takes about 0.6 seconds as expected!
 
 So, as we can see, dropping index may help, but why? What shall I
 do in my particular situation? Probably analyzing my tests help
 you giving some recommendations, I hope so! :)
 
The combination of the ORDER BY DESC and the LIMIT causes it to
think it can get the right data most quickly by scanning backwards
on the index.  It's wrong about that.  With the information from the
additional plans, it seems that this bad estimate might be why it's
not recognizing the plan which is actually four orders of magnitude
faster:
 
Index Scan using plugins_guide_address_city_id
  on plugins_guide_address
  Index Cond: (city_id = 4535)
  estimated rows=27673
  actual rows=5
 
Try this:
 
ALTER TABLE ALTER plugins_guide_address
  ALTER COLUMN city_id SET STATISTICS 1000;
ANALYZE plugins_guide_address;
 
Then try your query.
 
I have one more diagnostic query to test, if the above doesn't work:
 
explain analyze
SELECT id FROM
  (
SELECT core_object.id
  FROM core_object
  JOIN plugins_plugin_addr
ON (core_object.id = plugins_plugin_addr.oid_id)
  JOIN plugins_guide_address
ON (plugins_plugin_addr.address_id =
plugins_guide_address.id)
  WHERE plugins_guide_address.city_id = 4535
  ) x
  ORDER BY id DESC
  LIMIT 4;
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-14 Thread Kevin Grittner
Kevin Grittner kevin.gritt...@wicourts.gov wrote:
 
 (3) Try it like this (untested, so you may need to fix it up):
  
 explain analyze
 SELECT core_object.id
   from (SELECT id, city_id FROM plugins_guide_address)
plugins_guide_address
   JOIN plugins_plugin_addr
 ON (plugins_plugin_addr.address_id
= plugins_guide_address.id)
   JOIN core_object
 ON (core_object.id = plugins_plugin_addr.oid_id)
   WHERE plugins_guide_address.city_id = 4535
   ORDER BY core_object.id DESC
   LIMIT 4 -- or whatever it normally takes to cause the problem
 ;
 
Hmph.  I see I didn't take that quite where I intended.
Forget the above and try this:
 
explain analyze
SELECT core_object.id
  from (SELECT id, city_id FROM plugins_guide_address
  WHERE city_id = 4535) plugins_guide_address
  JOIN plugins_plugin_addr
ON (plugins_plugin_addr.address_id
   = plugins_guide_address.id)
  JOIN core_object
ON (core_object.id = plugins_plugin_addr.oid_id)
  ORDER BY core_object.id DESC
  LIMIT 4 -- or whatever it normally takes to cause the problem
;
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-13 Thread norn
On Apr 13, 5:28 am, kevin.gritt...@wicourts.gov (Kevin Grittner)
wrote:
 The cost settings help the optimizer make good decisions about plan
 choice.  I guess I don't have much reason to believe, at this point,
 that there is a better plan for it to choose for this query.  Do you
 think you see one?  What would that be?  (We might be able to force
 that plan and find out if you're right, which can be a valuable
 diagnostic step, even if the way it gets forced isn't a
 production-quality solution.)
I have no deep knowledge of Postgresql, so I've no idea which plan is
the best, but I am wondering why there are so big gap between two
limits and how to avoid this...

 Are you able to share the table descriptions?  (That might help us
 suggest an index or some such which might help.)
sure, here it is

# \d core_object
   Table public.core_object
  Column   |  Type   |
Modifiers
---+-
+--
 id| integer | not null default
nextval('core_object_id_seq'::regclass)
 typeid_id | integer | not
null
Indexes:
core_object_pkey PRIMARY KEY, btree
(id)
core_object_pkey_desc btree (id
DESC)
core_object_typeid_id btree
(typeid_id)
Foreign-key
constraints:
core_object_typeid_id_fkey FOREIGN KEY (typeid_id) REFERENCES
core_obj_typeset(id) DEFERRABLE INITIALLY DEFERRED
Referenced by:
TABLE plugins_plugin_addr CONSTRAINT
plugins_plugin_addr_oid_id_fkey FOREIGN KEY (oid_id) REFERENCES
core_object(id) DEFERRABLE INITIALLY
DEFERRED
...and many others, so I skipped as irrelevant

#  \d plugins_plugin_addr
 Table public.plugins_plugin_addr
Column |  Type   |Modifiers
---+-
+--
 id| integer | not null default
nextval('plugins_plugin_addr_id_seq'::regclass)
 oid_id| integer | not null
 sub_attrib_id | integer | not null
 address_id| integer | not null
Indexes:
plugins_plugin_addr_pkey PRIMARY KEY, btree (id)
plugins_plugin_addr_sub_attrib_id_key UNIQUE, btree
(sub_attrib_id)
plugins_plugin_addr_address_id btree (address_id)
plugins_plugin_addr_oid_id btree (oid_id)
Foreign-key constraints:
plugins_plugin_addr_address_id_fkey FOREIGN KEY (address_id)
REFERENCES plugins_guide_address(id) DEFERRABLE INITIALLY DEFERRED
plugins_plugin_addr_oid_id_fkey FOREIGN KEY (oid_id) REFERENCES
core_object(id) DEFERRABLE INITIALLY DEFERRED
plugins_plugin_addr_sub_attrib_id_fkey FOREIGN KEY
(sub_attrib_id) REFERENCES plugins_sub_attrib(id) DEFERRABLE INITIALLY
DEFERRED

#  \d plugins_guide_address
   Table
public.plugins_guide_address
Column|  Type  |
Modifiers
--+
+
 id   | integer| not null default
nextval('plugins_guide_address_id_seq'::regclass)
 country_id   | integer|
 region_id| integer|
 city_id  | integer|
 zip_id   | integer|
 street_id| integer|
 house| character varying(20)  |
 district_id  | integer|
 code | character varying(23)  |
 significance | smallint   |
 alias_fr | character varying(300) |
 alias_ru | character varying(300) |
 alias_en | character varying(300) |
 alias_de | character varying(300) |
 alias_it | character varying(300) |
 alias_len| smallint   |
Indexes:
plugins_guide_address_pkey PRIMARY KEY, btree (id)
plugins_guide_address_uniq UNIQUE, btree (country_id, region_id,
district_id, city_id, street_id, house)
plugins_guide_address_alias_ru btree (alias_ru)
plugins_guide_address_city_id btree (city_id)
plugins_guide_address_code btree (code)
plugins_guide_address_country_id btree (country_id)
plugins_guide_address_district_id btree (district_id)
plugins_guide_address_house btree (house)
plugins_guide_address_house_upper btree (upper(house::text))
plugins_guide_address_region_id btree (region_id)
plugins_guide_address_significance btree (significance)
plugins_guide_address_street_id btree (street_id)
plugins_guide_address_zip_id btree (zip_id)
Foreign-key constraints:
plugins_guide_address_city_id_fkey FOREIGN KEY (city_id)
REFERENCES plugins_guide_city(id) DEFERRABLE INITIALLY DEFERRED
plugins_guide_address_country_id_fkey FOREIGN KEY (country_id)
REFERENCES plugins_guide_country(id) DEFERRABLE INITIALLY DEFERRED
plugins_guide_address_district_id_fkey FOREIGN KEY (district_id)
REFERENCES plugins_guide_district(id) DEFERRABLE INITIALLY DEFERRED
plugins_guide_address_region_id_fkey FOREIGN KEY (region_id)
REFERENCES plugins_guide_region(id) DEFERRABLE INITIALLY 

Re: [PERFORM] significant slow down with various LIMIT

2010-04-13 Thread Kevin Grittner
norn andrey.perl...@gmail.com wrote:
 
 I am wondering why there are so big gap between two limits and how
 to avoid this...
 
I think we've already established that it is because of the
percentage of the table which must be scanned to get to the desired
number of rows.  The problem is exacerbated by the fact that it's a
backward scan on the index, which is slower than a forward scan --
mainly because disks spin in one direction, and the spacing of the
sectors is optimized for forward scans.
 
There are a couple things to try which will give a more complete
picture of what might work to make the run time more predictable. 
Please try these, and run EXPLAIN ANALYZE of your problem query each
way.
 
(1) Try it without the ORDER BY clause and the LIMIT.
 
(2) Temporarily take that top index out of consideration.  (Don't
worry, it'll come back when you issue the ROLLBACK -- just don't
forget the BEGIN statement.)
  
BEGIN;
DROP INDEX plugins_plugin_addr_oid_id;
explain analyze your query
ROLLBACK;
 
(3) Try it like this (untested, so you may need to fix it up):
 
explain analyze
SELECT core_object.id
  from (SELECT id, city_id FROM plugins_guide_address)
   plugins_guide_address
  JOIN plugins_plugin_addr
ON (plugins_plugin_addr.address_id
   = plugins_guide_address.id)
  JOIN core_object
ON (core_object.id = plugins_plugin_addr.oid_id)
  WHERE plugins_guide_address.city_id = 4535
  ORDER BY core_object.id DESC
  LIMIT 4 -- or whatever it normally takes to cause the problem
;
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-13 Thread Chris Bowlby
I'm also wondering if a re-clustering of the table would work based on
the index that's used.

such that:

CLUSTER core_object USING plugins_plugin_addr_oid_id;

and see if that makes any change in the differences that your seeing.

On 04/13/2010 02:24 PM, Kevin Grittner wrote:
 norn andrey.perl...@gmail.com wrote:
  
   
 I am wondering why there are so big gap between two limits and how
 to avoid this...
 
  
 I think we've already established that it is because of the
 percentage of the table which must be scanned to get to the desired
 number of rows.  The problem is exacerbated by the fact that it's a
 backward scan on the index, which is slower than a forward scan --
 mainly because disks spin in one direction, and the spacing of the
 sectors is optimized for forward scans.
  
 There are a couple things to try which will give a more complete
 picture of what might work to make the run time more predictable. 
 Please try these, and run EXPLAIN ANALYZE of your problem query each
 way.
  
 (1) Try it without the ORDER BY clause and the LIMIT.
  
 (2) Temporarily take that top index out of consideration.  (Don't
 worry, it'll come back when you issue the ROLLBACK -- just don't
 forget the BEGIN statement.)
   
 BEGIN;
 DROP INDEX plugins_plugin_addr_oid_id;
 explain analyze your query
 ROLLBACK;
  
 (3) Try it like this (untested, so you may need to fix it up):
  
 explain analyze
 SELECT core_object.id
   from (SELECT id, city_id FROM plugins_guide_address)
plugins_guide_address
   JOIN plugins_plugin_addr
 ON (plugins_plugin_addr.address_id
= plugins_guide_address.id)
   JOIN core_object
 ON (core_object.id = plugins_plugin_addr.oid_id)
   WHERE plugins_guide_address.city_id = 4535
   ORDER BY core_object.id DESC
   LIMIT 4 -- or whatever it normally takes to cause the problem
 ;
  
 -Kevin

   


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


[PERFORM] significant slow down with various LIMIT

2010-04-12 Thread Helio Campos Mello de Andrade

Andrey,

- Another idea for your problem is the one Kevin gave in the message following:

##


 SELECT * FROM t_route
   WHERE t_route.route_type_fk = 1
   limit 4;
  


This one scanned the t_route table until it found four rows that
matched.  It apparently didn't need to look at very many rows to find
the four matches, so it was fast.



 SELECT * FROM t_route
   WHERE t_route.route_type_fk =
 (SELECT id FROM t_route_type WHERE type = 2)
   limit 4;
  


This one came up with an id for a route type that didn't have any
matches in the t_route table, so it had to scan the entire t_route
table.  (Based on your next query, the subquery probably returned
NULL, so there might be room for some optimization here.)  If you had
chosen a route type with at least four matches near the  start of the
route table, this query would have completed quickly.



 SELECT * FROM t_route, t_route_type
   WHERE t_route.route_type_fk = t_route_type.id
 AND type = 2
   limit 4;
  


Since it didn't find any t_route_type row which matched, it knew
there couldn't be any output from the JOIN, so it skipped the scan of
the t_route table entirely.

-Kevin
## 



Regards

 Original Message 
From:   - Fri Apr 9 17:36:41 2010
X-Account-Key:  account3
X-UIDL: GmailId127e449663a13d39
X-Mozilla-Status:   0011
X-Mozilla-Status2:  
X-Mozilla-Keys: 
Delivered-To:   helio.cam...@gmail.com
Received: 	by 10.231.79.67 with SMTP id o3cs40933ibk; Fri, 9 Apr 2010 
13:36:16 -0700 (PDT)
Received: 	by 10.114.248.22 with SMTP id v22mr967398wah.8.1270845368202; 
Fri, 09 Apr 2010 13:36:08 -0700 (PDT)

Return-Path:pgsql-performance-owner+m38...@postgresql.org
Received: 	from maia-1.hub.org (maia-1.hub.org [200.46.208.211]) by 
mx.google.com with ESMTP id 8si1947813ywh.11.2010.04.09.13.36.07; Fri, 
09 Apr 2010 13:36:08 -0700 (PDT)
Received-SPF: 	neutral (google.com: 200.46.208.211 is neither permitted 
nor denied by best guess record for domain of 
pgsql-performance-owner+m38...@postgresql.org) client-ip=200.46.208.211;
Authentication-Results: 	mx.google.com; spf=neutral (google.com: 
200.46.208.211 is neither permitted nor denied by best guess record for 
domain of pgsql-performance-owner+m38...@postgresql.org) 
smtp.mail=pgsql-performance-owner+m38...@postgresql.org
Received: 	from postgresql.org (mail.postgresql.org [200.46.204.86]) by 
maia-1.hub.org (Postfix) with ESMTP id 54BAEAFD1B6; Fri, 9 Apr 2010 
20:36:00 + (UTC)
Received: 	from maia.hub.org (unknown [200.46.204.183]) by 
mail.postgresql.org (Postfix) with ESMTP id 2E74B633047 for 
pgsql-performance-postgresql@mail.postgresql.org; Thu, 8 Apr 2010 
22:36:17 -0300 (ADT)
Received: 	from mail.postgresql.org ([200.46.204.86]) by maia.hub.org 
(mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 
90832-06 for pgsql-performance-postgresql@mail.postgresql.org; 
Fri, 9 Apr 2010 01:36:06 + (UTC)
Received: 	from news.hub.org (news.hub.org [200.46.204.72]) by 
mail.postgresql.org (Postfix) with ESMTP id BBD50632DC3 for 
pgsql-performance@postgresql.org; Thu, 8 Apr 2010 22:36:06 -0300 (ADT)
Received: 	from news.hub.org (news.hub.org [200.46.204.72]) by 
news.hub.org (8.14.3/8.14.3) with ESMTP id o391a091050073 for 
pgsql-performance@postgresql.org; Thu, 8 Apr 2010 22:36:00 -0300 (ADT) 
(envelope-from n...@news.hub.org)
Received: 	(from n...@localhost) by news.hub.org (8.14.3/8.14.3/Submit) 
id o391DTvp041710 for pgsql-performance@postgresql.org; Thu, 8 Apr 2010 
22:13:29 -0300 (ADT) (envelope-from news)

From:   norn andrey.perl...@gmail.com
X-Newsgroups:   pgsql.performance
Subject:Re: [PERFORM] significant slow down with various LIMIT
Date:   Thu, 8 Apr 2010 18:13:33 -0700 (PDT)
Organization:   http://groups.google.com
Lines:  72
Message-ID: 
8ae12099-1cbb-40d5-b7fc-c15b8deba...@30g2000yqi.googlegroups.com
References: 
9587baca-c902-4215-9863-7043802ec...@10g2000yqq.googlegroups.com 
4bbdc19a022500030...@gw.wicourts.gov

Mime-Version:   1.0
Content-Type:   text/plain; charset=ISO-8859-1
Content-Transfer-Encoding:  quoted-printable
X-Complaints-To:groups-ab...@google.com
Complaints-To:  groups-ab...@google.com
Injection-Info: 	30g2000yqi.googlegroups.com; 
posting-host=94.78.201.171; 
posting-account=woDzKwoAAACEqYut1Qq-BHNhLOB-6ihP

User-Agent: G2/1.0
X-HTTP-UserAgent: 	Mozilla/5.0 (X11; U; Linux x86_64; en-US) 
AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.368.0 
Safari/533.4,gzip(gfe)

To: pgsql-performance@postgresql.org
X-Virus-Scanned:Maia Mailguard 1.0.1
X-Spam-Status: 	No, hits=-0.74 tagged_above=-10 required=5 
tests=BAYES_20=-0.74

X-Spam-Level:   
X-Mailing-List: pgsql-performance
List-Archive:   http

Re: [PERFORM] significant slow down with various LIMIT

2010-04-12 Thread Kevin Grittner
[rearranging to put related information together]
 
norn 
 
Since the LIMIT 3 and LIMIT 4 queries generated exactly the same
plan, the increased time for LIMIT 4 suggests that there are 3
matching rows which are near the end of the index it is scanning, but
the fourth one is much farther in.
 
Since what you're showing suggests that the active portion of your
data is heavily cached, you might benefit from decreasing
random_page_cost, and possibly also seq_page_cost.
 
 8GB RAM
 
 effective_cache_size = 1536MB
 
 Please also note that this hardware isn't dedicated DB server, but
 also serve as web server and file server.
 
Even with those other uses, you're likely to actually be using 6 GB
or 7 GB for cache.  I'd set effective_cache_size in that range.
 
 max_connections = 250
 work_mem = 128MB
 
While probably not related to this problem, that's a dangerous
combination.  What if all 250 connections are active with a query
which uses work_mem memory?  A single connection can actually be
using several work_mem allocations at once.
 
 2 SATA 750GB (pg db installed in software RAID 0)
 
You do realize that if either drive dies  you lose all your data on
that pair of drives, right?  I hope the value of the data and well
tested backup procedures keeps the loss to something which is
acceptable.
 
 I have about 3 million rows in core_object, 1.5 million in
 plugin_plugin_addr and 1.5 million in plugins_guide_address.
 When there were 300 000+ objects queries works perfectly, but as db
 enlarge things go worse...
 
With a relational database, it's not unusual for the most efficient
plan to depend on the quantity of data in the tables.  It is
important that your statistics are kept up-to-date so that plans can
adapt to the changing table sizes or data distributions.  The
effective_cache_size and cost parameters are also used to calculate
the costs of various plans, so adjusting those may help the optimizer
make good choices.
 
-Kevin


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-12 Thread norn
On Apr 10, 6:48 am, robertmh...@gmail.com (Robert Haas) wrote:
 On Tue, Apr 6, 2010 at 8:42 PM, norn andrey.perl...@gmail.com wrote:
  I have some mysterious slow downs with ORDER BY and LIMIT. When LIMIT
  getting greater than some value (greater than 3 in my case), query
  takes 4-5 secs instead of 0.25ms. All of the necessary indexes are in
  place. I have no idea what to do, so any advices are welcome!

  Here my queries and explain analyzes;

  First Query with LIMIT 3 (fast)
  -
  explain analyze SELECT core_object.id from core_object INNER JOIN
  plugins_plugin_addr ON (core_object.id =
  plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
  (plugins_plugin_addr.address_id = plugins_guide_address.id)
  WHERE plugins_guide_address.city_id = 4535  ORDER BY
  core_object.id DESC LIMIT 3;

   Limit  (cost=0.00..9.57 rows=3 width=4) (actual time=0.090..0.138
  rows=3 loops=1)
    -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
  time=0.088..0.136 rows=3 loops=1)
          Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
          -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
  (actual time=0.056..0.095 rows=3 loops=1)
                -  Index Scan Backward using
  plugins_plugin_addr_oid_id on plugins_plugin_addr
  (cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..0.032
  rows=3 loops=1)
                -  Index Scan using plugins_guide_address_pkey on
  plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
  time=0.017..0.018 rows=1 loops=3)
                      Index Cond: (plugins_guide_address.id =
  plugins_plugin_addr.address_id)
                      Filter: (plugins_guide_address.city_id = 4535)
          -  Index Scan using core_object_pkey_desc on core_object
  (cost=0.00..113516.08 rows=3091134 width=4) (actual time=0.026..0.028
  rows=3 loops=1)
   Total runtime: 0.244 ms
  (10 rows)

  Second Query, the same, but with LIMIT 4 (slow)
  -
  explain analyze SELECT core_object.id from core_object INNER JOIN
  plugins_plugin_addr ON (core_object.id =
  plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
  (plugins_plugin_addr.address_id = plugins_guide_address.id)
  WHERE plugins_guide_address.city_id = 4535  ORDER BY
  core_object.id DESC LIMIT 4;

   Limit  (cost=0.00..12.76 rows=4 width=4) (actual time=0.091..4436.795
  rows=4 loops=1)
    -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
  time=0.089..4436.791 rows=4 loops=1)
          Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
          -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
  (actual time=0.056..3988.249 rows=4 loops=1)
                -  Index Scan Backward using
  plugins_plugin_addr_oid_id on plugins_plugin_addr
  (cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..329.942
  rows=1244476 loops=1)
                -  Index Scan using plugins_guide_address_pkey on
  plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
  time=0.003..0.003 rows=0 loops=1244476)
                      Index Cond: (plugins_guide_address.id =
  plugins_plugin_addr.address_id)
                      Filter: (plugins_guide_address.city_id = 4535)
          -  Index Scan using core_object_pkey_desc on core_object
  (cost=0.00..113516.08 rows=3091134 width=4) (actual
  time=0.027..284.195 rows=1244479 loops=1)
   Total runtime: 4436.894 ms
  (10 rows)

 What do you get with no LIMIT at all?

 ...Robert

 --
 Sent via pgsql-performance mailing list (pgsql-performa...@postgresql.org)
 To make changes to your 
 subscription:http://www.postgresql.org/mailpref/pgsql-performance

Without using limit query takes 5-6 seconds, but I have to get only a
couple of last rows with a cost of 200-300ms

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-12 Thread norn
Kevin,
I appreciate your help very much!

 Since the LIMIT 3 and LIMIT 4 queries generated exactly the same
 plan, the increased time for LIMIT 4 suggests that there are 3
 matching rows which are near the end of the index it is scanning, but
 the fourth one is much farther in.
Yes, you are right, I checked id of the rows and found that problem
occurred when one of id is 1377077 and next one is 132604.
This table was modified with several new rows and the problem now
happens between limit 4 and 5, this is another evidence of your
rightness!

Followed by your advices I set the following:
effective_cache_size=6144MB
random_page_cost=0.25
seq_page_cost = 0.25
max_connections = 50 # thanks for pointing! I don't really need so
much

  2 SATA 750GB (pg db installed in software RAID 0)

 You do realize that if either drive dies  you lose all your data on
 that pair of drives, right?  I hope the value of the data and well
 tested backup procedures keeps the loss to something which is
 acceptable.
Thanks for attention! I have some regular backup procedures already,
so there are no extra risk related to drive failure...

I restarted Postgresql with new settings and got no performance
improvements in this particular query...
Do you have ideas how much random_page_cost and seq_page_cost should
be decreased?
Also I wish to notice, that I made REINDEX DATABASE while tried to
solve the problem by myself.. this doesn't help...


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-12 Thread Kevin Grittner
norn andrey.perl...@gmail.com wrote:
 
 I restarted Postgresql with new settings and got no performance
 improvements in this particular query...
 
The cost settings help the optimizer make good decisions about plan
choice.  I guess I don't have much reason to believe, at this point,
that there is a better plan for it to choose for this query.  Do you
think you see one?  What would that be?  (We might be able to force
that plan and find out if you're right, which can be a valuable
diagnostic step, even if the way it gets forced isn't a
production-quality solution.)
 
Are you able to share the table descriptions?  (That might help us
suggest an index or some such which might help.)
 
 Do you have ideas how much random_page_cost and seq_page_cost
 should be decreased?
 
It really depends on how much of your active data set is cached.  If
it is effectively fully cached, you might want to go to 0.01 for
both (or even lower).  Many of our databases perform best with
seq_page_cost = 1 and random_page_cost = 2.  With some, either of
those extremes causes some queries to optimize poorly, and we've
had luck with 0.3 and 0.5.  This is one worth testing with your
workload, because you can make some queries faster at the expense of
others; sometimes it comes down to which needs better response time
to keep your users happy.
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-11 Thread Helio Campos Mello de Andrade
1 ) Limit  (cost=0.00..9.57 rows=3 width=4) (actual time=*0.090..0.138* 
rows=3 loops=1)
2 ) Limit  (cost=0.00..12.76 rows=4 width=4) (actual 
time=*0.091..4436.795* rows=4 loops=1)
1 ) -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) 
(actual time=*0.088..0.136* rows=*3* loops=1)
2 ) -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) 
(actual time=*0.089..4436.791* rows=*4* loops=1)

1 ) Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
2 ) Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
1 ) -  Nested Loop  (cost=0.00..972804.02 rows=344125 
width=4) (actual time=*0.056..0.095* rows=*3* loops=1)
2 ) -  Nested Loop  (cost=0.00..972804.02 rows=344125 
width=4) (actual time=*0.056..3988.249* rows=*4* loops=1)


###
1 ) -  Index Scan Backward using 
plugins_plugin_addr_oid_id on plugins_plugin_addr (cost=0.00..52043.06 
rows=1621103 width=8) (actual time=_*0.027..0.032*_ rows=*3* loops=1)
2 ) -  Index Scan Backward using 
plugins_plugin_addr_oid_id on plugins_plugin_addr (cost=0.00..52043.06 
rows=1621103 width=8) (actual time=_*0.027..329.942*_ rows=*1244476* 
loops=1)


1 ) -  Index Scan using plugins_guide_address_pkey 
on plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual 
time=_*0.017..0.018*_ rows=*1* loops=*3*)
2 ) -  Index Scan using plugins_guide_address_pkey 
on plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual 
time=_*0.003..0.003*_ rows=*0* loops=*1244476*)

###
- I am not an expert in the matter but in the first query it took only 
3 loops to find 1 row and in the second it looped 1244476 times to find 
no row at all. Is it possible that there is no other row in the table 
that match the data you are trying to retrieve?
- Have you tried to recreate the index of the table? It could be that 
its damaged in some way that postgres can not use the index and its 
making a full search in the table. Again, it's just a wild guess.


1 ) Index Cond: (plugins_guide_address.id = 
plugins_plugin_addr.address_id)
2 ) Index Cond: (plugins_guide_address.id = 
plugins_plugin_addr.address_id)
1 ) Filter: (plugins_guide_address.city_id = 
4535)
2 ) Filter: (plugins_guide_address.city_id = 
4535)
1 ) -  Index Scan using core_object_pkey_desc on 
core_object (cost=0.00..113516.08 rows=3091134 width=4) (actual 
time=*0.026..0.028* rows=*3* loops=1)
2 ) -  Index Scan using core_object_pkey_desc on 
core_object (cost=0.00..113516.08 rows=3091134 width=4) (actual 
time=*0.027..284.195* rows=*1244479* loops=1)

1 ) Total runtime: 0.244 ms
2 ) Total runtime: 4436.894 ms

Regards...

--
Helio Campos Mello de Andrade



Re: [PERFORM] significant slow down with various LIMIT

2010-04-09 Thread norn
Kevin, thanks for your attention!
I've read SlowQueryQuestions, but anyway can't find bottleneck...

Here requested information:
OS: Ubuntu 9.10 64bit, Postgresql 8.4.2 with Postgis
Hardware: AMD Phenom(tm) II X4 945, 8GB RAM, 2 SATA 750GB (pg db
installed in software RAID 0)
Please also note that this hardware isn't dedicated DB server, but
also serve as web server and file server.

I have about 3 million rows in core_object, 1.5 million in
plugin_plugin_addr and 1.5 million in plugins_guide_address.
When there were 300 000+ objects queries works perfectly, but as db
enlarge things go worse...

# select version();
PostgreSQL 8.4.2 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.4.real
(Ubuntu 4.4.1-4ubuntu8) 4.4.1, 64-bit
---postgresql.conf---
data_directory = '/mnt/fast/postgresql/8.4/main'
hba_file = '/etc/postgresql/8.4/main/pg_hba.conf'
ident_file = '/etc/postgresql/8.4/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/8.4-main.pid'
listen_addresses = 'localhost'
port = 5432
max_connections = 250
unix_socket_directory = '/var/run/postgresql'
ssl = true
shared_buffers = 1024MB
temp_buffers = 16MB
work_mem = 128MB
maintenance_work_mem = 512MB
fsync = off
wal_buffers = 4MB
checkpoint_segments = 16
effective_cache_size = 1536MB
log_min_duration_statement = 8000
log_line_prefix = '%t '
datestyle = 'iso, mdy'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
standard_conforming_strings = on
escape_string_warning = off
constraint_exclusion = on
checkpoint_completion_target = 0.9
---end postgresql.conf---

I hope this help!
Any ideas are appreciated!


On Apr 9, 12:44 am, kevin.gritt...@wicourts.gov (Kevin Grittner)
wrote:

 Could you show us the output from select version();, describe your
 hardware and OS, and show us the contents of your postgresql.conf
 file (with all comments removed)?  We can then give more concrete
 advice than is possible with the information provided so far.

 http://wiki.postgresql.org/wiki/SlowQueryQuestions

 -Kevin

 --
 Sent via pgsql-performance mailing list (pgsql-performa...@postgresql.org)
 To make changes to your 
 subscription:http://www.postgresql.org/mailpref/pgsql-performance


-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-09 Thread Robert Haas
On Tue, Apr 6, 2010 at 8:42 PM, norn andrey.perl...@gmail.com wrote:
 I have some mysterious slow downs with ORDER BY and LIMIT. When LIMIT
 getting greater than some value (greater than 3 in my case), query
 takes 4-5 secs instead of 0.25ms. All of the necessary indexes are in
 place. I have no idea what to do, so any advices are welcome!

 Here my queries and explain analyzes;

 First Query with LIMIT 3 (fast)
 -
 explain analyze SELECT core_object.id from core_object INNER JOIN
 plugins_plugin_addr ON (core_object.id =
 plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
 (plugins_plugin_addr.address_id = plugins_guide_address.id)
 WHERE plugins_guide_address.city_id = 4535  ORDER BY
 core_object.id DESC LIMIT 3;

  Limit  (cost=0.00..9.57 rows=3 width=4) (actual time=0.090..0.138
 rows=3 loops=1)
   -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
 time=0.088..0.136 rows=3 loops=1)
         Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
         -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
 (actual time=0.056..0.095 rows=3 loops=1)
               -  Index Scan Backward using
 plugins_plugin_addr_oid_id on plugins_plugin_addr
 (cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..0.032
 rows=3 loops=1)
               -  Index Scan using plugins_guide_address_pkey on
 plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
 time=0.017..0.018 rows=1 loops=3)
                     Index Cond: (plugins_guide_address.id =
 plugins_plugin_addr.address_id)
                     Filter: (plugins_guide_address.city_id = 4535)
         -  Index Scan using core_object_pkey_desc on core_object
 (cost=0.00..113516.08 rows=3091134 width=4) (actual time=0.026..0.028
 rows=3 loops=1)
  Total runtime: 0.244 ms
 (10 rows)

 Second Query, the same, but with LIMIT 4 (slow)
 -
 explain analyze SELECT core_object.id from core_object INNER JOIN
 plugins_plugin_addr ON (core_object.id =
 plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
 (plugins_plugin_addr.address_id = plugins_guide_address.id)
 WHERE plugins_guide_address.city_id = 4535  ORDER BY
 core_object.id DESC LIMIT 4;

  Limit  (cost=0.00..12.76 rows=4 width=4) (actual time=0.091..4436.795
 rows=4 loops=1)
   -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
 time=0.089..4436.791 rows=4 loops=1)
         Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
         -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
 (actual time=0.056..3988.249 rows=4 loops=1)
               -  Index Scan Backward using
 plugins_plugin_addr_oid_id on plugins_plugin_addr
 (cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..329.942
 rows=1244476 loops=1)
               -  Index Scan using plugins_guide_address_pkey on
 plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
 time=0.003..0.003 rows=0 loops=1244476)
                     Index Cond: (plugins_guide_address.id =
 plugins_plugin_addr.address_id)
                     Filter: (plugins_guide_address.city_id = 4535)
         -  Index Scan using core_object_pkey_desc on core_object
 (cost=0.00..113516.08 rows=3091134 width=4) (actual
 time=0.027..284.195 rows=1244479 loops=1)
  Total runtime: 4436.894 ms
 (10 rows)

What do you get with no LIMIT at all?

...Robert

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


[PERFORM] significant slow down with various LIMIT

2010-04-08 Thread norn
Hi there!

I have some mysterious slow downs with ORDER BY and LIMIT. When LIMIT
getting greater than some value (greater than 3 in my case), query
takes 4-5 secs instead of 0.25ms. All of the necessary indexes are in
place. I have no idea what to do, so any advices are welcome!

Here my queries and explain analyzes;

First Query with LIMIT 3 (fast)
-
explain analyze SELECT core_object.id from core_object INNER JOIN
plugins_plugin_addr ON (core_object.id =
plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
(plugins_plugin_addr.address_id = plugins_guide_address.id)
WHERE plugins_guide_address.city_id = 4535  ORDER BY
core_object.id DESC LIMIT 3;

 Limit  (cost=0.00..9.57 rows=3 width=4) (actual time=0.090..0.138
rows=3 loops=1)
   -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
time=0.088..0.136 rows=3 loops=1)
 Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
 -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
(actual time=0.056..0.095 rows=3 loops=1)
   -  Index Scan Backward using
plugins_plugin_addr_oid_id on plugins_plugin_addr
(cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..0.032
rows=3 loops=1)
   -  Index Scan using plugins_guide_address_pkey on
plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
time=0.017..0.018 rows=1 loops=3)
 Index Cond: (plugins_guide_address.id =
plugins_plugin_addr.address_id)
 Filter: (plugins_guide_address.city_id = 4535)
 -  Index Scan using core_object_pkey_desc on core_object
(cost=0.00..113516.08 rows=3091134 width=4) (actual time=0.026..0.028
rows=3 loops=1)
 Total runtime: 0.244 ms
(10 rows)

Second Query, the same, but with LIMIT 4 (slow)
-
explain analyze SELECT core_object.id from core_object INNER JOIN
plugins_plugin_addr ON (core_object.id =
plugins_plugin_addr.oid_id) INNER JOIN plugins_guide_address ON
(plugins_plugin_addr.address_id = plugins_guide_address.id)
WHERE plugins_guide_address.city_id = 4535  ORDER BY
core_object.id DESC LIMIT 4;

 Limit  (cost=0.00..12.76 rows=4 width=4) (actual time=0.091..4436.795
rows=4 loops=1)
   -  Merge Join  (cost=0.00..1098182.56 rows=344125 width=4) (actual
time=0.089..4436.791 rows=4 loops=1)
 Merge Cond: (plugins_plugin_addr.oid_id = core_object.id)
 -  Nested Loop  (cost=0.00..972804.02 rows=344125 width=4)
(actual time=0.056..3988.249 rows=4 loops=1)
   -  Index Scan Backward using
plugins_plugin_addr_oid_id on plugins_plugin_addr
(cost=0.00..52043.06 rows=1621103 width=8) (actual time=0.027..329.942
rows=1244476 loops=1)
   -  Index Scan using plugins_guide_address_pkey on
plugins_guide_address  (cost=0.00..0.56 rows=1 width=4) (actual
time=0.003..0.003 rows=0 loops=1244476)
 Index Cond: (plugins_guide_address.id =
plugins_plugin_addr.address_id)
 Filter: (plugins_guide_address.city_id = 4535)
 -  Index Scan using core_object_pkey_desc on core_object
(cost=0.00..113516.08 rows=3091134 width=4) (actual
time=0.027..284.195 rows=1244479 loops=1)
 Total runtime: 4436.894 ms
(10 rows)

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance


Re: [PERFORM] significant slow down with various LIMIT

2010-04-08 Thread Kevin Grittner
norn andrey.perl...@gmail.com wrote:
 
 I have some mysterious slow downs with ORDER BY and LIMIT. When
 LIMIT getting greater than some value (greater than 3 in my case),
 query takes 4-5 secs instead of 0.25ms. All of the necessary
 indexes are in place. I have no idea what to do, so any advices
 are welcome!
 
Could you show us the output from select version();, describe your
hardware and OS, and show us the contents of your postgresql.conf
file (with all comments removed)?  We can then give more concrete
advice than is possible with the information provided so far.
 
http://wiki.postgresql.org/wiki/SlowQueryQuestions
 
-Kevin

-- 
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance