[Pgpool-general] autovacuum stuck on a table for 18+ hours, consuming lots of CPU time

Tatsuo Ishii ishii at sraoss.co.jp
Wed Nov 23 02:16:34 UTC 2011


I think you'd better post to pgsql-general since your question is
nothing related to pgpool.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp

> Greetings,
> I'm running PostgreSQL-9.0.4 on a Linux-x86_64 cluster with 1 master,
> and two streaming replication slaves.  Since late yesterday, the load
> on the server has been noticably higher (5.00+) than normal (generally
> under 1.00).  I investigated, and found that for the past ~18 hours,
> there's one autovacuum process that has been running, and not making
> any obvious progress:
> 
> select procpid,query_start,current_query from pg_stat_activity where
> current_query LIKE 'autovacuum%' ;
>  procpid |          query_start          |              current_query
> ---------+-------------------------------+-----------------------------------------
>    30188 | 2011-11-21 22:42:26.426315-08 | autovacuum: VACUUM
> public.nppsmoketests
> (1 row)
> 
> select c.oid,c.relname,l.pid,l.mode,l.granted from pg_class c join
> pg_locks l on c.oid=l.relation where l.pid='30188' order by l.pid;
>   oid  |              relname               |  pid  |           mode
>         | granted
> -------+------------------------------------+-------+--------------------------+---------
>  72112 | nppsmoketests                      | 30188 |
> ShareUpdateExclusiveLock | t
>  72617 | nppsmoketests_pkey                 | 30188 | RowExclusiveLock
>         | t
>  72619 | nppsmoketests_bug_idx              | 30188 | RowExclusiveLock
>         | t
>  72620 | nppsmoketests_active_idx           | 30188 | RowExclusiveLock
>         | t
>  72621 | nppsmoketests_arch_idx             | 30188 | RowExclusiveLock
>         | t
>  72622 | nppsmoketests_branch_idx           | 30188 | RowExclusiveLock
>         | t
>  72623 | nppsmoketests_current_status_idx   | 30188 | RowExclusiveLock
>         | t
>  72624 | nppsmoketests_build_type_idx       | 30188 | RowExclusiveLock
>         | t
>  72625 | nppsmoketests_gpu_idx              | 30188 | RowExclusiveLock
>         | t
>  72626 | nppsmoketests_os_idx               | 30188 | RowExclusiveLock
>         | t
>  72627 | nppsmoketests_owner_idx            | 30188 | RowExclusiveLock
>         | t
>  72628 | nppsmoketests_regressioncl_idx     | 30188 | RowExclusiveLock
>         | t
>  72629 | nppsmoketests_subtest_idx          | 30188 | RowExclusiveLock
>         | t
>  72630 | nppsmoketests_suiteid_idx          | 30188 | RowExclusiveLock
>         | t
>  72631 | nppsmoketests_suiteid_testname_idx | 30188 | RowExclusiveLock
>         | t
>  72632 | nppsmoketests_testcl_idx           | 30188 | RowExclusiveLock
>         | t
>  72633 | nppsmoketests_testname_idx         | 30188 | RowExclusiveLock
>         | t
>  80749 | nppsmoketests_osversion_idx        | 30188 | RowExclusiveLock
>         | t
> (18 rows)
> 
> When I strace PID 30188, I see tons of this scrolling past quickly,
> but I'm not really sure what it means beyond a 'Timeout' not looking
> good:
> select(0, NULL, NULL, NULL, {0, 32000}) = 0 (Timeout)
> lseek(95, 753901568, SEEK_SET)          = 753901568
> read(95, "\202\1\0\0\260\315\250\245\1\0\0\0\220\0\360\20\360\37\4
> \0\0\0\0p\237\0\1\360\236\0\1"..., 8192) = 8192
> lseek(95, 753917952, SEEK_SET)          = 753917952
> read(95, "\202\1\0\0 N\253\245\1\0\0\0\220\0\360\20\360\37\4
> \0\0\0\0p\237\0\1\360\236\0\1"..., 8192) = 8192
> select(0, NULL, NULL, NULL, {0, 32000}) = 0 (Timeout)
> lseek(95, 768606208, SEEK_SET)          = 768606208
> read(95, "\204\1\0\0h!~\233\1\0\0\0\230\0\360\20\360\37\4
> \0\0\0\0x\237\360\0\0\237\360\0"..., 8192) = 8192
> lseek(95, 753934336, SEEK_SET)          = 753934336
> read(95, "\202\1\0\0 &\275\245\1\0\0\0\220\0\360\20\360\37\4
> \0\0\0\0p\237\0\1\360\236\0\1"..., 8192) = 8192
> select(0, NULL, NULL, NULL, {0, 32000}) = 0 (Timeout)
> read(95, "\202\1\0\0\10\33\276\245\1\0\0\0\220\0\360\20\360\37\4
> \0\0\0\0p\237\0\1\360\236\0\1"..., 8192) = 8192
> lseek(95, 753958912, SEEK_SET)          = 753958912
> read(95, "\202\1\0\0x\317\307\245\1\0\0\0\220\0\360\20\360\37\4
> \0\0\0\0p\237\0\1\360\236\0\1"..., 8192) = 8192
> select(0, NULL, NULL, NULL, {0, 32000}) = 0 (Timeout)
> lseek(95, 768614400, SEEK_SET)          = 768614400
> 
> An old thread suggests that this is a stuck spinlock:
> http://archives.postgresql.org/pgsql-performance/2009-05/msg00455.php
> 
> I'm using the defaults for all the *vacuum* options in
> postgresql.conf, except for:
> log_autovacuum_min_duration = 2500
> 
> At this point, I'm not sure what I can safely do to either terminate
> this autovacuum process, or kick it into making progress again?
> 
> thanks
> _______________________________________________
> Pgpool-general mailing list
> Pgpool-general at pgfoundry.org
> http://pgfoundry.org/mailman/listinfo/pgpool-general


More information about the Pgpool-general mailing list