Postgresql vacuum freeze相关参数
2017-08-14 10:48
113 查看
先看3个参数:
autovacuum_freeze_max_age | 500000
vacuum_freeze_min_age | 10
vacuum_freeze_table_age | 100000
首先如果pg_class表age(relfrozenxid)大于autovacuum_freeze_max_age,那么数据库系统会自动做vacuum,回收年龄
没有达到500000之前,不做vacuum
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+--------
hank | 495471
(1 row)
达到后,立即做vacuum
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+--------
hank | 504559
(1 row)
可见日志:
2017-08-07 17:23:44.193 CST,,,4774,,5988319d.12a6,2,,2017-08-07 17:23:41 CST,3/5308,0,LOG,00000,"automatic vacuum of table ""hank.hank.hank"": index scans: 0
pages: 0 removed, 1596 remain, 0 skipped due to pins, 0 skipped frozen
tuples: 0 removed, 307278 remain, 0 are dead but not yet removable
buffer usage: 3204 hits, 1 misses, 1278 dirtied
avg read rate: 0.003 MB/s, avg write rate: 3.386 MB/s
system usage: CPU 0.00s/0.05u sec elapsed 2.94 sec",,,,,,,,,""
vacuum后age回到vacuum_freeze_min_age所设置的值,注意这里做的是vacuum,不是vacuum freeze,如果手工做vacuum freeze,age(relfrozenxid)会降到0
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+-----
hank | 10
(1 row)
这里手工freeze后,回到0开始计数
hank=> vacuum freeze hank;
VACUUM
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+-----
hank | 0
(1 row)
另外对vacuum_freeze_table_age参数说明一下:
普通的vacuum由visibility map决定表的那些page需要被扫描,正常情况下,会跳过没有dead row的page,即使这些page有旧的xid值,所以,正常vacuum并不冻结表中所有行的xid,vacuum_freeze_table_age控制什么时候需要扫描全表,并冻结所有行的xid,如果事物数大于(vacuum_freeze_table_age-vacuum_freeze_min_age),那么就扫描所有可见的,没有冻结的page,如果vacuum_freeze_table_age设置为0,那么每次都会强制扫描所有page。
autovacuum_freeze_max_age | 500000
vacuum_freeze_min_age | 10
vacuum_freeze_table_age | 100000
首先如果pg_class表age(relfrozenxid)大于autovacuum_freeze_max_age,那么数据库系统会自动做vacuum,回收年龄
没有达到500000之前,不做vacuum
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+--------
hank | 495471
(1 row)
达到后,立即做vacuum
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+--------
hank | 504559
(1 row)
可见日志:
2017-08-07 17:23:44.193 CST,,,4774,,5988319d.12a6,2,,2017-08-07 17:23:41 CST,3/5308,0,LOG,00000,"automatic vacuum of table ""hank.hank.hank"": index scans: 0
pages: 0 removed, 1596 remain, 0 skipped due to pins, 0 skipped frozen
tuples: 0 removed, 307278 remain, 0 are dead but not yet removable
buffer usage: 3204 hits, 1 misses, 1278 dirtied
avg read rate: 0.003 MB/s, avg write rate: 3.386 MB/s
system usage: CPU 0.00s/0.05u sec elapsed 2.94 sec",,,,,,,,,""
vacuum后age回到vacuum_freeze_min_age所设置的值,注意这里做的是vacuum,不是vacuum freeze,如果手工做vacuum freeze,age(relfrozenxid)会降到0
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+-----
hank | 10
(1 row)
这里手工freeze后,回到0开始计数
hank=> vacuum freeze hank;
VACUUM
hank=> select oid::regclass,age(relfrozenxid) from pg_class where relname='hank' and relowner=16392;
oid | age
------+-----
hank | 0
(1 row)
另外对vacuum_freeze_table_age参数说明一下:
普通的vacuum由visibility map决定表的那些page需要被扫描,正常情况下,会跳过没有dead row的page,即使这些page有旧的xid值,所以,正常vacuum并不冻结表中所有行的xid,vacuum_freeze_table_age控制什么时候需要扫描全表,并冻结所有行的xid,如果事物数大于(vacuum_freeze_table_age-vacuum_freeze_min_age),那么就扫描所有可见的,没有冻结的page,如果vacuum_freeze_table_age设置为0,那么每次都会强制扫描所有page。
相关文章推荐
- Postgresql相关的内存设置参数
- PostgreSQL中路径相关的配置参数。
- PostgreSQL参数学习:vacuum_defer_clean_age
- PostgreSQL vacuum原理一功能与参数
- PostgreSQL vacuum_freeze_table_age和vacuum_freeze_min_age理解
- PostgreSQL启动过程中的那些事七:初始化共享内存和信号十七:shmem中初始化AutoVacuum相关结构
- PostgreSQL与操作系统(OS)内核相关的几个参数
- PostgreSQL配置文件--AUTOVACUUM参数
- 转载:Linux TCP队列相关参数的总结
- Opencv::findContours函数参数说明及相关函数
- iftop相关参数及说明
- 获取屏幕相关参数,density,宽高
- unix shell 与if相关参数
- 【转】Code::Blocks 编译参数的相关设置
- PostgreSQL--信号量和shmall 和 shmmax相关设置
- 快速恢复区相关参数
- JVM相关参数配置和问题诊断<转>
- Nginx内核参数相关的优化设定
- Postgresql数据库autovacuum进程启动失败
- PostgreSQL extension 参数