X-Original-To: pgsql-patches-postgresql.org@postgresql.org Received: from localhost (mx1.hub.org [200.46.208.251]) by postgresql.org (Postfix) with ESMTP id E88A09FB2AE for ; Sat, 29 Jul 2006 03:51:39 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.208.251]) (amavisd-new, port 10024) with ESMTP id 35690-07 for ; Sat, 29 Jul 2006 03:51:10 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey- Received: from joeconway.com (joeconway.com [68.15.9.201]) by postgresql.org (Postfix) with ESMTP id 2ED9A9FB28C for ; Sat, 29 Jul 2006 03:50:32 -0300 (ADT) Received: from [192.168.4.40] (account jconway [192.168.4.40] verified) by joeconway.com (CommuniGate Pro SMTP 4.1.8) with ESMTP-TLS id 4120137; Fri, 28 Jul 2006 23:50:05 -0700 Message-ID: <44CB051D.6090609@joeconway.com> Date: Fri, 28 Jul 2006 23:50:05 -0700 From: Joe Conway User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.13) Gecko/20060501 Fedora/1.7.13-1.1.fc5 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tom Lane CC: Bruce Momjian , Christopher Kings-Lynne , "Patches (PostgreSQL)" , Andrew Dunstan , Bernd Helmle , Peter Eisentraut , Susanne Ebrecht Subject: Re: [HACKERS] 8.2 features? References: <200607281947.k6SJlOI02533@momjian.us> <473.1154116455@sss.pgh.pa.us> <44CA76A9.8070101@joeconway.com> In-Reply-To: <44CA76A9.8070101@joeconway.com> Content-Type: multipart/mixed; boundary="------------010308050006080007010600" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.099 tagged_above=0 required=5 tests=AWL, SPF_HELO_PASS, SPF_PASS X-Spam-Level: X-Archive-Number: 200607/309 X-Sequence-Number: 20463 This is a multi-part message in MIME format. --------------010308050006080007010600 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Joe Conway wrote: > Tom Lane wrote: >> I thought Joe was off in a corner doing a whole new version. >> (I'm willing to help if he needs help...) > > Yeah, I was going to post the latest tonight. Sorry for the delay. Ever see the movie "The Money Pit"? This afternoon I started to think I lived in that house :-( Anyway, as mentioned below, I think the attached works well for the "INSERT ... VALUES (...), (...), ..." and related cases. There are still things wrong that I have not even tried to fix with respect to FROM clause VALUES lists. Namely column aliases have no effect, and neither does "ORDER BY" clause (I'm pretty sure addRangeTableEntryForValues needs work among other places). From a memory usage standpoint, I got the following using 1,000,000 values targetlists: sql length = 6000032 NOTICE: enter transformInsertStmt MessageContext: 478142520 total in 66 blocks; 5750400 free (3 chunks); 472392120 used NOTICE: enter transformRangeValues MessageContext: 478142520 total in 66 blocks; 5749480 free (6 chunks); 472393040 used NOTICE: enter updateTargetListEntry MessageContext: 629137464 total in 84 blocks; 44742464 free (999991 chunks); 584395000 used NOTICE: exit transformInsertStmt MessageContext: 629137464 total in 84 blocks; 44742408 free (999991 chunks); 584395056 used NOTICE: start ExecInitValuesScan MessageContext: 1015013432 total in 130 blocks; 6614008 free (8 chunks); 1008399424 used NOTICE: end ExecInitValuesScan MessageContext: 1015013432 total in 130 blocks; 6614008 free (8 chunks); 1008399424 used ExecutorState: 8024632 total in 3 blocks; 21256 free (8 chunks); 8003376 used This shows original SQL statement is about 6MB, by the time we get to parse analysis we're at almost 500 MB, and that memory is never recovered. Transforming from ResTarget to TargetEntry chews up about 100MB. Then between exiting transformInsertStmt and entering ExecInitValuesScan we double in memory usage to about 1 GB. It isn't shown here, but we add another 200 MB or so during tuple projection. So we top out at about 1.2 GB. Note that mysql tops out at about 600 MB for this same SQL. I'm not sure what if anything can be done to improve the above -- I'm open to suggestions. Please note that this patch requires an initdb, although I have not yet bothered to bump CATVERSION. Thanks for help, comments, suggestions, etc... Joe > > I'm afraid though that after 2 or so days heading down the last path you > suggested (namely making a new jointree leaf node) I was having trouble, > and at the same time came to the conclusion that adding a new RTE was > alot cleaner and made more sense to me. So I'm hoping you won't want to > send me back to the drawing board again. I believe I have cleaned up the > things you objected to: > > 1. Now I'm not doing both alternative -- the targetlists are only > attached to the RTE from the point of parse analysis onward. > 2. I've eliminated the tuplestore in favor of runtime evaluation > of the targetlists which are in an array (allowing forward or > backward scanning -- although I haven't tested the latter yet). > > I've also solved the INSERT related issues that I had earlier: > > 1. Fixed the rules regression test -- now all regression tests pass > 2. Fixed evaluation of DEFAULT values > 3. Improved memory consumption and speed some more -- basically > we are approximately equal to mysql as long as we don't swap, > and we consume about twice the RAM as mysql instead of several > times as much. I have more analysis of memory use I'd also like > to share later. > 4. I think the INSERT part of this is ready to go basically, but > I need a bit more time to test corner cases. > > I've made some progress on "SELECT ... FROM (VALUES ...) AS ..." > > 1. No more shift/reduce issues > 2. The ValuesScan work and memory improvements mentioned above > applies here too. > 3. This part still needs the most work though. > > I'll post a patch in a few hours -- there is some debug code in there > currently that I should clean up before I send it to the list. > > BTW, I'm reserving Saturday, Sunday, and Monday (taking Monday off from > my day job) to work on outstanding issues. I can continue to work > through the end of next Friday, 4 August. After that I'm heading to > Germany on a business trip and my "spare" time will evaporate for a few > weeks. > --------------010308050006080007010600 Content-Type: application/x-gzip; name="multi-insert-r17.diff.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="multi-insert-r17.diff.gz" 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 MmkBAA== --------------010308050006080007010600--