Re: Autovacuum/Analyze Doesn't seem to be running properly - Mailing list pgsql-admin

From Laurenz Albe
Subject Re: Autovacuum/Analyze Doesn't seem to be running properly
Date
Msg-id aa2145cd2bb6033b2f1c900b90d2c13520144ec1.camel@cybertec.at
Whole thread Raw
In response to Autovacuum/Analyze Doesn't seem to be running properly  (Chris Kim <christopherkim22@gmail.com>)
Responses Re: Autovacuum/Analyze Doesn't seem to be running properly
List pgsql-admin
On Mon, 2020-03-02 at 19:57 -0700, Chris Kim wrote:
> I have a cluster with these parameters (no changed settings for any of the database/tables):
>  
>  autovacuum                          | on
                                            
 
>  autovacuum_analyze_scale_factor     | 0.05
                                            
 
>  autovacuum_analyze_threshold        | 25
                                            
 
>  autovacuum_freeze_max_age           | 200000000
                                            
 
>  autovacuum_max_workers              | 6
                                            
 
>  autovacuum_multixact_freeze_max_age | 400000000
                                           
 
>  autovacuum_naptime                  | 15s
                                           
 
>  autovacuum_vacuum_cost_delay        | 20ms
                                           
 
>  autovacuum_vacuum_cost_limit        | -1
                                            
 
>  autovacuum_vacuum_scale_factor      | 0.1  
>  autovacuum_vacuum_threshold         | 25
                                            
 
>  autovacuum_work_mem                 | -1
> 
> I have about 20 database with thousands of tuples (live and dead) but when I look at the pg_stat_user_tables within
eachdatabase:
 
> SELECT schemaname, relname, n_live_tup, n_dead_tup, last_autovacuum, last_analyze
> FROM pg_stat_user_tables;
> 
> all n_live_tups are 0 and all dead tups are 0, with null data for last_vacuum, and last_analyze which seems very odd
tome.
 
> 
> I can see there's live rows with select count and then I analyze a database, then I see live and dead tuples, and
last_analyzeshows the timestamp of when I just ran ANALYZE;
 
> 
> Am I missing something here or is this abnormal behaviour?
> 
> I'm also seeing my databases are above 90% towards hitting my autovacuum_max_freeze-age using this command.
> SELECT freez, txns, ROUND(100*(txns/freez::float)) AS perc, datname
>   FROM (SELECT foo.freez::int, age(datfrozenxid) AS txns, datname.
>   FROM pg_database d JOIN (SELECT setting AS freez FROM pg_settings WHERE name = 'autovacuum_freeze_max_age') AS foo
>   ON (true) WHERE d.datallowconn) AS foo2 ORDER BY 3 DESC, 4 ASC;
> 
> I also have looked for vacuum via ps -ef | grep vacuum but didn't get any return.
> 
> And select * from pg_stat_progress_vacuum shows nothing as well.
> 
> I shouldn't have to create cron jobs to run analyze and vacuum manually for each database, but I don't know how to
furtherinvestigate this issue.
 
> 
> Has anyone seen this before? Any advise would be greatly appreciated!

Some ideas:

- Did somebody run

   SELECT pg_stat_reset();

  That would reset the statistics and explain that you see nothing in "pg_stat_user_tables".

- After you ANALYZE the database, do you see something in "pg_stat_user_tables"?
  You should see something then.

- Another explaination for the missing statistics could be a problem with the
  statistics collector process.  Do you see and pertinent errors in the database log?

  If you restart the database, do you get errors from the statistics collector?
  Does a restart fix the problem?

- Are the "track_activities" and "track_counts" parameters set to on?

- Hitting 90% of autovacuum_freeze_max_age is no problem.
  It only means that you'll get some anti-wraparound autovacuums some time soon.

Yours,
Laurenz Albe
-- 
Cybertec | https://www.cybertec-postgresql.com




pgsql-admin by date:

Previous
From: Chris Kim
Date:
Subject: Autovacuum/Analyze Doesn't seem to be running properly
Next
From: Raj kumar
Date:
Subject: Reg: connection is getting closed when doing select count(*)