zoukankan      html  css  js  c++  java
  • postgresql vacuum操作

    来源 :https://blog.csdn.net/u011598529/article/details/49276029

    PostgreSQL数据库管理工作中,定期vacuum是一个重要的工作.

    vacuum的效果:
        1.1释放,再利用 更新/删除的行所占据的磁盘空间.
         1.2更新POSTGRESQL查询计划中使用的统计数据
         1.3防止因事务ID的重置而使非常老的数据丢失。
     
    第一点的原因是PostgreSQL数据的插入,更新,删除操作并不是真正放到数据库空间.如果不定期释放空间的话,由于数据太多,查询速度会巨降.
    第二点的原因是PostgreSQL在做查询处理的时候,为了是查询速度提高,会根据统计数据来确定执行计划.如果不及时更新的话,查询的效果可能不如预期.
    第三点的原因是PostgreSQL中每一个事务都会产生一个事务ID,但这个数字是有上限的. 当事务ID达到最大值后,会重新从最小值开始循环.这样如果不及时把以前的数据释放掉的话,原来的老数据会因为事务ID的丢失而丢失掉.
     
    虽然在新版本的Postgresql中有自动的vacuum,但是如果是大批量的数据IO可能会导致自动执行很慢,需要配合手动执行以及自己的脚本来清理数据库。

    1. vacuumdb 是 SQL 命令 VACUUM的封装,所以用vacuumdb和vacuum来清理数据库都可以,效果是一样的。
    2.vacuumdb 中的几个重要参数:可以用vacuumdb --help查询。
    -a/--all               vacuum所有的数据库

    -d dbname        只vacuum dbname这个数据库

    -f/--full               执行full的vacuum

    -t table              只vacuum table这个数据表

    -z/--analyze       Calculate statistics for use by the optimizer
    3. 切换到postgres用户下:
    vacuumdb -d yourdbname -f -z -v 来清理你的数据库。
    或者加到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;
    postgresql <wbr>:手动vacuum与vacuumdb

    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;
    这个命令是查询按照最老的XID排序,查看大于1G而且是排名前20的表。
    下面是一个例子:
            relname         |  xid_age  | table_size 
    ------------------------+-----------+------------
     postgres_log           | 199785216 | 12 GB
     statements             |   4551790 | 1271 MB
     normal_statement_times |        31 | 12 GB
    然后你可以单独每个表进行vacuum:
    vacuumdb --analyze --verbose --table 'postgres_log' mydb
  • 相关阅读:
    k8s存储(部署理论)
    DELL R720针对磁盘故障面板信息误报解决
    ovirt平台新建kvm操作
    宿主机计划任务执行docker相关命令
    网企-11-12
    洛谷-P1164 小A点菜
    洛谷-P1060 开心的金明
    洛谷-P1305 新二叉树
    洛谷-P1030 求先序排列
    洛谷-P1087 FBI树
  • 原文地址:https://www.cnblogs.com/fengzhengfly/p/8942050.html
Copyright © 2011-2022 走看看