OSDN Git Service

Remove qsort TODO.detail. All items completed.
authorBruce Momjian <bruce@momjian.us>
Thu, 19 Oct 2006 19:59:06 +0000 (19:59 +0000)
committerBruce Momjian <bruce@momjian.us>
Thu, 19 Oct 2006 19:59:06 +0000 (19:59 +0000)
doc/TODO.detail/qsort [deleted file]

diff --git a/doc/TODO.detail/qsort b/doc/TODO.detail/qsort
deleted file mode 100644 (file)
index 5dfe921..0000000
+++ /dev/null
@@ -1,2626 +0,0 @@
-From pgsql-performance-owner+M17204@postgresql.org Wed Feb 15 16:28:34 2006
-Return-path: <pgsql-performance-owner+M17204@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k1FLSV527014
-       for <pgman@candle.pha.pa.us>; Wed, 15 Feb 2006 16:28:31 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 168C967B584;
-       Wed, 15 Feb 2006 17:28:29 -0400 (AST)
-X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id BB0AB9DCB9E
-       for <pgsql-performance-postgresql.org@localhost.postgresql.org>; Wed, 15 Feb 2006 17:27:56 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 22055-07
-       for <pgsql-performance-postgresql.org@localhost.postgresql.org>;
-       Wed, 15 Feb 2006 17:27:57 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id F385E9DCB98
-       for <pgsql-performance@postgresql.org>; Wed, 15 Feb 2006 17:27:53 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k1FLRsqd019780;
-       Wed, 15 Feb 2006 16:27:54 -0500 (EST)
-To: Gary Doades <gpd@gpdnet.co.uk>
-cc: pgsql-performance@postgresql.org
-Subject: Re: [PERFORM] Strange Create Index behaviour 
-In-Reply-To: <19510.1140036968@sss.pgh.pa.us> 
-References: <43F38867.6010701@gpdnet.co.uk> <19510.1140036968@sss.pgh.pa.us>
-Comments: In-reply-to Tom Lane <tgl@sss.pgh.pa.us>
-       message dated "Wed, 15 Feb 2006 15:56:08 -0500"
-Date: Wed, 15 Feb 2006 16:27:54 -0500
-Message-ID: <19779.1140038874@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.11 required=5 tests=[AWL=0.110]
-X-Spam-Score: 0.11
-X-Mailing-List: pgsql-performance
-List-Archive: <http://archives.postgresql.org/pgsql-performance>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-performance.postgresql.org>
-List-Owner: <mailto:pgsql-performance-owner@postgresql.org>
-List-Post: <mailto:pgsql-performance@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-performance>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>
-Precedence: bulk
-Sender: pgsql-performance-owner@postgresql.org
-Status: ORr
-
-I wrote:
-> Interesting.  I tried your test script and got fairly close times
-> for all the cases on two different machines:
->      old HPUX machine: shortest 5800 msec, longest 7960 msec
->      new Fedora 4 machine: shortest 461 msec, longest 608 msec
-
-> So what this looks like to me is a corner case that FreeBSD's qsort
-> fails to handle well.
-
-I tried forcing PG to use src/port/qsort.c on the Fedora machine,
-and lo and behold:
-       new Fedora 4 machine: shortest 434 msec, longest 8530 msec
-
-So it sure looks like this script does expose a problem on BSD-derived
-qsorts.  Curiously, the case that's much the worst for me is the third
-in the script, while the shortest time is the first case, which was slow
-for Gary.  So I'd venture that the *BSD code has been tweaked somewhere
-along the way, in a manner that moves the problem around without really
-fixing it.  (Anyone want to compare the actual FreeBSD source to what
-we have?)
-
-This is pretty relevant stuff, because there was a thread recently
-advocating that we stop using the platform qsort on all platforms:
-http://archives.postgresql.org/pgsql-hackers/2005-12/msg00610.php
-
-It's really interesting to see a case where port/qsort is radically
-worse than other qsorts ... unless we figure that out and fix it,
-I think the idea of using port/qsort everywhere has just taken a
-major hit.
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-From pgsql-performance-owner+M17212@postgresql.org Wed Feb 15 18:29:07 2006
-Return-path: <pgsql-performance-owner+M17212@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k1FNT6509074
-       for <pgman@candle.pha.pa.us>; Wed, 15 Feb 2006 18:29:06 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 2BE6267B58B;
-       Wed, 15 Feb 2006 19:29:04 -0400 (AST)
-X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 7C3D49DC803;
-       Wed, 15 Feb 2006 19:28:30 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 47149-10; Wed, 15 Feb 2006 19:28:32 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id C56AD9DC843;
-       Wed, 15 Feb 2006 19:28:27 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k1FNSTkm020782;
-       Wed, 15 Feb 2006 18:28:29 -0500 (EST)
-To: Gary Doades <gpd@gpdnet.co.uk>
-cc: pgsql-performance@postgresql.org, pgsql-hackers@postgresql.org
-Subject: qsort again (was Re: [PERFORM] Strange Create Index behaviour)
-In-Reply-To: <43F39E53.1020009@gpdnet.co.uk> 
-References: <43F38867.6010701@gpdnet.co.uk> <19510.1140036968@sss.pgh.pa.us> <19779.1140038874@sss.pgh.pa.us> <43F39E53.1020009@gpdnet.co.uk>
-Comments: In-reply-to Gary Doades <gpd@gpdnet.co.uk>
-       message dated "Wed, 15 Feb 2006 21:34:11 +0000"
-Date: Wed, 15 Feb 2006 18:28:29 -0500
-Message-ID: <20781.1140046109@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.11 required=5 tests=[AWL=0.110]
-X-Spam-Score: 0.11
-X-Mailing-List: pgsql-performance
-List-Archive: <http://archives.postgresql.org/pgsql-performance>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-performance.postgresql.org>
-List-Owner: <mailto:pgsql-performance-owner@postgresql.org>
-List-Post: <mailto:pgsql-performance@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-performance>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>
-Precedence: bulk
-Sender: pgsql-performance-owner@postgresql.org
-Status: OR
-
-Gary Doades <gpd@gpdnet.co.uk> writes:
-> If I run the script again, it is not always the first case that is slow, 
-> it varies from run to run, which is why I repeated it quite a few times 
-> for the test.
-
-For some reason I hadn't immediately twigged to the fact that your test
-script is just N repetitions of the exact same structure with random data.
-So it's not so surprising that you get random variations in behavior
-with different test data sets.
-
-I did some experimentation comparing the qsort from Fedora Core 4
-(glibc-2.3.5-10.3) with our src/port/qsort.c.  For those who weren't
-following the pgsql-performance thread, the test case is just this
-repeated a lot of times:
-
-create table atest(i int4, r int4);
-insert into atest (i,r) select generate_series(1,100000), 0;
-insert into atest (i,r) select generate_series(1,100000), random()*100000;
-\timing
-create index idx on atest(r);
-\timing
-drop table atest;
-
-I did this 100 times and sorted the reported runtimes.  (Investigation
-with trace_sort = on confirms that the runtime is almost entirely spent
-in qsort() called from our performsort --- the Postgres overhead is
-about 100msec on this machine.)  Results are below.
-
-It seems clear that our qsort.c is doing a pretty awful job of picking
-qsort pivots, while glibc is mostly managing not to make that mistake.
-I haven't looked at the glibc code yet to see what they are doing
-differently.
-
-I'd say this puts a considerable damper on my enthusiasm for using our
-qsort all the time, as was recently debated in this thread:
-http://archives.postgresql.org/pgsql-hackers/2005-12/msg00610.php
-We need to fix our qsort.c before pushing ahead with that idea.
-
-                       regards, tom lane
-
-
-100 runtimes for glibc qsort, sorted ascending:
-
-Time: 459.860 ms
-Time: 460.209 ms
-Time: 460.704 ms
-Time: 461.317 ms
-Time: 461.538 ms
-Time: 461.652 ms
-Time: 461.988 ms
-Time: 462.573 ms
-Time: 462.638 ms
-Time: 462.716 ms
-Time: 462.917 ms
-Time: 463.219 ms
-Time: 463.455 ms
-Time: 463.650 ms
-Time: 463.723 ms
-Time: 463.737 ms
-Time: 463.750 ms
-Time: 463.852 ms
-Time: 463.964 ms
-Time: 463.988 ms
-Time: 464.003 ms
-Time: 464.135 ms
-Time: 464.372 ms
-Time: 464.458 ms
-Time: 464.496 ms
-Time: 464.551 ms
-Time: 464.599 ms
-Time: 464.655 ms
-Time: 464.656 ms
-Time: 464.722 ms
-Time: 464.814 ms
-Time: 464.827 ms
-Time: 464.878 ms
-Time: 464.899 ms
-Time: 464.905 ms
-Time: 464.987 ms
-Time: 465.055 ms
-Time: 465.138 ms
-Time: 465.159 ms
-Time: 465.194 ms
-Time: 465.310 ms
-Time: 465.316 ms
-Time: 465.375 ms
-Time: 465.450 ms
-Time: 465.535 ms
-Time: 465.595 ms
-Time: 465.680 ms
-Time: 465.769 ms
-Time: 465.865 ms
-Time: 465.892 ms
-Time: 465.903 ms
-Time: 466.003 ms
-Time: 466.154 ms
-Time: 466.164 ms
-Time: 466.203 ms
-Time: 466.305 ms
-Time: 466.344 ms
-Time: 466.364 ms
-Time: 466.388 ms
-Time: 466.502 ms
-Time: 466.593 ms
-Time: 466.725 ms
-Time: 466.794 ms
-Time: 466.798 ms
-Time: 466.904 ms
-Time: 466.971 ms
-Time: 466.997 ms
-Time: 467.122 ms
-Time: 467.146 ms
-Time: 467.221 ms
-Time: 467.224 ms
-Time: 467.244 ms
-Time: 467.277 ms
-Time: 467.587 ms
-Time: 468.142 ms
-Time: 468.207 ms
-Time: 468.237 ms
-Time: 468.471 ms
-Time: 468.663 ms
-Time: 468.700 ms
-Time: 469.235 ms
-Time: 469.840 ms
-Time: 470.472 ms
-Time: 471.140 ms
-Time: 472.811 ms
-Time: 472.959 ms
-Time: 474.858 ms
-Time: 477.210 ms
-Time: 479.571 ms
-Time: 479.671 ms
-Time: 482.797 ms
-Time: 488.852 ms
-Time: 514.639 ms
-Time: 529.287 ms
-Time: 612.185 ms
-Time: 660.748 ms
-Time: 742.227 ms
-Time: 866.814 ms
-Time: 1234.848 ms
-Time: 1267.398 ms
-
-
-100 runtimes for port/qsort.c, sorted ascending:
-
-Time: 418.905 ms
-Time: 420.611 ms
-Time: 420.764 ms
-Time: 420.904 ms
-Time: 421.706 ms
-Time: 422.466 ms
-Time: 422.627 ms
-Time: 423.189 ms
-Time: 423.302 ms
-Time: 425.096 ms
-Time: 425.731 ms
-Time: 425.851 ms
-Time: 427.253 ms
-Time: 430.113 ms
-Time: 432.756 ms
-Time: 432.963 ms
-Time: 440.502 ms
-Time: 440.640 ms
-Time: 450.452 ms
-Time: 458.143 ms
-Time: 459.212 ms
-Time: 467.706 ms
-Time: 468.006 ms
-Time: 468.574 ms
-Time: 470.003 ms
-Time: 472.313 ms
-Time: 483.622 ms
-Time: 492.395 ms
-Time: 509.564 ms
-Time: 531.037 ms
-Time: 533.366 ms
-Time: 535.610 ms
-Time: 575.523 ms
-Time: 582.688 ms
-Time: 593.545 ms
-Time: 647.364 ms
-Time: 660.612 ms
-Time: 677.312 ms
-Time: 680.288 ms
-Time: 697.626 ms
-Time: 833.066 ms
-Time: 834.511 ms
-Time: 851.819 ms
-Time: 920.443 ms
-Time: 926.731 ms
-Time: 954.289 ms
-Time: 1045.214 ms
-Time: 1059.200 ms
-Time: 1062.328 ms
-Time: 1136.018 ms
-Time: 1260.091 ms
-Time: 1276.883 ms
-Time: 1319.351 ms
-Time: 1438.854 ms
-Time: 1475.457 ms
-Time: 1538.211 ms
-Time: 1549.004 ms
-Time: 1744.642 ms
-Time: 1771.258 ms
-Time: 1959.530 ms
-Time: 2300.140 ms
-Time: 2589.641 ms
-Time: 2612.780 ms
-Time: 3100.024 ms
-Time: 3284.125 ms
-Time: 3379.792 ms
-Time: 3750.278 ms
-Time: 4302.278 ms
-Time: 4780.624 ms
-Time: 5000.056 ms
-Time: 5092.604 ms
-Time: 5168.722 ms
-Time: 5292.941 ms
-Time: 5895.964 ms
-Time: 7003.164 ms
-Time: 7099.449 ms
-Time: 7115.083 ms
-Time: 7384.940 ms
-Time: 8214.010 ms
-Time: 8700.771 ms
-Time: 9331.225 ms
-Time: 10503.360 ms
-Time: 12496.026 ms
-Time: 12982.474 ms
-Time: 15192.390 ms
-Time: 15392.161 ms
-Time: 15958.295 ms
-Time: 18375.693 ms
-Time: 18617.706 ms
-Time: 18927.515 ms
-Time: 19898.018 ms
-Time: 20865.979 ms
-Time: 21000.907 ms
-Time: 21297.585 ms
-Time: 21714.518 ms
-Time: 25423.235 ms
-Time: 27543.052 ms
-Time: 28314.182 ms
-Time: 29400.278 ms
-Time: 34142.534 ms
-
----------------------------(end of broadcast)---------------------------
-TIP 1: if posting/reading through Usenet, please send an appropriate
-       subscribe-nomail command to majordomo@postgresql.org so that your
-       message can get through to the mailing list cleanly
-
-From pgsql-hackers-owner+M79733@postgresql.org Wed Feb 15 20:22:07 2006
-Return-path: <pgsql-hackers-owner+M79733@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k1G1M6529533
-       for <pgman@candle.pha.pa.us>; Wed, 15 Feb 2006 20:22:06 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id E5C5467B58F;
-       Wed, 15 Feb 2006 21:22:03 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 3DAA69DCACE;
-       Wed, 15 Feb 2006 21:21:34 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 76351-01; Wed, 15 Feb 2006 21:21:36 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id 2FBB59DCA3F;
-       Wed, 15 Feb 2006 21:21:31 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k1G1LXXi021616;
-       Wed, 15 Feb 2006 20:21:33 -0500 (EST)
-To: Ron <rjpeace@earthlink.net>
-cc: pgsql-performance@postgresql.org, pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] qsort again (was Re: [PERFORM] Strange Create Index behaviour) 
-In-Reply-To: <7.0.1.0.2.20060215194635.03b55da0@earthlink.net> 
-References: <43F38867.6010701@gpdnet.co.uk> <19510.1140036968@sss.pgh.pa.us> <19779.1140038874@sss.pgh.pa.us> <43F39E53.1020009@gpdnet.co.uk> <20781.1140046109@sss.pgh.pa.us> <7.0.1.0.2.20060215194635.03b55da0@earthlink.net>
-Comments: In-reply-to Ron <rjpeace@earthlink.net>
-       message dated "Wed, 15 Feb 2006 19:57:51 -0500"
-Date: Wed, 15 Feb 2006 20:21:33 -0500
-Message-ID: <21615.1140052893@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.11 required=5 tests=[AWL=0.110]
-X-Spam-Score: 0.11
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Ron <rjpeace@earthlink.net> writes:
-> How are we choosing our pivots?
-
-See qsort.c: it looks like median of nine equally spaced inputs (ie,
-the 1/8th points of the initial input array, plus the end points),
-implemented as two rounds of median-of-three choices.  With half of the
-data inputs zero, it's not too improbable for two out of the three
-samples to be zeroes in which case I think the med3 result will be zero
---- so choosing a pivot of zero is much more probable than one would
-like, and doing so in many levels of recursion causes the problem.
-
-I think.  I'm not too sure if the code isn't just being sloppy about the
-case where many data values are equal to the pivot --- there's a special
-case there to switch to insertion sort, and maybe that's getting invoked
-too soon.  It'd be useful to get a line-level profile of the behavior of
-this code in the slow cases...
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 3: Have you checked our extensive FAQ?
-
-               http://www.postgresql.org/docs/faq
-
-From pgsql-performance-owner+M17282@postgresql.org Fri Feb 17 23:11:11 2006
-Return-path: <pgsql-performance-owner+M17282@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k1I4BA515503
-       for <pgman@candle.pha.pa.us>; Fri, 17 Feb 2006 23:11:10 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 2825F67B5F5;
-       Sat, 18 Feb 2006 00:11:07 -0400 (AST)
-X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 7BB8A9DCC4F;
-       Wed, 15 Feb 2006 21:37:57 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 79365-02; Wed, 15 Feb 2006 21:38:00 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from postal.corporate.connx.com (postal.corporate.connx.com [65.212.159.187])
-       by postgresql.org (Postfix) with ESMTP id 33BEA9DCACE;
-       Wed, 15 Feb 2006 21:37:54 -0400 (AST)
-X-MimeOLE: Produced By Microsoft Exchange V6.5
-Content-class: urn:content-classes:message
-MIME-Version: 1.0
-Content-Type: text/plain;
-       charset="us-ascii"
-Subject: Re: [HACKERS] qsort again (was Re: [PERFORM] Strange Create Index behaviour) 
-Date: Wed, 15 Feb 2006 17:37:58 -0800
-Message-ID: <D425483C2C5C9F49B5B7A41F8944154757D54C@postal.corporate.connx.com>
-Thread-Topic: [HACKERS] qsort again (was Re: [PERFORM] Strange Create Index behaviour) 
-Thread-Index: AcYyl2fPgxfNXHIRRyOEN4ZGeHtA3wAAEaNQ
-From: "Dann Corbit" <DCorbit@connx.com>
-To: "Tom Lane" <tgl@sss.pgh.pa.us>, "Ron" <rjpeace@earthlink.net>
-cc: <pgsql-performance@postgresql.org>, <pgsql-hackers@postgresql.org>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.075 required=5 tests=[AWL=0.075]
-X-Spam-Score: 0.075
-X-Mailing-List: pgsql-performance
-List-Archive: <http://archives.postgresql.org/pgsql-performance>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-performance.postgresql.org>
-List-Owner: <mailto:pgsql-performance-owner@postgresql.org>
-List-Post: <mailto:pgsql-performance@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-performance>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-performance>
-Precedence: bulk
-Sender: pgsql-performance-owner@postgresql.org
-Content-Transfer-Encoding: 8bit
-X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id k1I4BA515503
-Status: ORr
-
-
-
-> -----Original Message-----
-> From: pgsql-hackers-owner@postgresql.org [mailto:pgsql-hackers-
-> owner@postgresql.org] On Behalf Of Tom Lane
-> Sent: Wednesday, February 15, 2006 5:22 PM
-> To: Ron
-> Cc: pgsql-performance@postgresql.org; pgsql-hackers@postgresql.org
-> Subject: Re: [HACKERS] qsort again (was Re: [PERFORM] Strange Create
-Index
-> behaviour)
-> 
-> Ron <rjpeace@earthlink.net> writes:
-> > How are we choosing our pivots?
-> 
-> See qsort.c: it looks like median of nine equally spaced inputs (ie,
-> the 1/8th points of the initial input array, plus the end points),
-> implemented as two rounds of median-of-three choices.  With half of
-the
-> data inputs zero, it's not too improbable for two out of the three
-> samples to be zeroes in which case I think the med3 result will be
-zero
-> --- so choosing a pivot of zero is much more probable than one would
-> like, and doing so in many levels of recursion causes the problem.
-
-Adding some randomness to the selection of the pivot is a known
-technique to fix the oddball partitions problem.  However, Bentley and
-Sedgewick proved that every quick sort algorithm has some input set that
-makes it go quadratic (hence the recent popularity of introspective
-sort, which switches to heapsort if quadratic behavior is detected.  The
-C++ template I submitted was an example of introspective sort, but
-PostgreSQL does not use C++ so it was not helpful).
-
-> I think.  I'm not too sure if the code isn't just being sloppy about
-the
-> case where many data values are equal to the pivot --- there's a
-special
-> case there to switch to insertion sort, and maybe that's getting
-invoked
-> too soon.  
-
-Here are some cases known to make qsort go quadratic:
-1. Data already sorted
-2. Data reverse sorted
-3. Data organ-pipe sorted or ramp
-4. Almost all data of the same value
-
-There are probably other cases.  Randomizing the pivot helps some, as
-does check for in-order or reverse order partitions.
-
-Imagine if 1/3 of the partitions fall into a category that causes
-quadratic behavior (have one of the above formats and have more than
-CUTOFF elements in them).
-
-It is doubtful that the switch to insertion sort is causing any sort of
-problems.  It is only going to be invoked on tiny sets, for which it has
-a fixed cost that is probably less that qsort() function calls on sets
-of the same size.
-
->It'd be useful to get a line-level profile of the behavior of
-> this code in the slow cases...
-
-I guess that my in-order or presorted tests [which often arise when
-there are very few distinct values] may solve the bad partition
-problems.  Don't forget that the algorithm is called recursively.
-
->                      regards, tom lane
-> 
-> ---------------------------(end of
-broadcast)---------------------------
-> TIP 3: Have you checked our extensive FAQ?
-> 
->                http://www.postgresql.org/docs/faq
-
----------------------------(end of broadcast)---------------------------
-TIP 2: Don't 'kill -9' the postmaster
-
-From kleptog@svana.org Mon Dec 19 06:37:51 2005
-Return-path: <kleptog@svana.org>
-Received: from svana.org (mail@svana.org [203.20.62.76])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id jBJBboe20936
-       for <pgman@candle.pha.pa.us>; Mon, 19 Dec 2005 06:37:51 -0500 (EST)
-Received: from kleptog by svana.org with local (Exim 3.35 #1 (Debian))
-       id 1EoJKc-00045V-00; Mon, 19 Dec 2005 22:37:30 +1100
-Date: Mon, 19 Dec 2005 12:37:30 +0100
-From: Martijn van Oosterhout <kleptog@svana.org>
-To: Dann Corbit <DCorbit@connx.com>
-cc: Tom Lane <tgl@sss.pgh.pa.us>, Qingqing Zhou <zhouqq@cs.toronto.edu>,
-   Bruce Momjian <pgman@candle.pha.pa.us>,
-   Luke Lonergan <llonergan@greenplum.com>, Neil Conway <neilc@samurai.com>,
-   pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] Re: Which qsort is used
-Message-ID: <20051219113724.GD12251@svana.org>
-Reply-To: Martijn van Oosterhout <kleptog@svana.org>
-References: <D425483C2C5C9F49B5B7A41F8944154757D38D@postal.corporate.connx.com>
-MIME-Version: 1.0
-Content-Type: multipart/signed; micalg=pgp-sha1;
-       protocol="application/pgp-signature"; boundary="5gxpn/Q6ypwruk0T"
-Content-Disposition: inline
-In-Reply-To: <D425483C2C5C9F49B5B7A41F8944154757D38D@postal.corporate.connx.com>
-User-Agent: Mutt/1.3.28i
-X-PGP-Key-ID: Length=1024; ID=0x0DC67BE6
-X-PGP-Key-Fingerprint: 295F A899 A81A 156D B522  48A7 6394 F08A 0DC6 7BE6
-X-PGP-Key-URL: <http://svana.org/kleptog/0DC67BE6.pgp.asc>
-Status: OR
-
-
---5gxpn/Q6ypwruk0T
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-Content-Transfer-Encoding: quoted-printable
-
-On Fri, Dec 16, 2005 at 10:43:58PM -0800, Dann Corbit wrote:
-> I am actually quite impressed with the excellence of Bentley's sort out
-> of the box.  It's definitely the best library implementation of a sort I
-> have seen.
-
-I'm not sure whether we have a conclusion here, but I do have one
-question: is there a significant difference in the number of times the
-comparison routines are called? Comparisons in PostgreSQL are fairly
-expensive given the fmgr overhead and when comparing tuples it's even
-worse.
-
-We don't want to accedently pick a routine that saves data shuffling by
-adding extra comparisons. The stats at [1] don't say. They try to
-factor in CPU cost but they seem to use unrealistically small values. I
-would think a number around 50 (or higher) would be more
-representative.
-
-[1] http://www.cs.toronto.edu/~zhouqq/postgresql/sort/sort.html
-
-Have a nice day,
---=20
-Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
-> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
-> tool for doing 5% of the work and then sitting around waiting for someone
-> else to do the other 95% so you can sue them.
-
---5gxpn/Q6ypwruk0T
-Content-Type: application/pgp-signature
-Content-Disposition: inline
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.0.6 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-iD8DBQFDpptzIB7bNG8LQkwRAmC6AJ4qYrIm3SYnBV3BybSmm+Gl4vpEywCfRDxg
-bnIK4INRqOVFNBAKR/gDPcM=
-=92qA
------END PGP SIGNATURE-----
-
---5gxpn/Q6ypwruk0T--
-
-From mkoi-pg@aon.at Wed Dec 21 19:44:03 2005
-Return-path: <mkoi-pg@aon.at>
-Received: from email.aon.at (warsl404pip5.highway.telekom.at [195.3.96.77])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id jBM0i2e05649
-       for <pgman@candle.pha.pa.us>; Wed, 21 Dec 2005 19:44:02 -0500 (EST)
-Received: (qmail 12703 invoked from network); 22 Dec 2005 00:43:51 -0000
-Received: from m148p015.dipool.highway.telekom.at (HELO Sokrates) ([62.46.8.111])
-          (envelope-sender <mkoi-pg@aon.at>)
-          by smarthub78.highway.telekom.at (qmail-ldap-1.03) with SMTP
-          for <tgl@sss.pgh.pa.us>; 22 Dec 2005 00:43:51 -0000
-From: Manfred Koizar <mkoi-pg@aon.at>
-To: Tom Lane <tgl@sss.pgh.pa.us>
-cc: "Dann Corbit" <DCorbit@connx.com>, "Qingqing Zhou" <zhouqq@cs.toronto.edu>,
-   "Bruce Momjian" <pgman@candle.pha.pa.us>,
-   "Luke Lonergan" <llonergan@greenplum.com>,
-   "Neil Conway" <neilc@samurai.com>, pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] Re: Which qsort is used 
-Date: Thu, 22 Dec 2005 01:43:34 +0100
-Message-ID: <odqjq1tv6cb77ri4df0aehqal8o0ljtkar@4ax.com>
-References: <D425483C2C5C9F49B5B7A41F8944154757D386@postal.corporate.connx.com> <3148.1134795805@sss.pgh.pa.us>
-In-Reply-To: <3148.1134795805@sss.pgh.pa.us>
-X-Mailer: Forte Agent 3.1/32.783
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-Status: OR
-
-On Sat, 17 Dec 2005 00:03:25 -0500, Tom Lane <tgl@sss.pgh.pa.us>
-wrote:
->I've still got a problem with these checks; I think they are a net
->waste of cycles on average.  [...]
-> and when they fail, those cycles are entirely wasted;
->you have not advanced the state of the sort at all.
-
-How can we make the initial check "adavance the state of the sort"?
-One answer might be to exclude the sorted sequence at the start of the
-array from the qsort, and merge the two sorted lists as the final
-stage of the sort.
-
-Qsorting N elements costs O(N*lnN), so excluding H elements from the
-sort reduces the cost by at least O(H*lnN).  The merge step costs O(N)
-plus some (<=50%) more memory, unless someone knows a fast in-place
-merge.  So depending on the constant factors involved there might be a
-usable solution.
-
-I've been playing with some numbers and assuming the constant factors
-to be equal for all the O()'s this method starts to pay off at
-         H      for N
-         20       100
-        130      1000
-       8000    100000
-Servus
- Manfred
-
-From pgsql-hackers-owner+M77795=pgman=candle.pha.pa.us@postgresql.org Thu Dec 22 02:02:28 2005
-Return-path: <pgsql-hackers-owner+M77795=pgman=candle.pha.pa.us@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id jBM72Re16910
-       for <pgman@candle.pha.pa.us>; Thu, 22 Dec 2005 02:02:28 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id A31E067AAA0
-       for <pgman@candle.pha.pa.us>; Thu, 22 Dec 2005 03:02:22 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 2C8EC9DCA92
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 22 Dec 2005 03:01:56 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 26033-04
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 22 Dec 2005 03:01:55 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from svana.org (svana.org [203.20.62.76])
-       by postgresql.org (Postfix) with ESMTP id 800859DC81D
-       for <pgsql-hackers@postgresql.org>; Thu, 22 Dec 2005 03:01:51 -0400 (AST)
-Received: from kleptog by svana.org with local (Exim 3.35 #1 (Debian))
-       id 1EpKRg-0005ox-00; Thu, 22 Dec 2005 18:01:00 +1100
-Date: Thu, 22 Dec 2005 08:01:00 +0100
-From: Martijn van Oosterhout <kleptog@svana.org>
-To: Manfred Koizar <mkoi-pg@aon.at>
-cc: Tom Lane <tgl@sss.pgh.pa.us>, Dann Corbit <DCorbit@connx.com>,
-   Qingqing Zhou <zhouqq@cs.toronto.edu>,
-   Bruce Momjian <pgman@candle.pha.pa.us>,
-   Luke Lonergan <llonergan@greenplum.com>, Neil Conway <neilc@samurai.com>,
-   pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] Re: Which qsort is used
-Message-ID: <20051222070057.GA21783@svana.org>
-Reply-To: Martijn van Oosterhout <kleptog@svana.org>
-References: <D425483C2C5C9F49B5B7A41F8944154757D386@postal.corporate.connx.com> <3148.1134795805@sss.pgh.pa.us> <odqjq1tv6cb77ri4df0aehqal8o0ljtkar@4ax.com>
-MIME-Version: 1.0
-Content-Type: multipart/signed; micalg=pgp-sha1;
-       protocol="application/pgp-signature"; boundary="FL5UXtIhxfXey3p5"
-Content-Disposition: inline
-In-Reply-To: <odqjq1tv6cb77ri4df0aehqal8o0ljtkar@4ax.com>
-User-Agent: Mutt/1.3.28i
-X-PGP-Key-ID: Length=1024; ID=0x0DC67BE6
-X-PGP-Key-Fingerprint: 295F A899 A81A 156D B522  48A7 6394 F08A 0DC6 7BE6
-X-PGP-Key-URL: <http://svana.org/kleptog/0DC67BE6.pgp.asc>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.065 required=5 tests=[AWL=0.065]
-X-Spam-Score: 0.065
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-
---FL5UXtIhxfXey3p5
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-Content-Transfer-Encoding: quoted-printable
-
-On Thu, Dec 22, 2005 at 01:43:34AM +0100, Manfred Koizar wrote:
-> Qsorting N elements costs O(N*lnN), so excluding H elements from the
-> sort reduces the cost by at least O(H*lnN).  The merge step costs O(N)
-> plus some (<=3D50%) more memory, unless someone knows a fast in-place
-> merge.  So depending on the constant factors involved there might be a
-> usable solution.
-
-But where are you including the cost to check how many cells are
-already sorted? That would be O(H), right? This is where we come back
-to the issue that comparisons in PostgreSQL are expensive. The cpu_cost
-in the tests I saw so far is unrealistically low.
-
-> I've been playing with some numbers and assuming the constant factors
-> to be equal for all the O()'s this method starts to pay off at
->        H      for N
->        20       100      20%
->       130      1000      13%
->      8000    100000       8%
-
-Hmm, what are the chances you have 100000 unordered items to sort and
-that the first 8% will already be in order. ISTM that that probability
-will be close enough to zero to not matter...
-
-Have a nice day,
---=20
-Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
-> Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
-> tool for doing 5% of the work and then sitting around waiting for someone
-> else to do the other 95% so you can sue them.
-
---FL5UXtIhxfXey3p5
-Content-Type: application/pgp-signature
-Content-Disposition: inline
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.0.6 (GNU/Linux)
-Comment: For info see http://www.gnupg.org
-
-iD8DBQFDqk8oIB7bNG8LQkwRAjJhAJ47eXRi1DJ02cfKcnN2iPkaBB0eaQCeIiF+
-HOAYIPQrU2gpUUiGT3aGUUw=
-=R0hU
------END PGP SIGNATURE-----
-
---FL5UXtIhxfXey3p5--
-
-From pgsql-hackers-owner+M77831=pgman=candle.pha.pa.us@postgresql.org Thu Dec 22 16:59:19 2005
-Return-path: <pgsql-hackers-owner+M77831=pgman=candle.pha.pa.us@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id jBMLxJe07480
-       for <pgman@candle.pha.pa.us>; Thu, 22 Dec 2005 16:59:19 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id D1DBE67AC1B
-       for <pgman@candle.pha.pa.us>; Thu, 22 Dec 2005 17:59:16 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id BE8249DCBEB
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 22 Dec 2005 17:58:53 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 64765-01
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 22 Dec 2005 17:58:54 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from email.aon.at (warsl404pip7.highway.telekom.at [195.3.96.91])
-       by postgresql.org (Postfix) with ESMTP id 3E08E9DCA5C
-       for <pgsql-hackers@postgresql.org>; Thu, 22 Dec 2005 17:58:49 -0400 (AST)
-Received: (qmail 6986 invoked from network); 22 Dec 2005 21:58:49 -0000
-Received: from m150p015.dipool.highway.telekom.at (HELO Sokrates) ([62.46.8.175])
-          (envelope-sender <mkoi-pg@aon.at>)
-          by smarthub76.highway.telekom.at (qmail-ldap-1.03) with SMTP
-          for <kleptog@svana.org>; 22 Dec 2005 21:58:49 -0000
-From: Manfred Koizar <mkoi-pg@aon.at>
-To: Martijn van Oosterhout <kleptog@svana.org>
-cc: Tom Lane <tgl@sss.pgh.pa.us>, Dann Corbit <DCorbit@connx.com>,
-   Qingqing Zhou <zhouqq@cs.toronto.edu>,
-   Bruce Momjian <pgman@candle.pha.pa.us>,
-   Luke Lonergan <llonergan@greenplum.com>, Neil Conway <neilc@samurai.com>,
-   pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] Re: Which qsort is used
-Date: Thu, 22 Dec 2005 22:58:31 +0100
-Message-ID: <4r6mq19fe6937mu9130h45ip3oeg135qo3@4ax.com>
-References: <D425483C2C5C9F49B5B7A41F8944154757D386@postal.corporate.connx.com> <3148.1134795805@sss.pgh.pa.us> <odqjq1tv6cb77ri4df0aehqal8o0ljtkar@4ax.com> <20051222070057.GA21783@svana.org>
-In-Reply-To: <20051222070057.GA21783@svana.org>
-X-Mailer: Forte Agent 3.1/32.783
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.398 required=5 tests=[AWL=0.398]
-X-Spam-Score: 0.398
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-On Thu, 22 Dec 2005 08:01:00 +0100, Martijn van Oosterhout
-<kleptog@svana.org> wrote:
->But where are you including the cost to check how many cells are
->already sorted? That would be O(H), right?
-
-Yes.  I didn't mention it, because H < N.
-
-> This is where we come back
->to the issue that comparisons in PostgreSQL are expensive.
-
-So we agree that we should try to reduce the number of comparisons.
-How many comparisons does it take to sort 100000 items?  1.5 million?
-
->Hmm, what are the chances you have 100000 unordered items to sort and
->that the first 8% will already be in order. ISTM that that probability
->will be close enough to zero to not matter...
-
-If the items are totally unordered, the check is so cheap you won't
-even notice.  OTOH in Tom's example ...
-
-|What I think is much more probable in the Postgres environment
-|is almost-but-not-quite-ordered inputs --- eg, a table that was
-|perfectly ordered by key when filled, but some of the tuples have since
-|been moved by UPDATEs.
-
-... I'd not be surprised if H is 90% of N.
-Servus
- Manfred
-
----------------------------(end of broadcast)---------------------------
-TIP 2: Don't 'kill -9' the postmaster
-
-From DCorbit@connx.com Thu Dec 22 17:22:03 2005
-Return-path: <DCorbit@connx.com>
-Received: from postal.corporate.connx.com (postal.corporate.connx.com [65.212.159.187])
-       by candle.pha.pa.us (8.11.6/8.11.6) with SMTP id jBMMLve11671
-       for <pgman@candle.pha.pa.us>; Thu, 22 Dec 2005 17:22:03 -0500 (EST)
-Content-class: urn:content-classes:message
-MIME-Version: 1.0
-Content-Type: text/plain;
-       charset="us-ascii"
-Subject: RE: [HACKERS] Re: Which qsort is used
-X-MimeOLE: Produced By Microsoft Exchange V6.5
-Date: Thu, 22 Dec 2005 14:21:49 -0800
-Message-ID: <D425483C2C5C9F49B5B7A41F8944154757D3AC@postal.corporate.connx.com>
-Thread-Topic: [HACKERS] Re: Which qsort is used
-Thread-Index: AcYHQuXJdKs8JVgmSKywUqld6KYccQAAfWAA
-From: "Dann Corbit" <DCorbit@connx.com>
-To: "Manfred Koizar" <mkoi-pg@aon.at>,
-   "Martijn van Oosterhout" <kleptog@svana.org>
-cc: "Tom Lane" <tgl@sss.pgh.pa.us>, "Qingqing Zhou" <zhouqq@cs.toronto.edu>,
-   "Bruce Momjian" <pgman@candle.pha.pa.us>,
-   "Luke Lonergan" <llonergan@greenplum.com>,
-   "Neil Conway" <neilc@samurai.com>, <pgsql-hackers@postgresql.org>
-Content-Transfer-Encoding: 8bit
-X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id jBMMLve11671
-Status: OR
-
-An interesting article on sorting and comparison count:
-http://www.acm.org/jea/ARTICLES/Vol7Nbr5.pdf
-
-Here is the article, the code, and an implementation that I have been
-toying with:
-http://cap.connx.com/chess-engines/new-approach/algos.zip
-
-Algorithm quickheap is especially interesting because it does not
-require much additional space (just an array of integers up to size
-log(element_count) and in addition, it has very few data movements.
-
-> -----Original Message-----
-> From: Manfred Koizar [mailto:mkoi-pg@aon.at]
-> Sent: Thursday, December 22, 2005 1:59 PM
-> To: Martijn van Oosterhout
-> Cc: Tom Lane; Dann Corbit; Qingqing Zhou; Bruce Momjian; Luke
-Lonergan;
-> Neil Conway; pgsql-hackers@postgresql.org
-> Subject: Re: [HACKERS] Re: Which qsort is used
-> 
-> On Thu, 22 Dec 2005 08:01:00 +0100, Martijn van Oosterhout
-> <kleptog@svana.org> wrote:
-> >But where are you including the cost to check how many cells are
-> >already sorted? That would be O(H), right?
-> 
-> Yes.  I didn't mention it, because H < N.
-> 
-> > This is where we come back
-> >to the issue that comparisons in PostgreSQL are expensive.
-> 
-> So we agree that we should try to reduce the number of comparisons.
-> How many comparisons does it take to sort 100000 items?  1.5 million?
-> 
-> >Hmm, what are the chances you have 100000 unordered items to sort and
-> >that the first 8% will already be in order. ISTM that that
-probability
-> >will be close enough to zero to not matter...
-> 
-> If the items are totally unordered, the check is so cheap you won't
-> even notice.  OTOH in Tom's example ...
-> 
-> |What I think is much more probable in the Postgres environment
-> |is almost-but-not-quite-ordered inputs --- eg, a table that was
-> |perfectly ordered by key when filled, but some of the tuples have
-since
-> |been moved by UPDATEs.
-> 
-> ... I'd not be surprised if H is 90% of N.
-> Servus
->  Manfred
-
-From pgsql-hackers-owner@postgresql.org Mon Dec 19 13:36:58 2005
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 1E0CC9DC810
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Mon, 19 Dec 2005 13:36:58 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 89341-07
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Mon, 19 Dec 2005 13:36:52 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from mail.mi8.com (d01gw02.mi8.com [63.240.6.46])
-       by postgresql.org (Postfix) with ESMTP id 348A69DC9C2
-       for <pgsql-hackers@postgresql.org>; Mon, 19 Dec 2005 13:36:51 -0400 (AST)
-Received: from 172.16.1.25 by mail.mi8.com with ESMTP (- Welcome to Mi8
-       Corporation www.Mi8.com (D2)); Mon, 19 Dec 2005 12:36:45 -0500
-X-Server-Uuid: 7829E76E-BB9E-4995-8473-3C0929DF7DD1
-Received: from MI8NYCMAIL06.Mi8.com ([172.16.1.175]) by
-       D01HOST03.Mi8.com with Microsoft SMTPSVC(6.0.3790.1830); Mon, 19 Dec
-       2005 12:36:44 -0500
-Received: from 67.103.45.218 ([67.103.45.218]) by MI8NYCMAIL06.Mi8.com (
-       [172.16.1.219]) via Exchange Front-End Server mi8owa.mi8.com (
-       [172.16.1.106]) with Microsoft Exchange Server HTTP-DAV ; Mon, 19 Dec
-       2005 17:36:44 +0000
-User-Agent: Microsoft-Entourage/11.2.1.051004
-Date: Mon, 19 Dec 2005 09:36:44 -0800
-Subject: Re: Re: Which qsort is used
-From: "Luke Lonergan" <llonergan@greenplum.com>
-To: "Martijn van Oosterhout" <kleptog@svana.org>,
-       "Dann Corbit" <DCorbit@connx.com>
-cc: "Tom Lane" <tgl@sss.pgh.pa.us>,
-       "Qingqing Zhou" <zhouqq@cs.toronto.edu>,
-       "Bruce Momjian" <pgman@candle.pha.pa.us>,
-       "Neil Conway" <neilc@samurai.com>,
-       pgsql-hackers@postgresql.org
-Message-ID: <BFCC2FAC.16CC0%llonergan@greenplum.com>
-Thread-Topic: [HACKERS] Re: Which qsort is used
-Thread-Index: AcYEkKvEA7duDr/yQneMyWGCfNr3rQAMhuDl
-In-Reply-To: <20051219113724.GD12251@svana.org>
-MIME-Version: 1.0
-X-OriginalArrivalTime: 19 Dec 2005 17:36:44.0849 (UTC)
-       FILETIME=[C7C6AA10:01C604C2]
-X-WSS-ID: 6FB830272346940585-01-01
-Content-Type: text/plain;
-       charset=us-ascii
-Content-Transfer-Encoding: 7bit
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=1.253 required=5 tests=[AWL=0.000,
-       RCVD_NUMERIC_HELO=1.253]
-X-Spam-Score: 1.253
-X-Spam-Level: *
-X-Archive-Number: 200512/868
-X-Sequence-Number: 77716
-Status: OR
-
-Martin,
-
-On 12/19/05 3:37 AM, "Martijn van Oosterhout" <kleptog@svana.org> wrote:
-
-> I'm not sure whether we have a conclusion here, but I do have one
-> question: is there a significant difference in the number of times the
-> comparison routines are called? Comparisons in PostgreSQL are fairly
-> expensive given the fmgr overhead and when comparing tuples it's even
-> worse.
-
-It would be interesting to note the comparison count of the different
-routines.
-
-Something that really grabbed me about the results though is that the
-relative performance of the routines dramatically shifted when the indirect
-references in the comparators went in.  The first test I did sorted an array
-of int4 - these tests that Qingqing did sorted arrays using an indirect
-pointer list, at which point the same distributions performed very
-differently.
-
-I suspect that it is the number of comparisons that caused this, and further
-that the indirection has disabled the compiler optimizations for memory
-prefetch and other things that it could normally recognize.  Given the usage
-pattern in Postgres, where sorted things are a mix of strings and intrinsic
-types, I'm not sure those optimizations could be done by one routine.
-
-I haven't verified this, but it certainly seems that the NetBSD routine is
-the overall winner for the type of use that Postgres has (sorting the using
-a pointer list).
-
-- Luke
-
-
-
-From pgsql-hackers-owner+M81165@postgresql.org Thu Mar 16 18:37:28 2006
-Return-path: <pgsql-hackers-owner+M81165@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2GNbOu11277
-       for <pgman@candle.pha.pa.us>; Thu, 16 Mar 2006 18:37:25 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id A609567BADC;
-       Thu, 16 Mar 2006 19:37:21 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 8E8E19DC828
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 16 Mar 2006 19:36:50 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 31174-02
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 16 Mar 2006 19:36:52 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id 8CA419DC840
-       for <pgsql-hackers@postgresql.org>; Thu, 16 Mar 2006 19:36:46 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2GNagfd023078;
-       Thu, 16 Mar 2006 18:36:42 -0500 (EST)
-To: "Dann Corbit" <DCorbit@connx.com>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <D425483C2C5C9F49B5B7A41F8944154757D67F@postal.corporate.connx.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D67F@postal.corporate.connx.com>
-Comments: In-reply-to "Dann Corbit" <DCorbit@connx.com>
-       message dated "Thu, 16 Mar 2006 13:27:33 -0800"
-MIME-Version: 1.0
-Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
-Content-ID: <23060.1142551929.0@sss.pgh.pa.us>
-Date: Thu, 16 Mar 2006 18:36:42 -0500
-Message-ID: <23077.1142552202@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain; charset="us-ascii"
-Content-ID: <23060.1142551929.1@sss.pgh.pa.us>
-
->> So at least on randomized data, the swap_cnt thing is a serious loser.
->> Need to run some tests on special-case inputs though.  Anyone have a
->> test suite they like?
-
-> Here is a distribution maker that will create some torture tests for
-> sorting programs.
-
-I fleshed out the sort tester that Bentley & McIlroy give pseudocode for
-in their paper (attached below in case anyone wants to hack on it).  Not
-very surprisingly, it shows the unmodified B&M algorithm as
-significantly better than the BSD-lite version:
-
-Our current BSD qsort:
-distribution SAWTOOTH: max cratio 12.9259, average 0.870261 over 252 tests
-distribution RAND: max cratio 1.07917, average 0.505924 over 252 tests
-distribution STAGGER: max cratio 12.9259, average 1.03706 over 252 tests
-distribution PLATEAU: max cratio 12.9259, average 0.632514 over 252 tests
-distribution SHUFFLE: max cratio 12.9259, average 1.21631 over 252 tests
-method COPY: max cratio 3.87533, average 0.666927 over 210 tests
-method REVERSE: max cratio 5.6248, average 0.710284 over 210 tests
-method FREVERSE: max cratio 12.9259, average 1.58323 over 210 tests
-method BREVERSE: max cratio 5.72661, average 1.13674 over 210 tests
-method SORT: max cratio 0.758625, average 0.350092 over 210 tests
-method DITHER: max cratio 3.13417, average 0.667222 over 210 tests
-Overall: average cratio 0.852415 over 1260 tests
-
-without the swap_cnt code:
-distribution SAWTOOTH: max cratio 5.6248, average 0.745818 over 252 tests
-distribution RAND: max cratio 1.07917, average 0.510097 over 252 tests
-distribution STAGGER: max cratio 5.6248, average 1.0494 over 252 tests
-distribution PLATEAU: max cratio 3.57655, average 0.411549 over 252 tests
-distribution SHUFFLE: max cratio 5.72661, average 1.05988 over 252 tests
-method COPY: max cratio 3.87533, average 0.712122 over 210 tests
-method REVERSE: max cratio 5.6248, average 0.751011 over 210 tests
-method FREVERSE: max cratio 4.80869, average 0.690224 over 210 tests
-method BREVERSE: max cratio 5.72661, average 1.13673 over 210 tests
-method SORT: max cratio 0.806618, average 0.539829 over 210 tests
-method DITHER: max cratio 3.13417, average 0.702174 over 210 tests
-Overall: average cratio 0.755348 over 1260 tests
-
-("cratio" is the ratio of the actual number of comparison function calls
-to the theoretical expectation of N*lg2(N).)  The insertion sort
-switchover is a loser for both average and worst-case measurements.
-
-I tried Dann's distributions too, with N = 100000:
-
-Our current BSD qsort:
-dist fib: cratio 0.0694229
-dist camel: cratio 0.0903228
-dist constant: cratio 0.0602126
-dist five: cratio 0.132288
-dist ramp: cratio 4.29937
-dist random: cratio 1.09286
-dist reverse: cratio 0.5663
-dist sorted: cratio 0.18062
-dist ten: cratio 0.174781
-dist twenty: cratio 0.238098
-dist two: cratio 0.090365
-dist perverse: cratio 0.334503
-dist trig: cratio 0.679846
-Overall: max cratio 4.29937, average cratio 0.616076 over 13 tests
-
-without the swap_cnt code:
-dist fib: cratio 0.0694229
-dist camel: cratio 0.0903228
-dist constant: cratio 0.0602126
-dist five: cratio 0.132288
-dist ramp: cratio 4.29937
-dist random: cratio 1.09286
-dist reverse: cratio 0.89184
-dist sorted: cratio 0.884907
-dist ten: cratio 0.174781
-dist twenty: cratio 0.238098
-dist two: cratio 0.090365
-dist perverse: cratio 0.334503
-dist trig: cratio 0.679846
-Overall: max cratio 4.29937, average cratio 0.695293 over 13 tests
-
-In this set of tests the behavior is just about identical, except for
-the case of already-sorted input, where the BSD coding runs in O(N)
-instead of O(N lg2 N) time.  So that evidently is why some unknown
-person put in the special case.
-
-Some further experimentation destroys my original proposal to limit the
-size of subfile we'll use the swap_cnt code for: it turns out that that
-eliminates the BSD code's advantage for presorted input (at least for
-inputs bigger than the limit) without doing anything much in return.
-
-So my feeling is we should just remove the swap_cnt code and return to
-the original B&M algorithm.  Being much faster than expected for
-presorted input doesn't justify being far slower than expected for
-other inputs, IMHO.  In the context of Postgres I doubt that perfectly
-sorted input shows up very often anyway.
-
-Comments?
-
-                       regards, tom lane
-
-
-------- =_aaaaaaaaaa0
-Content-Type: application/octet-stream
-Content-ID: <23060.1142551929.2@sss.pgh.pa.us>
-Content-Description: sorttester.c
-Content-Transfer-Encoding: base64
-
-I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1
-ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgoKI2lmZGVmIFVTRV9R
-U09SVAojZGVmaW5lIHRlc3RfcXNvcnQgcXNvcnQKI2Vsc2UKZXh0ZXJuIHZv
-aWQgdGVzdF9xc29ydCh2b2lkICphLCBzaXplX3Qgbiwgc2l6ZV90IGVzLAoJ
-CQkJCSAgIGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq
-KSk7CiNlbmRpZgoKc3RhdGljIGNvbnN0IGludCBuX3ZhbHVlc1tdID0geyAx
-MDAsIDEwMjMsIDEwMjQsIDEwMjUgfSA7CiNkZWZpbmUgTUFYX04gMTAyNQoK
-dHlwZWRlZiBlbnVtCnsKCVNBV1RPT1RILCBSQU5ELCBTVEFHR0VSLCBQTEFU
-RUFVLCBTSFVGRkxFCn0gRElTVDsKI2RlZmluZSBESVNUX0ZJUlNUCVNBV1RP
-T1RICiNkZWZpbmUgRElTVF9MQVNUCVNIVUZGTEUKCnN0YXRpYyBjb25zdCBj
-aGFyICogY29uc3QgZGlzdG5hbWVbXSA9IHsKCSJTQVdUT09USCIsICJSQU5E
-IiwgIlNUQUdHRVIiLCAiUExBVEVBVSIsICJTSFVGRkxFIgp9OwoKdHlwZWRl
-ZiBlbnVtCnsKCU1DT1BZLCBNUkVWRVJTRSwgTUZSRVZFUlNFLCBNQlJFVkVS
-U0UsIE1TT1JULCBNRElUSEVSCn0gTU9ETUVUSE9EOwojZGVmaW5lIE1FVEhf
-RklSU1QJTUNPUFkKI2RlZmluZSBNRVRIX0xBU1QJTURJVEhFUgoKc3RhdGlj
-IGNvbnN0IGNoYXIgKiBjb25zdCBtZXRobmFtZVtdID0gewoJIkNPUFkiLCAi
-UkVWRVJTRSIsICJGUkVWRVJTRSIsICJCUkVWRVJTRSIsICJTT1JUIiwgIkRJ
-VEhFUiIKfTsKCi8qIHBlci10ZXN0IGNvdW50ZXIgKi8Kc3RhdGljIGxvbmcg
-bmNvbXBhcmVzOwoKLyogYWNjdW11bGF0ZSByZXN1bHRzIGFjcm9zcyB0ZXN0
-cywgZGlzdC13aXNlICovCnN0YXRpYyBkb3VibGUgc3VtY3JhdGlvX2RbRElT
-VF9MQVNUKzFdOwpzdGF0aWMgZG91YmxlIG1heGNyYXRpb19kW0RJU1RfTEFT
-VCsxXTsKc3RhdGljIGludCBudGVzdHNfZFtESVNUX0xBU1QrMV07Ci8qIGFj
-Y3VtdWxhdGUgcmVzdWx0cyBhY3Jvc3MgdGVzdHMsIG1vZC1tZXRob2Qtd2lz
-ZSAqLwpzdGF0aWMgZG91YmxlIHN1bWNyYXRpb19tW01FVEhfTEFTVCsxXTsK
-c3RhdGljIGRvdWJsZSBtYXhjcmF0aW9fbVtNRVRIX0xBU1QrMV07CnN0YXRp
-YyBpbnQgbnRlc3RzX21bTUVUSF9MQVNUKzFdOwoKCnN0YXRpYyBpbnQKaW50
-X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQp7CglpbnQJCWFh
-ID0gKihjb25zdCBpbnQgKikgYTsKCWludAkJYmIgPSAqKGNvbnN0IGludCAq
-KSBiOwoKCW5jb21wYXJlcysrOwoKCWlmIChhYSA8IGJiKQoJCXJldHVybiAt
-MTsKCWlmIChhYSA+IGJiKQoJCXJldHVybiAxOwoJcmV0dXJuIDA7Cn0KCgpz
-dGF0aWMgdm9pZAp0ZXN0X2NvbW1vbihESVNUIGRpc3QsIE1PRE1FVEhPRCBt
-ZXRoLCB2b2lkICp4dCwgc2l6ZV90IG4sIHNpemVfdCBzeiwKCQkJaW50ICgq
-Y21wKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQp7Cglkb3VibGUg
-bmxvZ247Cglkb3VibGUgY3JhdGlvOwoKCW5jb21wYXJlcyA9IDA7Cgl0ZXN0
-X3Fzb3J0KHh0LCBuLCBzeiwgY21wKTsKCW5sb2duID0gbiAqIGxvZygoZG91
-YmxlKSBuKSAvIGxvZygyLjApOwoJY3JhdGlvID0gbmNvbXBhcmVzIC8gbmxv
-Z247CglzdW1jcmF0aW9fZFtkaXN0XSArPSBjcmF0aW87CglpZiAoY3JhdGlv
-ID4gbWF4Y3JhdGlvX2RbZGlzdF0pCgkJbWF4Y3JhdGlvX2RbZGlzdF0gPSBj
-cmF0aW87CgludGVzdHNfZFtkaXN0XSsrOwoJc3VtY3JhdGlvX21bbWV0aF0g
-Kz0gY3JhdGlvOwoJaWYgKGNyYXRpbyA+IG1heGNyYXRpb19tW21ldGhdKQoJ
-CW1heGNyYXRpb19tW21ldGhdID0gY3JhdGlvOwoJbnRlc3RzX21bbWV0aF0r
-KzsKfQoKCi8qIHdvcmsgb24gYSBjb3B5IG9mIHggKi8Kc3RhdGljIHZvaWQK
-dGVzdF9pbnRfY29weShESVNUIGRpc3QsIGludCB4W10sIGludCBuKQp7Cglp
-bnQJCXh0W01BWF9OXTsKCgltZW1jcHkoeHQsIHgsIG4gKiBzaXplb2YoaW50
-KSk7Cgl0ZXN0X2NvbW1vbihkaXN0LCBNQ09QWSwgKHZvaWQgKikgeHQsIG4s
-IHNpemVvZihpbnQpLCBpbnRfY21wKTsKfQoKLyogcmV2ZXJzZSB0aGUgcmFu
-Z2Ugc3RhcnQgPD0gaSA8IHN0b3AgKi8Kc3RhdGljIHZvaWQKdGVzdF9pbnRf
-cmV2ZXJzZShESVNUIGRpc3QsIE1PRE1FVEhPRCBtZXRoLCBpbnQgeFtdLCBp
-bnQgbiwgaW50IHN0YXJ0LCBpbnQgc3RvcCkKewoJaW50CQl4dFtNQVhfTl07
-CglpbnQJCWk7CgoJbWVtY3B5KHh0LCB4LCBuICogc2l6ZW9mKGludCkpOwoJ
-Zm9yIChpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspCgl7CgkJeHRbaV0gPSB4
-W3N0b3AgLSAxIC0gaV07Cgl9Cgl0ZXN0X2NvbW1vbihkaXN0LCBtZXRoLCAo
-dm9pZCAqKSB4dCwgbiwgc2l6ZW9mKGludCksIGludF9jbXApOwp9CgovKiBw
-cmUtc29ydCB1c2luZyBhIHRydXN0ZWQgc29ydCAqLwpzdGF0aWMgdm9pZAp0
-ZXN0X2ludF9zb3J0KERJU1QgZGlzdCwgaW50IHhbXSwgaW50IG4pCnsKCWlu
-dAkJeHRbTUFYX05dOwoKCW1lbWNweSh4dCwgeCwgbiAqIHNpemVvZihpbnQp
-KTsKCXFzb3J0KCh2b2lkICopIHh0LCBuLCBzaXplb2YoaW50KSwgaW50X2Nt
-cCk7Cgl0ZXN0X2NvbW1vbihkaXN0LCBNU09SVCwgKHZvaWQgKikgeHQsIG4s
-IHNpemVvZihpbnQpLCBpbnRfY21wKTsKfQoKLyogYWRkIGklNSB0byB4W2ld
-ICovCnN0YXRpYyB2b2lkCnRlc3RfaW50X2RpdGhlcihESVNUIGRpc3QsIGlu
-dCB4W10sIGludCBuKQp7CglpbnQJCXh0W01BWF9OXTsKCWludAkJaTsKCglm
-b3IgKGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCXh0W2ldID0geFtpXSArIGkl
-NTsKCX0KCXRlc3RfY29tbW9uKGRpc3QsIE1ESVRIRVIsICh2b2lkICopIHh0
-LCBuLCBzaXplb2YoaW50KSwgaW50X2NtcCk7Cn0KCgppbnQKbWFpbigpCnsK
-CWludAkJeFtNQVhfTl07CglpbnQJCWlfbjsKCWludAkJbjsKCWludAkJbTsK
-CURJU1QJZGlzdDsKCU1PRE1FVEhPRCBtZXRoOwoJaW50CQlpOwoJaW50CQlq
-OwoJaW50CQlrOwoJZG91YmxlCXN1bWNyYXRpbzsKCWludAkJbnRlc3RzOwoK
-CWZvciAoaV9uID0gMDsgaV9uIDwgc2l6ZW9mKG5fdmFsdWVzKS9zaXplb2Yo
-bl92YWx1ZXNbMF0pOyBpX24rKykKCXsKCQluID0gbl92YWx1ZXNbaV9uXTsK
-CQlmb3IgKG0gPSAxOyBtIDwgMipuOyBtICo9IDIpCgkJewoJCQlmb3IgKGRp
-c3QgPSBESVNUX0ZJUlNUOyBkaXN0IDw9IERJU1RfTEFTVDsgZGlzdCsrKQoJ
-CQl7CgkJCQlzd2l0Y2ggKGRpc3QpCgkJCQl7CgkJCQkJY2FzZSBTQVdUT09U
-SDoKCQkJCQkJZm9yIChpID0gaiA9IDAsIGsgPSAxOyBpIDwgbjsgaSsrKQoJ
-CQkJCQl7CgkJCQkJCQl4W2ldID0gaSAlIG07CgkJCQkJCX0KCQkJCQkJYnJl
-YWs7CgkJCQkJY2FzZSBSQU5EOgoJCQkJCQlmb3IgKGkgPSBqID0gMCwgayA9
-IDE7IGkgPCBuOyBpKyspCgkJCQkJCXsKCQkJCQkJCXhbaV0gPSByYW5kKCkg
-JSBtOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgU1RBR0dFUjoK
-CQkJCQkJZm9yIChpID0gaiA9IDAsIGsgPSAxOyBpIDwgbjsgaSsrKQoJCQkJ
-CQl7CgkJCQkJCQl4W2ldID0gKGkqbSArIGkpICUgbjsKCQkJCQkJfQoJCQkJ
-CQlicmVhazsKCQkJCQljYXNlIFBMQVRFQVU6CgkJCQkJCWZvciAoaSA9IGog
-PSAwLCBrID0gMTsgaSA8IG47IGkrKykKCQkJCQkJewoJCQkJCQkJeFtpXSA9
-IGkgPCBtID8gaSA6IG07CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJY2Fz
-ZSBTSFVGRkxFOgoJCQkJCQlmb3IgKGkgPSBqID0gMCwgayA9IDE7IGkgPCBu
-OyBpKyspCgkJCQkJCXsKCQkJCQkJCXhbaV0gPSAocmFuZCgpJW0pID8gKGor
-PTIpIDogKGsrPTIpOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQkJ
-dGVzdF9pbnRfY29weShkaXN0LCB4LCBuKTsgLyogd29yayBvbiBhIGNvcHkg
-b2YgeCAqLwoJCQkJdGVzdF9pbnRfcmV2ZXJzZShkaXN0LCBNUkVWRVJTRSwg
-eCwgbiwgMCwgbik7IC8qIG9uIGEgcmV2ZXJzZWQgY29weSAqLwoJCQkJdGVz
-dF9pbnRfcmV2ZXJzZShkaXN0LCBNRlJFVkVSU0UsIHgsIG4sIDAsIG4vMik7
-CS8qIGZyb250IGhhbGYgcmV2ZXJzZWQgKi8KCQkJCXRlc3RfaW50X3JldmVy
-c2UoZGlzdCwgTUJSRVZFUlNFLCB4LCBuLCBuLzIsIG4pOwkvKiBiYWNrIGhh
-bGYgcmV2ZXJzZWQgKi8KCQkJCXRlc3RfaW50X3NvcnQoZGlzdCwgeCwgbik7
-IC8qIGFuIG9yZGVyZWQgY29weSAqLwoJCQkJdGVzdF9pbnRfZGl0aGVyKGRp
-c3QsIHgsIG4pOyAvKiBhZGQgaSU1IHRvIHhbaV0gKi8KCQkJfQoJCX0KCX0K
-Cglmb3IgKGRpc3QgPSBESVNUX0ZJUlNUOyBkaXN0IDw9IERJU1RfTEFTVDsg
-ZGlzdCsrKQoJewoJCXByaW50ZigiZGlzdHJpYnV0aW9uICVzOiBtYXggY3Jh
-dGlvICVnLCBhdmVyYWdlICVnIG92ZXIgJWQgdGVzdHNcbiIsCgkJCSAgIGRp
-c3RuYW1lW2Rpc3RdLAoJCQkgICBtYXhjcmF0aW9fZFtkaXN0XSwKCQkJICAg
-c3VtY3JhdGlvX2RbZGlzdF0gLyBudGVzdHNfZFtkaXN0XSwKCQkJICAgbnRl
-c3RzX2RbZGlzdF0pOwoJfQoKCXN1bWNyYXRpbyA9IDA7CgludGVzdHMgPSAw
-OwoKCWZvciAobWV0aCA9IE1FVEhfRklSU1Q7IG1ldGggPD0gTUVUSF9MQVNU
-OyBtZXRoKyspCgl7CgkJcHJpbnRmKCJtZXRob2QgJXM6IG1heCBjcmF0aW8g
-JWcsIGF2ZXJhZ2UgJWcgb3ZlciAlZCB0ZXN0c1xuIiwKCQkJICAgbWV0aG5h
-bWVbbWV0aF0sCgkJCSAgIG1heGNyYXRpb19tW21ldGhdLAoJCQkgICBzdW1j
-cmF0aW9fbVttZXRoXSAvIG50ZXN0c19tW21ldGhdLAoJCQkgICBudGVzdHNf
-bVttZXRoXSk7CgkJc3VtY3JhdGlvICs9IHN1bWNyYXRpb19tW21ldGhdOwoJ
-CW50ZXN0cyArPSBudGVzdHNfbVttZXRoXTsKCX0KCglwcmludGYoIk92ZXJh
-bGw6IGF2ZXJhZ2UgY3JhdGlvICVnIG92ZXIgJWQgdGVzdHNcbiIsCgkJICAg
-c3VtY3JhdGlvIC8gbnRlc3RzLAoJCSAgIG50ZXN0cyk7CgoJcmV0dXJuIDA7
-Cn0K
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain
-Content-Disposition: inline
-Content-Transfer-Encoding: 8bit
-MIME-Version: 1.0
-
-
----------------------------(end of broadcast)---------------------------
-TIP 6: explain analyze is your friend
-
-------- =_aaaaaaaaaa0--
-
-From pgsql-hackers-owner+M81167@postgresql.org Thu Mar 16 18:48:37 2006
-Return-path: <pgsql-hackers-owner+M81167@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2GNmbu12770
-       for <pgman@candle.pha.pa.us>; Thu, 16 Mar 2006 18:48:37 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 570D567BADC;
-       Thu, 16 Mar 2006 19:48:35 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id B49219DCBC2
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 16 Mar 2006 19:48:12 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 28142-10
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 16 Mar 2006 19:48:15 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id 9E95A9DCBAD
-       for <pgsql-hackers@postgresql.org>; Thu, 16 Mar 2006 19:48:10 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2GNm9Kt023199;
-       Thu, 16 Mar 2006 18:48:09 -0500 (EST)
-To: Darcy Buskermolen <darcy@wavefire.com>
-cc: pgsql-hackers@postgresql.org, "Dann Corbit" <DCorbit@connx.com>,
-   "Jonah H. Harris" <jonah.harris@gmail.com>,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <200603161541.25929.darcy@wavefire.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D67D@postal.corporate.connx.com> <19646.1142539750@sss.pgh.pa.us> <200603161541.25929.darcy@wavefire.com>
-Comments: In-reply-to Darcy Buskermolen <darcy@wavefire.com>
-       message dated "Thu, 16 Mar 2006 15:41:24 -0800"
-Date: Thu, 16 Mar 2006 18:48:09 -0500
-Message-ID: <23198.1142552889@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Darcy Buskermolen <darcy@wavefire.com> writes:
-> On Thursday 16 March 2006 12:09, Tom Lane wrote:
->> So we still have a problem of software archaeology: who added the
->> insertion sort switch to the NetBSD version, and on what grounds?
-
-> This is when that particular code was pushed in, as to why exactly, you'll 
-> have to ask mycroft.
-> http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdlib/qsort.c.diff?r1=1.3&r2=1.4&only_with_tag=MAIN
-
-Interesting.  It looks to me like he replaced the former
-vaguely-Knuth-based coding with B&M's code, but kept the insertion-
-sort-after-no-swap special case that was in the previous code.  I'll
-betcha he didn't test to see whether this was actually such a great
-idea ...
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 1: if posting/reading through Usenet, please send an appropriate
-       subscribe-nomail command to majordomo@postgresql.org so that your
-       message can get through to the mailing list cleanly
-
-From pgsql-hackers-owner+M81168@postgresql.org Thu Mar 16 19:42:51 2006
-Return-path: <pgsql-hackers-owner+M81168@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2H0gpu19805
-       for <pgman@candle.pha.pa.us>; Thu, 16 Mar 2006 19:42:51 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 5F20967BADE;
-       Thu, 16 Mar 2006 20:42:48 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id AA2239DCBAD
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 16 Mar 2006 20:42:20 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 46728-01
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 16 Mar 2006 20:42:23 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from postal.corporate.connx.com (postal.corporate.connx.com [65.212.159.187])
-       by postgresql.org (Postfix) with ESMTP id 062EC9DCBA4
-       for <pgsql-hackers@postgresql.org>; Thu, 16 Mar 2006 20:42:17 -0400 (AST)
-X-MimeOLE: Produced By Microsoft Exchange V6.5
-Content-class: urn:content-classes:message
-MIME-Version: 1.0
-Content-Type: text/plain;
-       charset="us-ascii"
-Subject: Re: [HACKERS] qsort, once again 
-Date: Thu, 16 Mar 2006 16:42:20 -0800
-Message-ID: <D425483C2C5C9F49B5B7A41F8944154757D688@postal.corporate.connx.com>
-Thread-Topic: [HACKERS] qsort, once again 
-Thread-Index: AcZJUnwKofAzJ+OKTcqF67UTsFWJEQACP7AA
-From: "Dann Corbit" <DCorbit@connx.com>
-To: "Tom Lane" <tgl@sss.pgh.pa.us>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, <pgsql-hackers@postgresql.org>,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.096 required=5 tests=[AWL=0.096]
-X-Spam-Score: 0.096
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Content-Transfer-Encoding: 8bit
-X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id k2H0gpu19805
-Status: OR
-
-> So my feeling is we should just remove the swap_cnt code and return to
-> the original B&M algorithm.  Being much faster than expected for
-> presorted input doesn't justify being far slower than expected for
-> other inputs, IMHO.  In the context of Postgres I doubt that perfectly
-> sorted input shows up very often anyway.
-> 
-> Comments?
-
-Checking for presorted input is O(n).
-If the input is random, an average of 3 elements will be tested.
-So adding an in-order check of the data should not be too expensive.
-
-I would benchmark several approaches and see which one is best when used
-in-place.
-
-
----------------------------(end of broadcast)---------------------------
-TIP 3: Have you checked our extensive FAQ?
-
-               http://www.postgresql.org/docs/faq
-
-From pgsql-hackers-owner+M81169@postgresql.org Thu Mar 16 20:13:08 2006
-Return-path: <pgsql-hackers-owner+M81169@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2H1D7u25008
-       for <pgman@candle.pha.pa.us>; Thu, 16 Mar 2006 20:13:07 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 6B48F67BADE;
-       Thu, 16 Mar 2006 21:13:04 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 19FAD9DCC5C
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Thu, 16 Mar 2006 21:12:36 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 53608-01
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Thu, 16 Mar 2006 21:12:37 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from postal.corporate.connx.com (postal.corporate.connx.com [65.212.159.187])
-       by postgresql.org (Postfix) with ESMTP id 839069DCC2D
-       for <pgsql-hackers@postgresql.org>; Thu, 16 Mar 2006 21:12:32 -0400 (AST)
-X-MimeOLE: Produced By Microsoft Exchange V6.5
-Content-class: urn:content-classes:message
-MIME-Version: 1.0
-Content-Type: text/plain;
-       charset="us-ascii"
-Subject: Re: [HACKERS] qsort, once again 
-Date: Thu, 16 Mar 2006 17:12:35 -0800
-Message-ID: <D425483C2C5C9F49B5B7A41F8944154757D68B@postal.corporate.connx.com>
-Thread-Topic: [HACKERS] qsort, once again 
-Thread-Index: AcZJUnwKofAzJ+OKTcqF67UTsFWJEQACP7AAAADU8dA=
-From: "Dann Corbit" <DCorbit@connx.com>
-To: "Dann Corbit" <DCorbit@connx.com>, "Tom Lane" <tgl@sss.pgh.pa.us>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, <pgsql-hackers@postgresql.org>,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.096 required=5 tests=[AWL=0.096]
-X-Spam-Score: 0.096
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Content-Transfer-Encoding: 8bit
-X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id k2H1D7u25008
-Status: OR
-
-> -----Original Message-----
-> From: pgsql-hackers-owner@postgresql.org [mailto:pgsql-hackers-
-> owner@postgresql.org] On Behalf Of Dann Corbit
-> Sent: Thursday, March 16, 2006 4:42 PM
-> To: Tom Lane
-> Cc: Jonah H. Harris; pgsql-hackers@postgresql.org; Jerry Sievers
-> Subject: Re: [HACKERS] qsort, once again
-> 
-> > So my feeling is we should just remove the swap_cnt code and return
-to
-> > the original B&M algorithm.  Being much faster than expected for
-> > presorted input doesn't justify being far slower than expected for
-> > other inputs, IMHO.  In the context of Postgres I doubt that
-perfectly
-> > sorted input shows up very often anyway.
-> >
-> > Comments?
-> 
-> Checking for presorted input is O(n).
-> If the input is random, an average of 3 elements will be tested.
-> So adding an in-order check of the data should not be too expensive.
-> 
-> I would benchmark several approaches and see which one is best when
-used
-> in-place.
-
-Even if "hunks" of the input are sorted, the test is a very good idea.
-
-Recall that we are sorting recursively and so we divide the data into
-chunks.
-
-Consider an example...
-
-Quicksort of a field that contains Sex as 'M' for male, 'F' for female,
-or NULL for unknown.
-
-The median selection is going to pick one of 'M', 'F', or NULL.
-After pass 1 of qsort we will have two partitions.  One partition will
-have all of one type and the other partition will have the other two
-types.
-
-An in-order check will tell us that the monotone partition is sorted and
-we are done with it.
-
-Imagine also a table that was clustered but for which we have not
-updated statistics.  Perhaps it is 98% sorted.  Checking for order in
-our partitions is probably a good idea.
-
-I think you could also get a good optimization if you are checking for
-partitions and find a big section of the partition is not ordered (even
-though the whole thing is not).  If you could perk the ordered size up
-the tree, you could just add another partition to the merge list and
-sort the unordered part.
-
-In "C Unleashed" I call this idea partition discovery mergesort.
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-From pgsql-hackers-owner+M81172@postgresql.org Fri Mar 17 00:27:41 2006
-Return-path: <pgsql-hackers-owner+M81172@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2H5Reu14258
-       for <pgman@candle.pha.pa.us>; Fri, 17 Mar 2006 00:27:40 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id CE86767BAEA;
-       Fri, 17 Mar 2006 01:27:36 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 465549DC874
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Fri, 17 Mar 2006 01:27:11 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 76897-01
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Fri, 17 Mar 2006 01:27:10 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id 2456F9DC871
-       for <pgsql-hackers@postgresql.org>; Fri, 17 Mar 2006 01:27:08 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2H5R6PF025295;
-       Fri, 17 Mar 2006 00:27:06 -0500 (EST)
-To: "Dann Corbit" <DCorbit@connx.com>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <D425483C2C5C9F49B5B7A41F8944154757D68B@postal.corporate.connx.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D68B@postal.corporate.connx.com>
-Comments: In-reply-to "Dann Corbit" <DCorbit@connx.com>
-       message dated "Thu, 16 Mar 2006 17:12:35 -0800"
-Date: Fri, 17 Mar 2006 00:27:05 -0500
-Message-ID: <25294.1142573225@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-"Dann Corbit" <DCorbit@connx.com> writes:
->> So my feeling is we should just remove the swap_cnt code and return
->> to the original B&M algorithm.
-
-> Even if "hunks" of the input are sorted, the test is a very good idea.
-
-Yah know, guys, Bentley and McIlroy are each smarter than any five of
-us, and I'm quite certain it occurred to them to try prechecking for
-sorted input.  If that case is not in their code then it's probably
-because it's a net loss.  Unless you have reason to think that sorted
-input is *more* common than other cases for the Postgres environment,
-which is certainly a fact not in evidence.
-
-(Bentley was my thesis adviser for awhile before he went to Bell Labs,
-so my respect for him is based on direct personal experience.  McIlroy
-I only know by reputation, but he's sure got a ton of that.)
-
-> Imagine also a table that was clustered but for which we have not
-> updated statistics.  Perhaps it is 98% sorted.  Checking for order in
-> our partitions is probably a good idea.
-
-If we are using the sort code rather than the recently-clustered index
-for such a case, then we have problems elsewhere.  This scenario is not
-a good argument that the sort code needs to be specialized to handle
-this case at the expense of other cases; the place to be fixing it is
-the planner or the statistics-management code.
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 9: In versions below 8.0, the planner will ignore your desire to
-       choose an index scan if your joining column's datatypes do not
-       match
-
-From pgsql-hackers-owner+M81173@postgresql.org Fri Mar 17 00:29:24 2006
-Return-path: <pgsql-hackers-owner+M81173@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2H5TNu14505
-       for <pgman@candle.pha.pa.us>; Fri, 17 Mar 2006 00:29:23 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id A271D67BAEA;
-       Fri, 17 Mar 2006 01:29:19 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id C96D79DCA40
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Fri, 17 Mar 2006 01:28:55 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 44062-07
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Fri, 17 Mar 2006 01:28:54 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from postal.corporate.connx.com (postal.corporate.connx.com [65.212.159.187])
-       by postgresql.org (Postfix) with ESMTP id CDE6C9DCA4B
-       for <pgsql-hackers@postgresql.org>; Fri, 17 Mar 2006 01:28:53 -0400 (AST)
-X-MimeOLE: Produced By Microsoft Exchange V6.5
-Content-class: urn:content-classes:message
-MIME-Version: 1.0
-Content-Type: text/plain;
-       charset="us-ascii"
-Subject: Re: [HACKERS] qsort, once again 
-Date: Thu, 16 Mar 2006 21:28:52 -0800
-Message-ID: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com>
-Thread-Topic: [HACKERS] qsort, once again 
-Thread-Index: AcZJg2/Nvc2IdeFUT0id8WtNczZvGQAACfYw
-From: "Dann Corbit" <DCorbit@connx.com>
-To: "Tom Lane" <tgl@sss.pgh.pa.us>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, <pgsql-hackers@postgresql.org>,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.097 required=5 tests=[AWL=0.097]
-X-Spam-Score: 0.097
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Content-Transfer-Encoding: 8bit
-X-MIME-Autoconverted: from quoted-printable to 8bit by candle.pha.pa.us id k2H5TNu14505
-Status: OR
-
-Well, my point was that it is a snap to implement and test.
-
-It will be better, worse, or the same.
-
-I agree that Bentley is a bloody genius.
-
-> -----Original Message-----
-> From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
-> Sent: Thursday, March 16, 2006 9:27 PM
-> To: Dann Corbit
-> Cc: Jonah H. Harris; pgsql-hackers@postgresql.org; Jerry Sievers
-> Subject: Re: [HACKERS] qsort, once again
-> 
-> "Dann Corbit" <DCorbit@connx.com> writes:
-> >> So my feeling is we should just remove the swap_cnt code and return
-> >> to the original B&M algorithm.
-> 
-> > Even if "hunks" of the input are sorted, the test is a very good
-idea.
-> 
-> Yah know, guys, Bentley and McIlroy are each smarter than any five of
-> us, and I'm quite certain it occurred to them to try prechecking for
-> sorted input.  If that case is not in their code then it's probably
-> because it's a net loss.  Unless you have reason to think that sorted
-> input is *more* common than other cases for the Postgres environment,
-> which is certainly a fact not in evidence.
-> 
-> (Bentley was my thesis adviser for awhile before he went to Bell Labs,
-> so my respect for him is based on direct personal experience.  McIlroy
-> I only know by reputation, but he's sure got a ton of that.)
-> 
-> > Imagine also a table that was clustered but for which we have not
-> > updated statistics.  Perhaps it is 98% sorted.  Checking for order
-in
-> > our partitions is probably a good idea.
-> 
-> If we are using the sort code rather than the recently-clustered index
-> for such a case, then we have problems elsewhere.  This scenario is
-not
-> a good argument that the sort code needs to be specialized to handle
-> this case at the expense of other cases; the place to be fixing it is
-> the planner or the statistics-management code.
-> 
->                      regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 2: Don't 'kill -9' the postmaster
-
-From pgsql-hackers-owner+M81277@postgresql.org Tue Mar 21 13:53:08 2006
-Return-path: <pgsql-hackers-owner+M81277@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LIr6M03797
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 13:53:06 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 01A8467BBF2;
-       Tue, 21 Mar 2006 14:53:00 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 0ED1D9DCCD2
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Tue, 21 Mar 2006 14:52:29 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 38232-04-3
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Tue, 21 Mar 2006 14:52:26 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id 1A0EE9DCC2C
-       for <pgsql-hackers@postgresql.org>; Tue, 21 Mar 2006 14:52:22 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2LIqHPc018733;
-       Tue, 21 Mar 2006 13:52:17 -0500 (EST)
-To: "Dann Corbit" <DCorbit@connx.com>
-cc: "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com>
-Comments: In-reply-to "Dann Corbit" <DCorbit@connx.com>
-       message dated "Thu, 16 Mar 2006 21:28:52 -0800"
-MIME-Version: 1.0
-Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
-Content-ID: <18685.1142966822.0@sss.pgh.pa.us>
-Date: Tue, 21 Mar 2006 13:52:17 -0500
-Message-ID: <18732.1142967137@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain; charset="us-ascii"
-Content-ID: <18685.1142966822.1@sss.pgh.pa.us>
-
-"Dann Corbit" <DCorbit@connx.com> writes:
-> Well, my point was that it is a snap to implement and test.
-
-Well, having done this, I have to eat my words: it does seem to be a
-pretty good idea.
-
-The following test numbers are using Bentley & McIlroy's test framework,
-but modified to test only the case N=10000 rather than the four smaller
-N values they originally used.  I did that because it exposes quadratic
-behavior more obviously, and the variance in N made it harder to compare
-comparison ratios for different cases.  I also added a "NEARSORT" test
-method, which sorts the input distribution and then exchanges two
-elements chosen at random.  I did that because I was concerned that
-nearly sorted input would be the worst case for the presorted-input
-check, as it would waste the most cycles before failing on such input.
-
-With our existing qsort code, the results look like
-
-distribution SAWTOOTH: max cratio 94.17, min 0.08, average 1.56 over 105 tests
-distribution RAND: max cratio 1.06, min 0.08, average 0.51 over 105 tests
-distribution STAGGER: max cratio 6.08, min 0.23, average 1.01 over 105 tests
-distribution PLATEAU: max cratio 94.17, min 0.08, average 2.12 over 105 tests
-distribution SHUFFLE: max cratio 94.17, min 0.23, average 1.92 over 105 tests
-method COPY: max cratio 6.08, min 0.08, average 0.72 over 75 tests
-method REVERSE: max cratio 5.34, min 0.08, average 0.69 over 75 tests
-method FREVERSE: max cratio 94.17, min 0.08, average 5.71 over 75 tests
-method BREVERSE: max cratio 3.86, min 0.08, average 1.41 over 75 tests
-method SORT: max cratio 0.82, min 0.08, average 0.31 over 75 tests
-method NEARSORT: max cratio 0.82, min 0.08, average 0.36 over 75 tests
-method DITHER: max cratio 5.52, min 0.18, average 0.77 over 75 tests
-Overall: average cratio 1.42 over 525 tests
-
-("cratio" is the ratio of the actual number of comparison function calls
-to the theoretical expectation, N log2(N))
-
-That's pretty awful: there are several test cases that make it use
-nearly 100 times the expected number of comparisons.
-
-Removing the swap_cnt test to bring it close to B&M's original
-recommendations, we get
-
-distribution SAWTOOTH: max cratio 3.85, min 0.08, average 0.70 over 105 tests
-distribution RAND: max cratio 1.06, min 0.08, average 0.52 over 105 tests
-distribution STAGGER: max cratio 6.08, min 0.58, average 1.12 over 105 tests
-distribution PLATEAU: max cratio 3.70, min 0.08, average 0.34 over 105 tests
-distribution SHUFFLE: max cratio 3.86, min 0.86, average 1.24 over 105 tests
-method COPY: max cratio 6.08, min 0.08, average 0.76 over 75 tests
-method REVERSE: max cratio 5.34, min 0.08, average 0.75 over 75 tests
-method FREVERSE: max cratio 4.56, min 0.08, average 0.73 over 75 tests
-method BREVERSE: max cratio 3.86, min 0.08, average 1.41 over 75 tests
-method SORT: max cratio 0.86, min 0.08, average 0.56 over 75 tests
-method NEARSORT: max cratio 0.86, min 0.08, average 0.56 over 75 tests
-method DITHER: max cratio 3.73, min 0.18, average 0.72 over 75 tests
-Overall: average cratio 0.78 over 525 tests
-
-which is a whole lot better as to both average and worst cases.
-
-I then added some code to check for presorted input (just after the
-n<7 insertion sort code):
-
-#ifdef CHECK_SORTED
-       presorted = 1;
-       for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
-       {
-               if (cmp(pm - es, pm) > 0)
-               {
-                       presorted = 0;
-                       break;
-               }
-       }
-       if (presorted)
-               return;
-#endif
-
-This gives
-
-distribution SAWTOOTH: max cratio 3.88, min 0.08, average 0.62 over 105 tests
-distribution RAND: max cratio 1.06, min 0.08, average 0.46 over 105 tests
-distribution STAGGER: max cratio 6.15, min 0.08, average 0.98 over 105 tests
-distribution PLATEAU: max cratio 3.79, min 0.08, average 0.31 over 105 tests
-distribution SHUFFLE: max cratio 3.91, min 0.08, average 1.09 over 105 tests
-method COPY: max cratio 6.15, min 0.08, average 0.72 over 75 tests
-method REVERSE: max cratio 5.34, min 0.08, average 0.76 over 75 tests
-method FREVERSE: max cratio 4.58, min 0.08, average 0.73 over 75 tests
-method BREVERSE: max cratio 3.91, min 0.08, average 1.44 over 75 tests
-method SORT: max cratio 0.08, min 0.08, average 0.08 over 75 tests
-method NEARSORT: max cratio 0.89, min 0.08, average 0.39 over 75 tests
-method DITHER: max cratio 3.73, min 0.18, average 0.72 over 75 tests
-Overall: average cratio 0.69 over 525 tests
-
-So the worst case seems only very marginally worse, and there is a
-definite improvement in the average case, even for inputs that aren't
-entirely sorted.  Importantly, the "near sorted" case that I thought
-might send it into quadratic behavior doesn't seem to do that.
-
-So, unless anyone wants to do further testing, I'll go ahead and commit
-these changes.
-
-                       regards, tom lane
-
-PS: Just as a comparison point, here are the results when testing HPUX's
-library qsort:
-
-distribution SAWTOOTH: max cratio 7.00, min 0.08, average 0.76 over 105 tests
-distribution RAND: max cratio 1.11, min 0.08, average 0.53 over 105 tests
-distribution STAGGER: max cratio 7.05, min 0.58, average 1.24 over 105 tests
-distribution PLATEAU: max cratio 7.00, min 0.08, average 0.43 over 105 tests
-distribution SHUFFLE: max cratio 7.00, min 0.86, average 1.54 over 105 tests
-method COPY: max cratio 6.70, min 0.08, average 0.79 over 75 tests
-method REVERSE: max cratio 7.05, min 0.08, average 0.78 over 75 tests
-method FREVERSE: max cratio 7.00, min 0.08, average 0.77 over 75 tests
-method BREVERSE: max cratio 7.00, min 0.08, average 2.11 over 75 tests
-method SORT: max cratio 0.86, min 0.08, average 0.56 over 75 tests
-method NEARSORT: max cratio 0.86, min 0.08, average 0.56 over 75 tests
-method DITHER: max cratio 4.06, min 0.16, average 0.74 over 75 tests
-Overall: average cratio 0.90 over 525 tests
-
-and here are the results using glibc's qsort, which of course isn't
-quicksort at all but some kind of merge sort:
-
-distribution SAWTOOTH: max cratio 0.90, min 0.49, average 0.65 over 105 tests
-distribution RAND: max cratio 0.91, min 0.49, average 0.76 over 105 tests
-distribution STAGGER: max cratio 0.92, min 0.49, average 0.70 over 105 tests
-distribution PLATEAU: max cratio 0.84, min 0.49, average 0.54 over 105 tests
-distribution SHUFFLE: max cratio 0.64, min 0.49, average 0.52 over 105 tests
-method COPY: max cratio 0.92, min 0.49, average 0.66 over 75 tests
-method REVERSE: max cratio 0.92, min 0.49, average 0.68 over 75 tests
-method FREVERSE: max cratio 0.92, min 0.49, average 0.67 over 75 tests
-method BREVERSE: max cratio 0.92, min 0.49, average 0.68 over 75 tests
-method SORT: max cratio 0.49, min 0.49, average 0.49 over 75 tests
-method NEARSORT: max cratio 0.55, min 0.49, average 0.51 over 75 tests
-method DITHER: max cratio 0.92, min 0.50, average 0.74 over 75 tests
-Overall: average cratio 0.63 over 525 tests
-
-PPS: final version of test framework attached for the archives.
-
-
-------- =_aaaaaaaaaa0
-Content-Type: application/octet-stream
-Content-ID: <18685.1142966822.2@sss.pgh.pa.us>
-Content-Description: sorttester.c
-Content-Transfer-Encoding: base64
-
-I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1
-ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgoKI2lmZGVmIFVTRV9R
-U09SVAojZGVmaW5lIHRlc3RfcXNvcnQgcXNvcnQKI2Vsc2UKZXh0ZXJuIHZv
-aWQgdGVzdF9xc29ydCh2b2lkICphLCBzaXplX3Qgbiwgc2l6ZV90IGVzLAoJ
-CQkJCSAgIGludCAoKmNtcCkgKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAq
-KSk7CiNlbmRpZgoKLy9zdGF0aWMgY29uc3QgaW50IG5fdmFsdWVzW10gPSB7
-IDEwMCwgMTAyMywgMTAyNCwgMTAyNSwgMTAwMDAgfSA7CnN0YXRpYyBjb25z
-dCBpbnQgbl92YWx1ZXNbXSA9IHsgMTAwMDAgfSA7CiNkZWZpbmUgTUFYX04g
-MTAwMDAKCnR5cGVkZWYgZW51bQp7CglTQVdUT09USCwgUkFORCwgU1RBR0dF
-UiwgUExBVEVBVSwgU0hVRkZMRQp9IERJU1Q7CiNkZWZpbmUgRElTVF9GSVJT
-VAlTQVdUT09USAojZGVmaW5lIERJU1RfTEFTVAlTSFVGRkxFCgpzdGF0aWMg
-Y29uc3QgY2hhciAqIGNvbnN0IGRpc3RuYW1lW10gPSB7CgkiU0FXVE9PVEgi
-LCAiUkFORCIsICJTVEFHR0VSIiwgIlBMQVRFQVUiLCAiU0hVRkZMRSIKfTsK
-CnR5cGVkZWYgZW51bQp7CglNQ09QWSwgTVJFVkVSU0UsIE1GUkVWRVJTRSwg
-TUJSRVZFUlNFLCBNU09SVCwgTU5FQVJTT1JULCBNRElUSEVSCn0gTU9ETUVU
-SE9EOwojZGVmaW5lIE1FVEhfRklSU1QJTUNPUFkKI2RlZmluZSBNRVRIX0xB
-U1QJTURJVEhFUgoKc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtZXRobmFt
-ZVtdID0gewoJIkNPUFkiLCAiUkVWRVJTRSIsICJGUkVWRVJTRSIsICJCUkVW
-RVJTRSIsICJTT1JUIiwgIk5FQVJTT1JUIiwgIkRJVEhFUiIKfTsKCi8qIHBl
-ci10ZXN0IGNvdW50ZXIgKi8Kc3RhdGljIGxvbmcgbmNvbXBhcmVzOwoKLyog
-YWNjdW11bGF0ZSByZXN1bHRzIGFjcm9zcyB0ZXN0cywgZGlzdC13aXNlICov
-CnN0YXRpYyBkb3VibGUgc3VtY3JhdGlvX2RbRElTVF9MQVNUKzFdOwpzdGF0
-aWMgZG91YmxlIG1heGNyYXRpb19kW0RJU1RfTEFTVCsxXTsKc3RhdGljIGRv
-dWJsZSBtaW5jcmF0aW9fZFtESVNUX0xBU1QrMV07CnN0YXRpYyBpbnQgbnRl
-c3RzX2RbRElTVF9MQVNUKzFdOwovKiBhY2N1bXVsYXRlIHJlc3VsdHMgYWNy
-b3NzIHRlc3RzLCBtb2QtbWV0aG9kLXdpc2UgKi8Kc3RhdGljIGRvdWJsZSBz
-dW1jcmF0aW9fbVtNRVRIX0xBU1QrMV07CnN0YXRpYyBkb3VibGUgbWF4Y3Jh
-dGlvX21bTUVUSF9MQVNUKzFdOwpzdGF0aWMgZG91YmxlIG1pbmNyYXRpb19t
-W01FVEhfTEFTVCsxXTsKc3RhdGljIGludCBudGVzdHNfbVtNRVRIX0xBU1Qr
-MV07CgoKc3RhdGljIGludAppbnRfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0
-IHZvaWQgKmIpCnsKCWludAkJYWEgPSAqKGNvbnN0IGludCAqKSBhOwoJaW50
-CQliYiA9ICooY29uc3QgaW50ICopIGI7CgoJbmNvbXBhcmVzKys7CgoJaWYg
-KGFhIDwgYmIpCgkJcmV0dXJuIC0xOwoJaWYgKGFhID4gYmIpCgkJcmV0dXJu
-IDE7CglyZXR1cm4gMDsKfQoKCnN0YXRpYyB2b2lkCnRlc3RfY29tbW9uKERJ
-U1QgZGlzdCwgTU9ETUVUSE9EIG1ldGgsIHZvaWQgKnh0LCBzaXplX3Qgbiwg
-c2l6ZV90IHN6LAoJCQlpbnQgKCpjbXApIChjb25zdCB2b2lkICosIGNvbnN0
-IHZvaWQgKikpCnsKCWRvdWJsZSBubG9nbjsKCWRvdWJsZSBjcmF0aW87CgoJ
-bmNvbXBhcmVzID0gMDsKCXRlc3RfcXNvcnQoeHQsIG4sIHN6LCBjbXApOwoJ
-LyogbG9nIHRoZSBjb3N0IGJlZm9yZSBkb2luZyBtb3JlIGNtcHMgKi8KCW5s
-b2duID0gbiAqIGxvZygoZG91YmxlKSBuKSAvIGxvZygyLjApOwoJY3JhdGlv
-ID0gbmNvbXBhcmVzIC8gbmxvZ247CglzdW1jcmF0aW9fZFtkaXN0XSArPSBj
-cmF0aW87CglpZiAobnRlc3RzX2RbZGlzdF0gPT0gMCkKCXsKCQltYXhjcmF0
-aW9fZFtkaXN0XSA9IG1pbmNyYXRpb19kW2Rpc3RdID0gY3JhdGlvOwoJfQoJ
-ZWxzZQoJewoJCWlmIChjcmF0aW8gPiBtYXhjcmF0aW9fZFtkaXN0XSkKCQkJ
-bWF4Y3JhdGlvX2RbZGlzdF0gPSBjcmF0aW87CgkJaWYgKGNyYXRpbyA8IG1p
-bmNyYXRpb19kW2Rpc3RdKQoJCQltaW5jcmF0aW9fZFtkaXN0XSA9IGNyYXRp
-bzsKCX0KCW50ZXN0c19kW2Rpc3RdKys7CglzdW1jcmF0aW9fbVttZXRoXSAr
-PSBjcmF0aW87CglpZiAobnRlc3RzX21bbWV0aF0gPT0gMCkKCXsKCQltYXhj
-cmF0aW9fbVttZXRoXSA9IG1pbmNyYXRpb19tW21ldGhdID0gY3JhdGlvOwoJ
-fQoJZWxzZQoJewoJCWlmIChjcmF0aW8gPiBtYXhjcmF0aW9fbVttZXRoXSkK
-CQkJbWF4Y3JhdGlvX21bbWV0aF0gPSBjcmF0aW87CgkJaWYgKGNyYXRpbyA8
-IG1pbmNyYXRpb19tW21ldGhdKQoJCQltaW5jcmF0aW9fbVttZXRoXSA9IGNy
-YXRpbzsKCX0KCW50ZXN0c19tW21ldGhdKys7CgkvKiBub3cgY2hlY2sgZm9y
-IGNvcnJlY3Qgc29ydGluZyAqLwoJewoJCWNoYXIgKnAgPSB4dDsKCQl3aGls
-ZSAobi0tID4gMSkKCQl7CgkJCWlmIChjbXAocCwgcCArIHN6KSA+IDApCgkJ
-CXsKCQkJCWZwcmludGYoc3RkZXJyLCAid3Jvbmcgc29ydCByZXN1bHQgZm9y
-ICVzLyVzIVxuIiwKCQkJCQkJZGlzdG5hbWVbZGlzdF0sIG1ldGhuYW1lW21l
-dGhdKTsKCQkJCWV4aXQoMSk7CgkJCX0KCQkJcCArPSBzejsKCQl9Cgl9Cn0K
-CgovKiB3b3JrIG9uIGEgY29weSBvZiB4ICovCnN0YXRpYyB2b2lkCnRlc3Rf
-aW50X2NvcHkoRElTVCBkaXN0LCBpbnQgeFtdLCBpbnQgbikKewoJaW50CQl4
-dFtNQVhfTl07CgoJbWVtY3B5KHh0LCB4LCBuICogc2l6ZW9mKGludCkpOwoJ
-dGVzdF9jb21tb24oZGlzdCwgTUNPUFksICh2b2lkICopIHh0LCBuLCBzaXpl
-b2YoaW50KSwgaW50X2NtcCk7Cn0KCi8qIHJldmVyc2UgdGhlIHJhbmdlIHN0
-YXJ0IDw9IGkgPCBzdG9wICovCnN0YXRpYyB2b2lkCnRlc3RfaW50X3JldmVy
-c2UoRElTVCBkaXN0LCBNT0RNRVRIT0QgbWV0aCwgaW50IHhbXSwgaW50IG4s
-IGludCBzdGFydCwgaW50IHN0b3ApCnsKCWludAkJeHRbTUFYX05dOwoJaW50
-CQlpOwoKCW1lbWNweSh4dCwgeCwgbiAqIHNpemVvZihpbnQpKTsKCWZvciAo
-aSA9IHN0YXJ0OyBpIDwgc3RvcDsgaSsrKQoJewoJCXh0W2ldID0geFtzdG9w
-IC0gMSAtIGldOwoJfQoJdGVzdF9jb21tb24oZGlzdCwgbWV0aCwgKHZvaWQg
-KikgeHQsIG4sIHNpemVvZihpbnQpLCBpbnRfY21wKTsKfQoKLyogcHJlLXNv
-cnQgdXNpbmcgYSB0cnVzdGVkIHNvcnQgKi8Kc3RhdGljIHZvaWQKdGVzdF9p
-bnRfc29ydChESVNUIGRpc3QsIGludCB4W10sIGludCBuKQp7CglpbnQJCXh0
-W01BWF9OXTsKCgltZW1jcHkoeHQsIHgsIG4gKiBzaXplb2YoaW50KSk7Cglx
-c29ydCgodm9pZCAqKSB4dCwgbiwgc2l6ZW9mKGludCksIGludF9jbXApOwoJ
-dGVzdF9jb21tb24oZGlzdCwgTVNPUlQsICh2b2lkICopIHh0LCBuLCBzaXpl
-b2YoaW50KSwgaW50X2NtcCk7Cn0KCi8qIG5lYXItc29ydGVkICovCnN0YXRp
-YyB2b2lkCnRlc3RfaW50X25lYXJzb3J0KERJU1QgZGlzdCwgaW50IHhbXSwg
-aW50IG4pCnsKCWludAkJeHRbTUFYX05dOwoKCW1lbWNweSh4dCwgeCwgbiAq
-IHNpemVvZihpbnQpKTsKCXFzb3J0KCh2b2lkICopIHh0LCBuLCBzaXplb2Yo
-aW50KSwgaW50X2NtcCk7CgkvKiBzd2FwIGEgcmFuZG9tIHR3byBlbGVtZW50
-cyAqLwoJewoJCWludCBpID0gcmFuZCgpICUgbjsKCQlpbnQgaiA9IHJhbmQo
-KSAlIG47CgkJaW50IHQgPSB4dFtpXTsKCQl4dFtpXSA9IHh0W2pdOwoJCXh0
-W2pdID0gdDsKCX0KCXRlc3RfY29tbW9uKGRpc3QsIE1ORUFSU09SVCwgKHZv
-aWQgKikgeHQsIG4sIHNpemVvZihpbnQpLCBpbnRfY21wKTsKfQoKLyogYWRk
-IGklNSB0byB4W2ldICovCnN0YXRpYyB2b2lkCnRlc3RfaW50X2RpdGhlcihE
-SVNUIGRpc3QsIGludCB4W10sIGludCBuKQp7CglpbnQJCXh0W01BWF9OXTsK
-CWludAkJaTsKCglmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCXh0W2ld
-ID0geFtpXSArIGklNTsKCX0KCXRlc3RfY29tbW9uKGRpc3QsIE1ESVRIRVIs
-ICh2b2lkICopIHh0LCBuLCBzaXplb2YoaW50KSwgaW50X2NtcCk7Cn0KCgpp
-bnQKbWFpbigpCnsKCWludAkJeFtNQVhfTl07CglpbnQJCWlfbjsKCWludAkJ
-bjsKCWludAkJbTsKCURJU1QJZGlzdDsKCU1PRE1FVEhPRCBtZXRoOwoJaW50
-CQlpOwoJaW50CQlqOwoJaW50CQlrOwoJZG91YmxlCXN1bWNyYXRpbzsKCWlu
-dAkJbnRlc3RzOwoKCWZvciAoaV9uID0gMDsgaV9uIDwgc2l6ZW9mKG5fdmFs
-dWVzKS9zaXplb2Yobl92YWx1ZXNbMF0pOyBpX24rKykKCXsKCQluID0gbl92
-YWx1ZXNbaV9uXTsKCQlmb3IgKG0gPSAxOyBtIDwgMipuOyBtICo9IDIpCgkJ
-ewoJCQlmb3IgKGRpc3QgPSBESVNUX0ZJUlNUOyBkaXN0IDw9IERJU1RfTEFT
-VDsgZGlzdCsrKQoJCQl7CgkJCQlzd2l0Y2ggKGRpc3QpCgkJCQl7CgkJCQkJ
-Y2FzZSBTQVdUT09USDoKCQkJCQkJZm9yIChpID0gaiA9IDAsIGsgPSAxOyBp
-IDwgbjsgaSsrKQoJCQkJCQl7CgkJCQkJCQl4W2ldID0gaSAlIG07CgkJCQkJ
-CX0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSBSQU5EOgoJCQkJCQlmb3IgKGkg
-PSBqID0gMCwgayA9IDE7IGkgPCBuOyBpKyspCgkJCQkJCXsKCQkJCQkJCXhb
-aV0gPSByYW5kKCkgJSBtOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCWNh
-c2UgU1RBR0dFUjoKCQkJCQkJZm9yIChpID0gaiA9IDAsIGsgPSAxOyBpIDwg
-bjsgaSsrKQoJCQkJCQl7CgkJCQkJCQl4W2ldID0gKGkqbSArIGkpICUgbjsK
-CQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQljYXNlIFBMQVRFQVU6CgkJCQkJ
-CWZvciAoaSA9IGogPSAwLCBrID0gMTsgaSA8IG47IGkrKykKCQkJCQkJewoJ
-CQkJCQkJeFtpXSA9IGkgPCBtID8gaSA6IG07CgkJCQkJCX0KCQkJCQkJYnJl
-YWs7CgkJCQkJY2FzZSBTSFVGRkxFOgoJCQkJCQlmb3IgKGkgPSBqID0gMCwg
-ayA9IDE7IGkgPCBuOyBpKyspCgkJCQkJCXsKCQkJCQkJCXhbaV0gPSAocmFu
-ZCgpJW0pID8gKGorPTIpIDogKGsrPTIpOwoJCQkJCQl9CgkJCQkJCWJyZWFr
-OwoJCQkJfQoJCQkJdGVzdF9pbnRfY29weShkaXN0LCB4LCBuKTsgLyogd29y
-ayBvbiBhIGNvcHkgb2YgeCAqLwoJCQkJdGVzdF9pbnRfcmV2ZXJzZShkaXN0
-LCBNUkVWRVJTRSwgeCwgbiwgMCwgbik7IC8qIG9uIGEgcmV2ZXJzZWQgY29w
-eSAqLwoJCQkJdGVzdF9pbnRfcmV2ZXJzZShkaXN0LCBNRlJFVkVSU0UsIHgs
-IG4sIDAsIG4vMik7CS8qIGZyb250IGhhbGYgcmV2ZXJzZWQgKi8KCQkJCXRl
-c3RfaW50X3JldmVyc2UoZGlzdCwgTUJSRVZFUlNFLCB4LCBuLCBuLzIsIG4p
-OwkvKiBiYWNrIGhhbGYgcmV2ZXJzZWQgKi8KCQkJCXRlc3RfaW50X3NvcnQo
-ZGlzdCwgeCwgbik7IC8qIGFuIG9yZGVyZWQgY29weSAqLwoJCQkJdGVzdF9p
-bnRfbmVhcnNvcnQoZGlzdCwgeCwgbik7IC8qIGFuIGFsbW9zdCBvcmRlcmVk
-IGNvcHkgKi8KCQkJCXRlc3RfaW50X2RpdGhlcihkaXN0LCB4LCBuKTsgLyog
-YWRkIGklNSB0byB4W2ldICovCgkJCX0KCQl9Cgl9CgoJZm9yIChkaXN0ID0g
-RElTVF9GSVJTVDsgZGlzdCA8PSBESVNUX0xBU1Q7IGRpc3QrKykKCXsKCQlw
-cmludGYoImRpc3RyaWJ1dGlvbiAlczogbWF4IGNyYXRpbyAlLjJmLCBtaW4g
-JS4yZiwgYXZlcmFnZSAlLjJmIG92ZXIgJWQgdGVzdHNcbiIsCgkJCSAgIGRp
-c3RuYW1lW2Rpc3RdLAoJCQkgICBtYXhjcmF0aW9fZFtkaXN0XSwKCQkJICAg
-bWluY3JhdGlvX2RbZGlzdF0sCgkJCSAgIHN1bWNyYXRpb19kW2Rpc3RdIC8g
-bnRlc3RzX2RbZGlzdF0sCgkJCSAgIG50ZXN0c19kW2Rpc3RdKTsKCX0KCglz
-dW1jcmF0aW8gPSAwOwoJbnRlc3RzID0gMDsKCglmb3IgKG1ldGggPSBNRVRI
-X0ZJUlNUOyBtZXRoIDw9IE1FVEhfTEFTVDsgbWV0aCsrKQoJewoJCXByaW50
-ZigibWV0aG9kICVzOiBtYXggY3JhdGlvICUuMmYsIG1pbiAlLjJmLCBhdmVy
-YWdlICUuMmYgb3ZlciAlZCB0ZXN0c1xuIiwKCQkJICAgbWV0aG5hbWVbbWV0
-aF0sCgkJCSAgIG1heGNyYXRpb19tW21ldGhdLAoJCQkgICBtaW5jcmF0aW9f
-bVttZXRoXSwKCQkJICAgc3VtY3JhdGlvX21bbWV0aF0gLyBudGVzdHNfbVtt
-ZXRoXSwKCQkJICAgbnRlc3RzX21bbWV0aF0pOwoJCXN1bWNyYXRpbyArPSBz
-dW1jcmF0aW9fbVttZXRoXTsKCQludGVzdHMgKz0gbnRlc3RzX21bbWV0aF07
-Cgl9CgoJcHJpbnRmKCJPdmVyYWxsOiBhdmVyYWdlIGNyYXRpbyAlLjJmIG92
-ZXIgJWQgdGVzdHNcbiIsCgkJICAgc3VtY3JhdGlvIC8gbnRlc3RzLAoJCSAg
-IG50ZXN0cyk7CgoJcmV0dXJuIDA7Cn0K
-
-------- =_aaaaaaaaaa0
-Content-Type: text/plain
-Content-Disposition: inline
-Content-Transfer-Encoding: 8bit
-MIME-Version: 1.0
-
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-------- =_aaaaaaaaaa0--
-
-From pgsql-hackers-owner+M81283@postgresql.org Tue Mar 21 15:18:07 2006
-Return-path: <pgsql-hackers-owner+M81283@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LKI7M12970
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 15:18:07 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id AABA167BBF8;
-       Tue, 21 Mar 2006 16:18:04 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 3E6009DC827
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Tue, 21 Mar 2006 16:17:38 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 56406-07
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Tue, 21 Mar 2006 16:17:38 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from stark.xeocode.com (stark.xeocode.com [216.58.44.227])
-       by postgresql.org (Postfix) with ESMTP id 21DCF9DC809
-       for <pgsql-hackers@postgresql.org>; Tue, 21 Mar 2006 16:17:35 -0400 (AST)
-Received: from localhost ([127.0.0.1] helo=stark.xeocode.com)
-       by stark.xeocode.com with smtp (Exim 3.36 #1 (Debian))
-       id 1FLnI7-0004xB-00; Tue, 21 Mar 2006 15:17:19 -0500
-To: Tom Lane <tgl@sss.pgh.pa.us>
-cc: "Dann Corbit" <DCorbit@connx.com>,
-   "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again
-References: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com>
-       <18732.1142967137@sss.pgh.pa.us>
-In-Reply-To: <18732.1142967137@sss.pgh.pa.us>
-From: Greg Stark <gsstark@mit.edu>
-Organization: The Emacs Conspiracy; member since 1992
-Date: 21 Mar 2006 15:17:19 -0500
-Message-ID: <87lkv3mu28.fsf@stark.xeocode.com>
-Lines: 13
-User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.128 required=5 tests=[AWL=0.128]
-X-Spam-Score: 0.128
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-
-Tom Lane <tgl@sss.pgh.pa.us> writes:
-
-> and here are the results using glibc's qsort, which of course isn't
-> quicksort at all but some kind of merge sort:
-> ...
-> Overall: average cratio 0.63 over 525 tests
-
-That looks better both on average and in the worst case. Are the time
-constants that much worse that the merge sort still takes longer?
-
--- 
-greg
-
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-From pgsql-hackers-owner+M81285@postgresql.org Tue Mar 21 15:38:06 2006
-Return-path: <pgsql-hackers-owner+M81285@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LKc6M14799
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 15:38:06 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 0917767BBF8;
-       Tue, 21 Mar 2006 16:38:03 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 069389DC843
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Tue, 21 Mar 2006 16:37:39 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 60037-07
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Tue, 21 Mar 2006 16:37:39 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id BDC039DC827
-       for <pgsql-hackers@postgresql.org>; Tue, 21 Mar 2006 16:37:36 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2LKbZid019858;
-       Tue, 21 Mar 2006 15:37:35 -0500 (EST)
-To: Greg Stark <gsstark@mit.edu>
-cc: "Dann Corbit" <DCorbit@connx.com>,
-   "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <87lkv3mu28.fsf@stark.xeocode.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com> <18732.1142967137@sss.pgh.pa.us> <87lkv3mu28.fsf@stark.xeocode.com>
-Comments: In-reply-to Greg Stark <gsstark@mit.edu>
-       message dated "21 Mar 2006 15:17:19 -0500"
-Date: Tue, 21 Mar 2006 15:37:35 -0500
-Message-ID: <19857.1142973455@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Greg Stark <gsstark@mit.edu> writes:
-> That looks better both on average and in the worst case. Are the time
-> constants that much worse that the merge sort still takes longer?
-
-Keep in mind that this is only counting the number of
-comparison-function calls; it's not accounting for any other effects.
-In particular, for a large sort operation quicksort might win because of
-its more cache-friendly memory access patterns.
-
-The whole question of our qsort vs the system library's qsort probably
-needs to be revisited, however, now that we've identified and fixed this
-particular performance issue.
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-From pgsql-hackers-owner+M81289@postgresql.org Tue Mar 21 16:27:30 2006
-Return-path: <pgsql-hackers-owner+M81289@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LLRTM20101
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 16:27:30 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id ACB4F67BBFD;
-       Tue, 21 Mar 2006 17:27:27 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 16E0E9DCA0F
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Tue, 21 Mar 2006 17:27:01 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 69903-02
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Tue, 21 Mar 2006 17:27:02 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from stark.xeocode.com (stark.xeocode.com [216.58.44.227])
-       by postgresql.org (Postfix) with ESMTP id 107429DC867
-       for <pgsql-hackers@postgresql.org>; Tue, 21 Mar 2006 17:26:58 -0400 (AST)
-Received: from localhost ([127.0.0.1] helo=stark.xeocode.com)
-       by stark.xeocode.com with smtp (Exim 3.36 #1 (Debian))
-       id 1FLoNU-0006M4-00; Tue, 21 Mar 2006 16:26:56 -0500
-To: Tom Lane <tgl@sss.pgh.pa.us>
-cc: Greg Stark <gsstark@mit.edu>, "Dann Corbit" <DCorbit@connx.com>,
-   "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again
-References: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com>
-       <18732.1142967137@sss.pgh.pa.us> <87lkv3mu28.fsf@stark.xeocode.com>
-       <19857.1142973455@sss.pgh.pa.us>
-In-Reply-To: <19857.1142973455@sss.pgh.pa.us>
-From: Greg Stark <gsstark@mit.edu>
-Organization: The Emacs Conspiracy; member since 1992
-Date: 21 Mar 2006 16:26:55 -0500
-Message-ID: <87acbjmqu8.fsf@stark.xeocode.com>
-Lines: 22
-User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.128 required=5 tests=[AWL=0.128]
-X-Spam-Score: 0.128
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Tom Lane <tgl@sss.pgh.pa.us> writes:
-
-> Greg Stark <gsstark@mit.edu> writes:
-> > That looks better both on average and in the worst case. Are the time
-> > constants that much worse that the merge sort still takes longer?
-> 
-> Keep in mind that this is only counting the number of
-> comparison-function calls; it's not accounting for any other effects.
-> In particular, for a large sort operation quicksort might win because of
-> its more cache-friendly memory access patterns.
-
-My question explicitly recognized that possibility. I'm just a little
-skeptical since the comparison function in Postgres is often not some simple
-bit of tightly optimized C code, but rather a complex locale sensitive
-comparison function or even a bit of SQL expression to evaluate.
-
-Cache effectiveness is may be a minimal factor anyways when the comparison is
-executing more than a minimal amount of code. And one extra comparison is
-going to cost a lot more too.
-
--- 
-greg
-
-
----------------------------(end of broadcast)---------------------------
-TIP 9: In versions below 8.0, the planner will ignore your desire to
-       choose an index scan if your joining column's datatypes do not
-       match
-
-From pgsql-hackers-owner+M81290@postgresql.org Tue Mar 21 16:48:00 2006
-Return-path: <pgsql-hackers-owner+M81290@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LLlxM22215
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 16:47:59 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 28A9867BBFD;
-       Tue, 21 Mar 2006 17:47:57 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 1B4849DCC25
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>; Tue, 21 Mar 2006 17:47:27 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 72535-05
-       for <pgsql-hackers-postgresql.org@localhost.postgresql.org>;
-       Tue, 21 Mar 2006 17:47:28 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id D27239DCC21
-       for <pgsql-hackers@postgresql.org>; Tue, 21 Mar 2006 17:47:24 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2LLlNpJ002194;
-       Tue, 21 Mar 2006 16:47:23 -0500 (EST)
-To: Greg Stark <gsstark@mit.edu>
-cc: "Dann Corbit" <DCorbit@connx.com>,
-   "Jonah H. Harris" <jonah.harris@gmail.com>, pgsql-hackers@postgresql.org,
-   "Jerry Sievers" <jerry@jerrysievers.com>
-Subject: Re: [HACKERS] qsort, once again 
-In-Reply-To: <87acbjmqu8.fsf@stark.xeocode.com> 
-References: <D425483C2C5C9F49B5B7A41F8944154757D6A1@postal.corporate.connx.com> <18732.1142967137@sss.pgh.pa.us> <87lkv3mu28.fsf@stark.xeocode.com> <19857.1142973455@sss.pgh.pa.us> <87acbjmqu8.fsf@stark.xeocode.com>
-Comments: In-reply-to Greg Stark <gsstark@mit.edu>
-       message dated "21 Mar 2006 16:26:55 -0500"
-Date: Tue, 21 Mar 2006 16:47:23 -0500
-Message-ID: <2193.1142977643@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Greg Stark <gsstark@mit.edu> writes:
-> My question explicitly recognized that possibility. I'm just a little
-> skeptical since the comparison function in Postgres is often not some simple
-> bit of tightly optimized C code, but rather a complex locale sensitive
-> comparison function or even a bit of SQL expression to evaluate.
-
-Yeah, I'd guess the same way, but OTOH at least a few people have
-reported that our qsort code is consistently faster than glibc's (and
-that was before this fix).  See this thread:
-http://archives.postgresql.org/pgsql-hackers/2005-12/msg00610.php
-
-Currently I believe that we only use our qsort on Solaris, not any other
-platform, so if you think that glibc's qsort is better then you've
-already got your wish.  It seems to need more investigation though.
-In particular, I'm thinking that the various adjustments we've made
-to the sort support code over the past month probably invalidate any
-previous testing of the point, and that we ought to go back and redo
-those comparisons.
-
-                       regards, tom lane
-
----------------------------(end of broadcast)---------------------------
-TIP 5: don't forget to increase your free space map settings
-
-From pgsql-hackers-owner+M81282@postgresql.org Tue Mar 21 14:09:22 2006
-Return-path: <pgsql-hackers-owner+M81282@postgresql.org>
-Received: from ams.hub.org (ams.hub.org [200.46.204.13])
-       by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id k2LK9KM11902
-       for <pgman@candle.pha.pa.us>; Tue, 21 Mar 2006 15:09:21 -0500 (EST)
-Received: from postgresql.org (postgresql.org [200.46.204.71])
-       by ams.hub.org (Postfix) with ESMTP id 6B1CF67BBF6;
-       Tue, 21 Mar 2006 16:09:18 -0400 (AST)
-X-Original-To: pgsql-hackers-postgresql.org@localhost.postgresql.org
-Received: from localhost (av.hub.org [200.46.204.144])
-       by postgresql.org (Postfix) with ESMTP id 0B2E19DCA0F;
-       Tue, 21 Mar 2006 16:08:50 -0400 (AST)
-Received: from postgresql.org ([200.46.204.71])
-       by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024)
-       with ESMTP id 54998-02; Tue, 21 Mar 2006 16:08:50 -0400 (AST)
-X-Greylist: from auto-whitelisted by SQLgrey-
-X-Greylist: from auto-whitelisted by SQLgrey-
-Received: from sss.pgh.pa.us (sss.pgh.pa.us [66.207.139.130])
-       by postgresql.org (Postfix) with ESMTP id C39619DC9E6;
-       Tue, 21 Mar 2006 16:08:45 -0400 (AST)
-Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1])
-       by sss.pgh.pa.us (8.13.1/8.13.1) with ESMTP id k2LK8flq019571;
-       Tue, 21 Mar 2006 15:08:41 -0500 (EST)
-To: Gary Doades <gpd@gpdnet.co.uk>
-cc: pgsql-performance@postgresql.org, pgsql-hackers@postgresql.org
-Subject: Re: [HACKERS] qsort again (was Re: [PERFORM] Strange Create Index behaviour) 
-In-Reply-To: <20781.1140046109@sss.pgh.pa.us> 
-References: <43F38867.6010701@gpdnet.co.uk> <19510.1140036968@sss.pgh.pa.us> <19779.1140038874@sss.pgh.pa.us> <43F39E53.1020009@gpdnet.co.uk> <20781.1140046109@sss.pgh.pa.us>
-Comments: In-reply-to Tom Lane <tgl@sss.pgh.pa.us>
-       message dated "Wed, 15 Feb 2006 18:28:29 -0500"
-Date: Tue, 21 Mar 2006 15:08:40 -0500
-Message-ID: <19570.1142971720@sss.pgh.pa.us>
-From: Tom Lane <tgl@sss.pgh.pa.us>
-X-Virus-Scanned: by amavisd-new at hub.org
-X-Spam-Status: No, score=0.113 required=5 tests=[AWL=0.113]
-X-Spam-Score: 0.113
-X-Mailing-List: pgsql-hackers
-List-Archive: <http://archives.postgresql.org/pgsql-hackers>
-List-Help: <mailto:majordomo@postgresql.org?body=help>
-List-Id: <pgsql-hackers.postgresql.org>
-List-Owner: <mailto:pgsql-hackers-owner@postgresql.org>
-List-Post: <mailto:pgsql-hackers@postgresql.org>
-List-Subscribe: <mailto:majordomo@postgresql.org?body=sub%20pgsql-hackers>
-List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>
-Precedence: bulk
-Sender: pgsql-hackers-owner@postgresql.org
-Status: OR
-
-Last month I wrote:
-> It seems clear that our qsort.c is doing a pretty awful job of picking
-> qsort pivots, while glibc is mostly managing not to make that mistake.
-
-I re-ran Gary's test script using the just-committed improvements to
-qsort.c, and got pretty nice numbers (attached --- compare to
-http://archives.postgresql.org/pgsql-performance/2006-02/msg00227.php).
-So it was wrong to blame his problems on the pivot selection --- the
-culprit was that ill-considered switch to insertion sort.
-
-                       regards, tom lane
-
-100 runtimes for latest port/qsort.c, sorted ascending:
-
-Time: 335.481 ms
-Time: 335.606 ms
-Time: 335.932 ms
-Time: 336.039 ms
-Time: 336.182 ms
-Time: 336.231 ms
-Time: 336.711 ms
-Time: 336.721 ms
-Time: 336.971 ms
-Time: 336.982 ms
-Time: 337.036 ms
-Time: 337.190 ms
-Time: 337.223 ms
-Time: 337.312 ms
-Time: 337.350 ms
-Time: 337.423 ms
-Time: 337.523 ms
-Time: 337.528 ms
-Time: 337.565 ms
-Time: 337.566 ms
-Time: 337.732 ms
-Time: 337.741 ms
-Time: 337.744 ms
-Time: 337.786 ms
-Time: 337.790 ms
-Time: 337.898 ms
-Time: 337.905 ms
-Time: 337.952 ms
-Time: 337.976 ms
-Time: 338.017 ms
-Time: 338.123 ms
-Time: 338.206 ms
-Time: 338.306 ms
-Time: 338.514 ms
-Time: 338.594 ms
-Time: 338.597 ms
-Time: 338.683 ms
-Time: 338.705 ms
-Time: 338.729 ms
-Time: 338.748 ms
-Time: 338.816 ms
-Time: 338.958 ms
-Time: 338.963 ms
-Time: 338.997 ms
-Time: 339.074 ms
-Time: 339.106 ms
-Time: 339.134 ms
-Time: 339.159 ms
-Time: 339.226 ms
-Time: 339.260 ms
-Time: 339.289 ms
-Time: 339.341 ms
-Time: 339.500 ms
-Time: 339.585 ms
-Time: 339.595 ms
-Time: 339.774 ms
-Time: 339.897 ms
-Time: 339.927 ms
-Time: 340.064 ms
-Time: 340.133 ms
-Time: 340.172 ms
-Time: 340.219 ms
-Time: 340.261 ms
-Time: 340.323 ms
-Time: 340.708 ms
-Time: 340.761 ms
-Time: 340.785 ms
-Time: 340.900 ms
-Time: 340.986 ms
-Time: 341.339 ms
-Time: 341.564 ms
-Time: 341.707 ms
-Time: 342.155 ms
-Time: 342.213 ms
-Time: 342.452 ms
-Time: 342.515 ms
-Time: 342.540 ms
-Time: 342.928 ms
-Time: 343.548 ms
-Time: 343.663 ms
-Time: 344.192 ms
-Time: 344.952 ms
-Time: 345.152 ms
-Time: 345.174 ms
-Time: 345.444 ms
-Time: 346.848 ms
-Time: 348.144 ms
-Time: 348.842 ms
-Time: 354.550 ms
-Time: 356.877 ms
-Time: 357.475 ms
-Time: 358.487 ms
-Time: 364.178 ms
-Time: 370.730 ms
-Time: 493.098 ms
-Time: 648.009 ms
-Time: 849.345 ms
-Time: 860.616 ms
-Time: 936.800 ms
-Time: 1727.085 ms
-
----------------------------(end of broadcast)---------------------------
-TIP 3: Have you checked our extensive FAQ?
-
-               http://www.postgresql.org/docs/faq
-