Re: index scan forward vs backward = speed difference of 357X slower!

From: Rural Hunter <ruralhunter(at)gmail(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: Re: index scan forward vs backward = speed difference of 357X slower!
Date: 2012-02-08 08:01:44
Message-ID: 4F322BE8.6070701@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
what's the size of the index? is it too big to fit in
shared_buffers? maybe the firt 15 rows by asc order are in buffer
but the ones of desc order are not, while your disk IO is very slow?<br>
btw, your mem configuration of work_men is very strange. <br>
<br>
&#20110; 2012/2/8 0:49, Kevin Traster &#20889;&#36947;:
<blockquote
cite="mid:CAC7CH7GB2Yi1VqQ9hy8Yex0avGvgLfvQkHabFGfmZa1WRU3X+A(at)mail(dot)gmail(dot)com"
type="cite"><span style="border-collapse:collapse">
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">PostgreSQL 9.1.2 on
x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2
20080704 (Red Hat 4.1.2-51), 64-bit</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Dedicated DB server</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">4GB ram</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Shared_Buffers = 1 GB</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Effective_cache_size = 3GB</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Work_mem = 32GB</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Analyze done</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Queries ran multiple times, same
differences/results</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Default Statistics = 1000</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif"><br>
</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Query (5366ms) :</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="color:rgb(11,55,77);font-family:inherit;background-color:rgb(255,255,255);font-size:12px;text-align:left">explain
analyze select initcap (fullname),
initcap(issuer),upper(rsymbol), initcap(industry),
activity,to_char(shareschange,'FM9,999,999,999,999,999'),sharespchange
||+ E'\%' from changes where activity in (4,5) and mfiled
&gt;= (select max(mfiled) from changes) order by
shareschange asc limit 15&nbsp;</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="color:rgb(11,55,77);font-family:inherit;background-color:rgb(255,255,255);font-size:12px;text-align:left"><br>
</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px">Slow
Ascending explain Analyze:</p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><a
moz-do-not-send="true"
href="http://explain.depesz.com/s/zFz">http://explain.depesz.com/s/zFz</a></p>
<br class="Apple-interchange-newline">
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="color:rgb(11,55,77);font-family:inherit;background-color:rgb(255,255,255);font-size:12px;text-align:left"><br>
</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Query (15ms) :</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="color:rgb(11,55,77);font-family:inherit;background-color:rgb(255,255,255);font-size:12px;text-align:left">explain
analyze select initcap (fullname),
initcap(issuer),upper(rsymbol), initcap(industry),
activity,to_char(shareschange,'FM9,999,999,999,999,999'),sharespchange
||+ E'\%' from changes where activity in (4,5) and mfiled
&gt;= (select max(mfiled) from changes) order by
shareschange desc limit 15&nbsp;</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><br>
</p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Fast descending explain analyze:</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><a
moz-do-not-send="true"
href="http://explain.depesz.com/s/OP7">http://explain.depesz.com/s/OP7</a></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><br>
</p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="font-family:arial,sans-serif;font-size:13.2px"><br>
</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="font-family:arial,sans-serif;font-size:13.2px">The
index:&nbsp;</span><span
style="font-family:arial,sans-serif;font-size:13px">changes_shareschange
</span><span
style="background-color:rgb(255,255,255);color:rgb(11,55,77);font-family:inherit;font-size:12px;text-align:left">is
a&nbsp;</span><span
style="font-family:arial,sans-serif;font-size:13.2px">btree
index created with default ascending order</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="font-family:arial,sans-serif;font-size:13.2px"><br>
</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="font-family:arial,sans-serif;font-size:13.2px">The
query plan and estimates are exactly the same, except desc
has index scan backwards instead of index scan for
changes_shareschange.</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><span
style="font-family:arial,sans-serif;font-size:13.2px"><br>
</span></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Yet, actual runtime&nbsp;performance&nbsp;is
different by 357x slower for the ascending version instead
of descending.</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif"><br>
</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif">Why and how do I fix it?</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif"><br>
</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif"><br>
</font></p>
<p
style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px"><font
face="arial, sans-serif"><br>
</font></p>
</span>
</blockquote>
<br>
</body>
</html>

Attachment Content-Type Size
unknown_filename text/html 7.8 KB

In response to

Browse pgsql-performance by date

  From Date Subject
Next Message Rural Hunter 2012-02-08 14:36:30 Re: index scan forward vs backward = speed difference of 357X slower!
Previous Message Greg Smith 2012-02-08 03:13:24 Re: how to demonstrate the effect of direct I/O ?