[Rt-devel] PAINFUL: Update in sessions table
Christian Loos
cloos at netcologne.de
Thu Apr 1 12:36:05 EDT 2010
Am 01.04.2010 17:40, schrieb Alexander Finger:
> Folks,
>
> we've installed a new RT instance a few days ago and encounter a
> painful! slowness in creating tickets.
>
> We are running 3.8.4 on Linux 2.6.18-128.1.10.el5xen #1 SMP Wed Apr
> 29 14:24:51 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux, Redhat,
>
> Memory
> total used free shared buffers cached
> Mem: 2883584 2641640 241944 0 23448 474552
> -/+ buffers/cache: 2143640 739944
> Swap: 524280 0 524280
>
> iostat not worth mentioning
>
> CPU: 2 x Quad-Core AMD Opteron(tm) Processor 8376 HE
>
>
> Here's my pain point:
>
> LOG: duration: 2343.904 ms statement: EXECUTE <unnamed> [PREPARE:
> UPDATE sessions SET a_session = $1 WHERE id = $2]
> LOG: duration: 999.986 ms statement: EXECUTE <unnamed> [PREPARE:
> SELECT a_session FROM sessions WHERE id = $1 FOR UPDATE]
>
> rt3=# select count(id) from sessions;
> count
> -------
> 4739
> (1 row)
>
> = nothing in that table..
>
> The table has an index:
> sessions_pkey CREATE UNIQUE INDEX sessions_pkey ON sessions USING
> btree (id) Primary key
>
> If I do the thing manually, results are a bit better:
>
> rt3=# EXPLAIN ANALYZE select * from sessions where
> id='014a8b48caa04bcc1538ba91535dddfe';
> QUERY PLAN
> --------------------------------------------------------------------------------------------------------------------------
> Index Scan using sessions_pkey on sessions (cost=0.00..6.01 rows=1
> width=172) (actual time=0.034..0.036 rows=1 loops=1)
> Index Cond: (id = '014a8b48caa04bcc1538ba91535dddfe'::bpchar)
> Total runtime: 0.080 ms
> (3 rows)
>
>
> Updating a session is reasonable as well on the db:
>
> rt3=# EXPLAIN ANALYZE UPDATE sessions SET a_session =
> 'BQcDAAAAAgQRD1JUOjpDdXJyZW50VXNlcgMAAAAEBBEMUlQ6OkkxOE46OmVuAwAAAAAAAAAKTGFu\012Z0hhbmRsZQoFVXNlcnMAAAAFdGFibGUEAwAAAAAAAAAGdmFsdWVzBAMAAAACCIEAAAAEbGFuZwiB\012AAAABG5hbWUAAAAHZmV0Y2hlZAAAAAtDdXJyZW50VXNlcgogMDE0YThiNDhjYWEwNGJjYzE1Mzhi\012YTkxNTM1ZGRkZmUAAAALX3Nlc3Npb25faWQ=\012'
> WHERE id='014a8b48caa04bcc1538ba91535dddfe';
> QUERY PLAN
> --------------------------------------------------------------------------------------------------------------------------
> Index Scan using sessions_pkey on sessions (cost=0.00..6.01 rows=1
> width=146) (actual time=0.042..0.044 rows=1 loops=1)
> Index Cond: (id = '014a8b48caa04bcc1538ba91535dddfe'::bpchar)
> Total runtime: 0.138 ms
> (3 rows)
>
>
>
>
> This is from a "clean" test setup, eg no users; I put postgres into
> full log mode to get all queries.
>
> grep a_session postgresql-Thu.log_single_creation
> SELECT a_session FROM sessions WHERE id = $1 FOR UPDATE]
> UPDATE sessions SET a_session = $1 WHERE id = $2]
> SELECT a_session FROM sessions WHERE id = $1 FOR UPDATE]
> UPDATE sessions SET a_session = $1 WHERE id = $2]
> SELECT a_session FROM sessions WHERE id = $1 FOR UPDATE]
> UPDATE sessions SET a_session = $1 WHERE id = $2]
>
> During the creation the sessions table gets accessed 6 times, each
> taking 1-2 seconds..which accounts 100% for the slowness we are
> experiencing.
>
> I'm a bit surprised as I have not seen this behaviour before (ever,
> that means "not since 1995" or so ;-)) and wonder what's going wrong
> here.
>
> I did my bit of googling around and could not find the rtfm to fix
> that, but if anybody has one, please let me know.
>
> Thanks
> Alex
> _______________________________________________
> List info: http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-devel
>
Just look at sbin/rt-clean-sessions
Chris
More information about the rt-devel
mailing list