pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Brian Cox <brian.cox@ca.com>
To: Tom Lane [tgl@sss.pgh.pa.us] <tgl@sss.pgh.pa.us>
Cc: pgsql-performance@postgresql.org <pgsql-performance@postgresql.org>
Subject: Re: multiple threads inserting into the same table
Date: Mon, 23 Mar 2009 13:25:52 -0700
Message-ID: <49C7F050.7030505@ca.com> (raw)

Tom Lane [tgl@sss.pgh.pa.us] wrote:
> pg_stat_activity says those five threads are doing nothing except
> sitting around with open transactions.  You sure you don't have a bug on
> the application side?
> 
>                         regards, tom lane

This is a java app. A thread dump reveals that these 5 threads are all
asleep on a socket read to postgres (see below). DbUtils.java:2265 is:

session.connection().createStatement() 
.executeUpdate(((DatabaseInsert) insertObject).getInsertStmt(session));

This generates and executes a single SQL insert. Since, as you point 
out, postgres seems to think that this transaction isn't doing anything,
it's hard to figure out what the read is doing.

Brian


"DatabasePool.Thread1" prio=10 tid=0x27f04c00 nid=0x3b38 runnable 
[0x29e27000..0x29e281b0]
    java.lang.Thread.State: RUNNABLE
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:129)
	at 
org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
	at 
org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
	at 
org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
	at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:259)
	at 
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1182)
	at 
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:194)
	- locked <0x8975c878> (a org.postgresql.core.v3.QueryExecutorImpl)
	at 
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:336)
	at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:282)
	at 
com.mchange.v2.c3p0.impl.NewProxyStatement.executeUpdate(NewProxyStatement.java:64)
	at 
com.timestock.tess.util.DbUtils$DatabaseInsertTask.insertObject(DbUtils.java:2265)
	at 
com.timestock.tess.util.DbUtils$DatabaseInsertTask.call(DbUtils.java:2200)
	at 
com.timestock.tess.util.DbUtils$DatabaseInsertTask.call(DbUtils.java:2157)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:619)




view thread (9+ messages)  latest in thread

Message-ID: <49C7F050.7030505@ca.com>
Permalink:  ../49C7F050.7030505@ca.com/
Also on:    postgresql.org/message-id/49C7F050.7030505@ca.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: brian.cox@ca.com, tgl@sss.pgh.pa.us
  Subject: Re: multiple threads inserting into the same table
  In-Reply-To: <49C7F050.7030505@ca.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox