vacuum的效果:
第三点的原因是Postgresql中每一个事务都会产生一个事务ID,但这个数字是有上限的.当事务ID达到最大值后,会重新从最小值开始循环.这样如果不及时把以前的数据释放掉的话,原来的老数据会因为事务ID的丢失而丢失掉.
-a/--all
vacuum所有的数据库
-d dbname
只vacuum dbname这个数据库
-f/--full
执行full的vacuum
-t table
只vacuum table这个数据表
-z/--analyze
Calculate statistics for use by the optimizer
-d dbname
-f/--full
-t table
-z/--analyze
3. 切换到postgres用户下:
或者加到conrtab中15
1 * * * postgres vacuumdb -d mydb-f -z -v >> /tmp/vacuumdb.log
每天的一点一刻开始进行清理。
4. 如何查询我的XID是否接近临界值的命令:
select age(datfrozenxid) from pg_database;
或者:
select max(age(datfrozenxid)) from pg_database;
5. 然而我们关心的是哪一个大的表组要真正的vacuum:
SELECT relname,age(relfrozenxid) as xid_age,
pg_size_pretty(pg_table_size(oid)) as table_size
FROM pg_class
WHERE relkind = 'r' and pg_table_size(oid) > 1073741824
ORDER BY age(relfrozenxid) DESC LIMIT 20;
ORDER BY age(relfrozenxid) DESC LIMIT 20;
下面是一个例子:
------------------------+-----------+------------
然后你可以单独每个表进行vacuum:
vacuumdb --analyze --verbose --table '
postgres_log
' mydb
http://www.databasesoup.com/2012/09/freezing-your-tuples-off-part-1.html
原文地址:https://www.jb51.cc/postgresql/194919.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。