Received: from localhost (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 07D6A476C72 for ; Fri, 1 Nov 2002 16:27:36 -0500 (EST) Received: from ece.rice.edu (ece.rice.edu [128.42.4.34]) by postgresql.org (Postfix) with ESMTP id 9511D476F9C for ; Fri, 1 Nov 2002 16:27:28 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by ece.rice.edu (Postfix) with SMTP id 10F8D68A9F; Fri, 1 Nov 2002 15:27:30 -0600 (CST) Received: from localhost (localhost [127.0.0.1]) by ece.rice.edu (Postfix) with ESMTP id CA9A968A9E; Fri, 1 Nov 2002 15:27:29 -0600 (CST) Received: from wallace.ece.rice.edu (wallace.ece.rice.edu [128.42.12.154]) by ece.rice.edu (Postfix) with ESMTP id 1259968A9A; Fri, 1 Nov 2002 15:27:29 -0600 (CST) Received: from reedstrm by wallace.ece.rice.edu with local (Exim 3.36 #1 (Debian)) id 187jKC-00014R-00; Fri, 01 Nov 2002 15:27:28 -0600 Date: Fri, 1 Nov 2002 15:27:28 -0600 From: "Ross J. Reedstrom" To: Andrew Perrin Cc: chester c young , pgsql-sql@postgresql.org Subject: Re: unnecessary updates Message-ID: <20021101212728.GB967@wallace.ece.rice.edu> Mail-Followup-To: "Ross J. Reedstrom" , Andrew Perrin , chester c young , pgsql-sql@postgresql.org References: <20021030164243.79844.qmail@web12701.mail.yahoo.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4i X-Virus-Scanned: by AMaViS snapshot-20020300 X-DCC--Metrics: ece.rice.edu 1067; Body=1 Fuz1=1 Fuz2=1 X-Virus-Scanned: by AMaViS new-20020517 X-Archive-Number: 200211/19 X-Sequence-Number: 10161 Another way to approach this would be to add a trigger to your table in the database, that rejects updates that don't change any values. You'd basically have to hard code that same logic (new.a != old.a or new.b != old.b ...) and it'd fire on every update, so you're talking about trading computational cycles for savings in diskspace (and vacuum time). Like all things, it's a tradoff. Only way to tell for your case is to try it, I'd guess. It'd be kind of interesting to know if this would be useful, but you'd need to write a tool to analyze your tables before vacuum, to determine if the dead tuples differ from the current values (or from each other). Ross On Wed, Oct 30, 2002 at 01:02:26PM -0500, Andrew Perrin wrote: > One strategy is to use some sort of middleware that takes care of this. On > a project I did a few years ago, I used a perl module that read the record > from Postgres and made it into a perl object. The object contained a > variable, "changed", that reflected whether anything had actually changed > in the object. Finally, there was an object method put() that took care of > updating the database. put() checked the changed property and simply > silently finished unless changed was true. > > ap > > ---------------------------------------------------------------------- > Andrew J Perrin - http://www.unc.edu/~aperrin > Assistant Professor of Sociology, U of North Carolina, Chapel Hill > clists@perrin.socsci.unc.edu * andrew_perrin (at) unc.edu > > > On Wed, 30 Oct 2002, chester c young wrote: > > > When doing database work over the web, especially when many records are > > on one page, *many* updates get posted to pg that do not change the > > record. Eg, the page may contain 50 records, the user changes 1, and > > submits. > > > > I assume that a no-change update takes the same resources as a "real" > > update, ie, a new block is allocated to write the record, the record > > written, indicies are rerouted to the new block, and the old block > > needs to be vacuumed later. Is this true? > > > > In SQL, the only way I know to prevent this thrashing is to write the > > update with an elaborate where clause, eg, "update ... where pk=1 and > > (c1!='v1' or c2!='v2' or ... )". This adds cost both to the app server > > and to pg - is the cost justified? > > > > Finally, is there anyway to flag pg to ignore no-change updates? This > > seems to me to me the most efficient way of handling the needless work. > > > > thanks > > chester > > > > __________________________________________________ > > Do you Yahoo!? > > HotJobs - Search new jobs daily now > > http://hotjobs.yahoo.com/ > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 6: Have you searched our list archives? > > > > http://archives.postgresql.org > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)