Saturday March 25 2006 9:36 pm, Ed L. wrote:
I have a performance riddle, hoping someone can point me in a
helpful direction. We have a pg 8.1.2 cluster using
Apache::Sessions and experiencing simple UPDATEs taking
sometimes 30+ seconds to do a very simply update, no foreign
keys, no triggers:
Table "public.sessions"
Column | Type | Modifiers
++
id | character(32) | not null
a_session | text |
Indexes:
"sessions_pkey" PRIMARY KEY, btree (id)
The table has 6800 rows over 18000 pages, and is getting a
minimum of many tens of thousands of updates per day with
queries like this:
UPDATE sessions SET a_session = ? WHERE id = ?
Ed
--
This is on an HP ia64 11.23 box with what appears to be gobs
of surplus CPU, I/ (it's on a SAN), and RAM, pretty high
query volume from 180 concurrent client connections.
Wondering if it is a locking issue, I set up logging to
capture existing locks every 10s with this query:
SELECT now(), dbu.usename as locker, l.mode as locktype, CASE
l.granted WHEN true THEN 'granted' ELSE 'pending' END as
status, pg_stat_get_backend_pid(S.backendid)
as pid, l.transaction as xid,
db.datname||'.'||n.nspname||'.'|| r.relname as relation, case
l.mode when 'AccessShareLock' then 1 when 'RowShareLock' then
2 when 'Row
ExclusiveLock' then 3 when 'ShareUpdateExclusiveLock' then 4
when 'ShareLock' then 5 when 'ShareRowExclusiveLock' then 6
when 'ExclusiveLock' then 7 else 100 end as
exclusivity, pg_stat_get_backend_activity(S.backendid) as
query FRM pg_user dbu,
(SELECT pg_stat_get_backend_idset() AS backendid) AS S,
pg_database db, pg_locks l, pg_class r, pg_namespace n
WHERE db.oid = pg_stat_get_backend_dbid(S.backendid)
AND dbu.usesysid = pg_stat_get_backend_userid(S.backendid)
AND l.pid = pg_stat_get_backend_pid(S.backendid)
AND l.relation = r.oid
AND l.database = db.oid
AND r.relnamespace = n.oid
RDER BY exclusivity DESC, db.datname, n.nspname, r.relname,
l.mode;"
--
I see what appear to be many single transactions holding
RowExclusiveLocks for sometimes 40-50 seconds while their
query shows "<IDLEin transaction".
2006-03-25 20:04:01.063873-08 | www | RowExclusiveLock |
granted
| 17192 | 270205914 | db1.public.sessions | 3 |
| <IDLE>
in transaction
2006-03-25 20:04:11.128632-08 | www | RowExclusiveLock |
granted
| 17192 | 270205914 | db1.public.sessions |
| 3 <IDLEin transaction
2006-03-25 20:04:21.215896-08 | www | RowExclusiveLock |
granted
| 17192 | 270205914 | db1.public.sessions |
| 3 <IDLEin transaction
I'm thinking that means the client is simply tweaking a row
and then failing to commit the change for 40-50 seconds. Is
that consistent? Is there something else obvious here to
explain the delays? Does this sound like a browser stop
button issue where they may be aborting the query that has the
lock, and then issuing another that waits on the first?
suggestions?
Thanks,
Ed
(end of broadcast)
TIP 3: Have you checked our extensive FAQ?