Unix Technical Forum

Minimizing dead tuples caused by update triggers

This is a discussion on Minimizing dead tuples caused by update triggers within the Pgsql Performance forums, part of the PostgreSQL category; --> I've been fighting with the common workarounds for inadequate response times on select count(*) and min(),max() on tables with ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > Pgsql Performance

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-19-2008, 11:43 AM
Dan Harris
 
Posts: n/a
Default Minimizing dead tuples caused by update triggers

I've been fighting with the common workarounds for inadequate response
times on select count(*) and min(),max() on tables with tens of
millions of rows for quite a while now and understand the reasons for
the table scans.

I have applications that regularly poll a table ( ideally, the more
frequent, the better ) to learn the most recent data inside it as well
as the # of rows in it ( among a few other things ). As the databases
have grown in size, these summarizations could no longer be done on
the fly, so I wrote a database wrapper API that tracks those values
internally.

This wrapper has grown very complex and is difficult to manage across
different systems. What I'd like to do instead is implement triggers
for insert, updates, and deletes to check and/or replace a value in a
"table_stats", representing table count, min/max dates, and a few
other costly operations.. that can then be queried in short order. I
know this is a fairly common thing to do.

The thing that concerns me is dead tuples on the table_stats table. I
believe that every insert of new data in one of the monitored tables
will result in an UPDATE of the table_stats table. When thousands
( or millions ) of rows are inserted, the select performance ( even
trying with an index ) on table_stats slows down in a hurry. If I
wrap the inserts into large transactions, will it only call the update
on table_states when I commit?

Obviously I want to vacuum this table regularly to recover this. The
problem I'm running into is contention between VACUUM ( not full ) and
pg_dump ( version 8.0.12 ). My system backups takes 6 hours to run
pg_dump on a 400GB cluster directory. If the vacuum command fires
during the dump, it forces an exclusive lock and any queries will hang
until pg_dump finishes.

If I have to wait until pg_dump is finished before issuing the VACUUM
command, everything slows down significantly as the dead tuples in
table_stats pile up.

What strategy could I employ to either:

1. resolve the contention between pg_dump and vacuum, or
2. reduce the dead tuple pile up between vacuums

Thanks for reading

-Dan

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-19-2008, 11:43 AM
Tom Lane
 
Posts: n/a
Default Re: Minimizing dead tuples caused by update triggers

Dan Harris <fbsd@drivefaster.net> writes:
> The thing that concerns me is dead tuples on the table_stats table. I
> believe that every insert of new data in one of the monitored tables
> will result in an UPDATE of the table_stats table. When thousands
> ( or millions ) of rows are inserted, the select performance ( even
> trying with an index ) on table_stats slows down in a hurry.


Yup. FWIW, 8.3's "HOT" tuple updates might help this quite a lot.
Not a lot to be done about it in 8.0.x though :-(

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-19-2008, 11:43 AM
Dimitri Fontaine
 
Posts: n/a
Default Re: Minimizing dead tuples caused by update triggers

Le jeudi 20 décembre 2007, Decibel! a écritÂ*:
> A work-around others have used is to have the trigger just insert
> into a 'staging' table and then periodically take the records from
> that table and summarize them somewhere else.


And you can even use the PgQ skytools implementation to easily have this kind
of 'staging'-table with a producer and one or many subscribers. See those
references if you're interrested:
http://kaiv.wordpress.com/2007/10/19...framework-pgq/
http://skytools.projects.postgresql....c/pgq-sql.html
http://skytools.projects.postgresql....pgq-admin.html
http://skytools.projects.postgresql....q-nodupes.html

Hope this helps, regards,
--
dim

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQBHak6dlBXRlnbh1bkRAppzAJ4pUwBTpAxvoJW35pmz3p cAxOrbqwCgh33I
1i5FtppUE8Oo3vy1obTR94c=
=uJiQ
-----END PGP SIGNATURE-----

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 06:28 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.UnixAdminTalk.com