Re: [SQL] inserts/updates problem under stressing !

From: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
To: Vadim Mikheev <vadim(at)krs(dot)ru>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgreSQL(dot)org, pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] inserts/updates problem under stressing !
Date: 1999-07-26 06:49:11
Message-ID: Pine.GSO.3.96.SK.990726103105.10884D-100000@ra
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-sql

On Mon, 26 Jul 1999, Vadim Mikheev wrote:

> Date: Mon, 26 Jul 1999 14:26:06 +0800
> From: Vadim Mikheev <vadim(at)krs(dot)ru>
> To: Oleg Bartunov <oleg(at)sai(dot)msu(dot)su>
> Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-hackers(at)postgreSQL(dot)org,
> pgsql-sql(at)postgreSQL(dot)org
> Subject: Re: [SQL] inserts/updates problem under stressing !
>
> Oleg Bartunov wrote:
> >
> > >
> > > SELECT FOR UPDATE will not help: if there was no record for
> > > particular key then nothing will be locked and two records with
> > > the same key will be inserted.
> > >
> > > Oleg, use LOCK IN SHARE ROW EXCLUSIVE MODE.
> >
> > Thanks Vadim. Just tried this, but still I see a difference between
> > count hits (accumulated) from db and access_log. In my test these numbers are:
> > 95 and 109. So I lost 14 hits ! And no errors !
> > In my handler I have now:
> >
> > my $sth = $dbh->do("LOCK TABLE hits IN SHARE ROW EXCLUSIVE MODE");
> > my $sth = $dbh->do("SELECT acc_hits($1)") || die $dbh->errstr;
> >
> > am I right ?
>
> You should run LOCK and SELECT inside BEGIN/END (i.e. in
> the same transaction), do you?

Good question.

I use perl DBI interface to work with postgres and I supposed it does
transaction automatically. Will check it.
Aha, got the problem. Now everything works !!!

Tnanks again,

Oleg

So, here is a working handler to *accumulate* hit statistics.

package Apache::HitsDBI;
use Apache::Constants qw(:common);

use strict;
# preloaded in startup.pl
#use DBI ();

sub handler {
my $orig = shift;
my $url = $orig->uri;
if ( $orig->args() =~ /msg_id=(\d+)/ ) {
my $dbh = DBI->connect("dbi:Pg:dbname=discovery") || die DBI->errstr;
$dbh->{AutoCommit} = 0;
my $sth = $dbh->do("LOCK TABLE hits IN SHARE ROW EXCLUSIVE MODE") || die $dbh->errstr;
my $sth = $dbh->do("SELECT acc_hits($1)") || die $dbh->errstr;
my $rc = $dbh->commit || die $dbh->errstr;
}
return OK;
}

1;
__END__

Oleg
>
> Vadim
>

_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg(at)sai(dot)msu(dot)su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Adriaan Joubert 1999-07-26 06:57:18 Re: [HACKERS] Re: [SQL] inserts/updates problem under stressing !
Previous Message Oleg Bartunov 1999-07-26 06:28:57 Re: [HACKERS] Re: [SQL] inserts/updates problem understressing !

Browse pgsql-sql by date

  From Date Subject
Next Message Adriaan Joubert 1999-07-26 06:57:18 Re: [HACKERS] Re: [SQL] inserts/updates problem under stressing !
Previous Message Oleg Bartunov 1999-07-26 06:28:57 Re: [HACKERS] Re: [SQL] inserts/updates problem understressing !