Skip to content

Instantly share code, notes, and snippets.

@mydreambei-ai
Last active September 30, 2016 06:13
Show Gist options
  • Save mydreambei-ai/e30ad5286d2cd6a8aaa7f5ae7ab0c96c to your computer and use it in GitHub Desktop.
Save mydreambei-ai/e30ad5286d2cd6a8aaa7f5ae7ab0c96c to your computer and use it in GitHub Desktop.

Postgresql 如何trigger autovacuum and analyze

开启autovacuum的前提条件是打开track_counts。因为系统需要根据跟踪到的tuples计数和阀值进行比较来决定是否出发autovacuum 或 autoanalyze

  1. autovacuum 是否开启自动vacuum, analyze.
  2. log_autovacuum_min_duration 阀值,用于度量是否需要记录下autovacuum的动作到log里面.(-1表示禁止,0表示记录所有)
  3. autovacuum_max_workers 用于指定整个数据库机器同一时间点允许的autovacuum后台进程(不包括lanucher进程)
  4. autovacuum_naptime 两个autovacuum或autoanalyze允许周期间的间隔时间。为了看效果,我们在下面的例子把这个值设置为1S。
  5. autovacuum_vacuum_threshold 最小触发vacuum的度量值(计数器记录update,delete的tuples)
  6. autovacuum_analyze_threshold 最小触发analyze的度量值(计数器记录insert,update,delete的tuples)
  7. autovacuum_vacuum_scale_factor 当前reltuples乘以autovacuum_vacuum_scale_factor
  8. autovacuum_analyze_scale_factor 当前reltuples乘以autovacuum_analyze_scale_factor (注意autovacuum和autoanalyze是分别计数的,不要混淆)

假设x为update的tuples计数值,y为delete的tuples计数值. 假设a为update的tuples计数值,b为delete的tuples计数值,c为insert的tuples计数值.

何时发生autoanalyze ? (a+b+c) > (autovacuum_analyze_threshold * reltuples + autovacuum_analyze_threshold)

何时发生autovacuum ? (x+y) > (autovacuum_vacuum_scale_factor * reltuples + autovacuum_vacuum_threshold)

(reltuples: select reltuples from pg_class where relname = )

(x, a: select n_tup_upd from pg_stat_all_tables where relid='yyy'::regclass;) (y, b: select n_tup_del from pg_stat_all_tables where relid='yyy'::regclass;) (c: select n_tup_ins from pg_stat_all_tables where relid='yyy'::regclass;)

摘自德哥@Digoal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment