X-Original-To: pgsql-performance-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 2865052AFD for ; Sat, 30 Jul 2005 18:06:56 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 49659-01 for ; Sat, 30 Jul 2005 21:06:51 +0000 (GMT) Received: from larry.aptalaska.net (larry.aptalaska.net [64.186.96.3]) by svr1.postgresql.org (Postfix) with ESMTP id DAECB52AC9 for ; Sat, 30 Jul 2005 18:06:50 -0300 (ADT) Received: from [192.168.98.9] (rdbck-static-287.palmer.mtaonline.net [64.4.232.33]) (authenticated bits=0) by larry.aptalaska.net (8.13.4/8.13.4) with ESMTP id j6ULKa1q008031 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 30 Jul 2005 13:20:37 -0800 Message-ID: <42EBEBE9.4020504@aptalaska.net> Date: Sat, 30 Jul 2005 13:06:49 -0800 From: Matthew Schumacher User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050317) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tom Lane Cc: pgsql-performance@postgresql.org Subject: Re: Performance problems testing with Spamassassin 3.1.0 References: <42E80C28.2040608@aptalaska.net> <1122532023.25574.1.camel@localhost.localdomain> <42E9749F.6000709@aptalaska.net> <1122616211.5691.340.camel@lamb.mcmillan.net.nz> <42EA6966.8090402@aptalaska.net> <1122668371.5691.352.camel@lamb.mcmillan.net.nz> <19405.1122670917@sss.pgh.pa.us> <42EAA410.9010700@aptalaska.net> <27897.1122748133@sss.pgh.pa.us> In-Reply-To: <27897.1122748133@sss.pgh.pa.us> X-Enigmail-Version: 0.91.0.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam-Bayes: Learn: unavailable X-Scanned-By: MIMEDefang 2.52 on 64.186.96.3 X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0.009 tagged_above=0 required=5 tests=AWL X-Spam-Level: X-Archive-Number: 200507/496 X-Sequence-Number: 13737 Tom Lane wrote: > I looked into this a bit. It seems that the problem when you wrap the > entire insertion series into one transaction is associated with the fact > that the test does so many successive updates of the single row in > bayes_vars. (VACUUM VERBOSE at the end of the test shows it cleaning up > 49383 dead versions of the one row.) This is bad enough when it's in > separate transactions, but when it's in one transaction, none of those > dead row versions can be marked "fully dead" yet --- so for every update > of the row, the unique-key check has to visit every dead version to make > sure it's dead in the context of the current transaction. This makes > the process O(N^2) in the number of updates per transaction. Which is > bad enough if you just want to do one transaction per message, but it's > intolerable if you try to wrap the whole bulk-load scenario into one > transaction. > > I'm not sure that we can do anything to make this a lot smarter, but > in any case, the real problem is to not do quite so many updates of > bayes_vars. > > How constrained are you as to the format of the SQL generated by > SpamAssassin? In particular, could you convert the commands generated > for a single message into a single statement? I experimented with > passing all the tokens for a given message as a single bytea array, > as in the attached, and got almost a factor of 4 runtime reduction > on your test case. > > BTW, it's possible that this is all just a startup-transient problem: > once the database has been reasonably well populated, one would expect > new tokens to be added infrequently, and so the number of updates to > bayes_vars ought to drop off. > > regards, tom lane > The spamassassins bayes code calls the _put_token method in the storage module a loop. This means that the storage module isn't called once per message, but once per token. I'll look into modifying it to so that the bayes code passes a hash of tokens to the storage module where they can loop or in the case of the pgsql module pass an array of tokens to a procedure where we loop and use temp tables to make this much more efficient. I don't have much time this weekend to toss at this, but will be looking at it on Monday. Thanks, schu