Received: from maia.hub.org (maia-3.hub.org [200.46.204.243]) by mail.postgresql.org (Postfix) with ESMTP id C7A111337BBC for ; Wed, 12 Jan 2011 10:22:02 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.243]) (amavisd-maia, port 10024) with ESMTP id 79098-02 for ; Wed, 12 Jan 2011 14:21:55 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from 10610.x.rootbsd.net (10610.x.rootbsd.net [204.109.60.69]) by mail.postgresql.org (Postfix) with ESMTP id 65E711337BBB for ; Wed, 12 Jan 2011 10:21:55 -0400 (AST) Received: from [192.168.10.101] (localhost [127.0.0.1]) by 10610.x.rootbsd.net (8.14.3/8.14.3) with ESMTP id p0CENRBM053958; Wed, 12 Jan 2011 14:23:28 GMT (envelope-from gandalf@shopzeus.com) Message-ID: <4D2DB8F9.9050609@shopzeus.com> Date: Wed, 12 Jan 2011 15:21:45 +0100 From: Laszlo Nagy User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7 MIME-Version: 1.0 To: Florian Weimer CC: "pgsql-performance@postgresql.org" , Daniel Fekete Subject: Re: Slow query + why bitmap index scan?? References: <4D2D9B1E.7080302@shopzeus.com> <82y66qp7al.fsf@mid.bfk.de> In-Reply-To: <82y66qp7al.fsf@mid.bfk.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.9 tagged_above=-10 required=5 tests=BAYES_00=-1.9 X-Spam-Level: X-Archive-Number: 201101/69 X-Sequence-Number: 41856 On 2011-01-12 14:42, Florian Weimer wrote: > * Laszlo Nagy: > >> This query: >> >> select hid from product_price_history where id=35547581 >> >> Returns 759 rows in 8837 msec! How can this be that slow??? > If most records are on different heap pages, processing this query > requires many seeks. 11ms per seek is not too bad if most of them are > cache misses. How about this: select id,hdate from product_price_history where id=35547581 -- 759 rows, 8837 ms Query time average: 3 sec. Query plan: "Bitmap Heap Scan on product_price_history (cost=13.91..1871.34 rows=474 width=16)" " Recheck Cond: (id = 35547582)" " -> Bitmap Index Scan on idx_product_price_history_id_hdate (cost=0.00..13.79 rows=474 width=0)" " Index Cond: (id = 35547582)" Why still the heap scan here? All fields in the query are in the index... Wouldn't a simple index scan be faster? (This is only a theoretical question, just I'm curious.) My first idea to speed things up is to cluster this table regularly. That would convert (most of the) rows into a few pages. Few page reads -> faster query. Is it a good idea? Another question. Do you think that increasing shared_mem would make it faster? Currently we have: shared_mem = 6GB work_mem = 512MB total system memory=24GB Total database size about 30GB, but there are other programs running on the system, and many other tables. Thanks, Laszlo