《PostgreSQL中的Vacuum(22页).pdf》由会员分享,可在线阅读,更多相关《PostgreSQL中的Vacuum(22页).pdf(22页珍藏版)》请在三个皮匠报告上搜索。
1、Vacuum In PostgreSQL李正 2022-01PostgreSQL运维 有没有困惑PostgreSQL表数据不多而占用磁盘空间大的问题?有没有苦恼PostgreSQL有最合适的索引而查询不使用的问题?有没有好奇PostgreSQL与数据文件并存的vm和fsm文件作用?有没有听过PostgreSQL事务回卷后会停止服务?目 录 为什么需要Vacuum Vacuum做了什么 运行中的Vacuum Vacuum的局限性为什么需要Vacuum dead tuple为什么需要Vacuum 事务回卷为什么需要Vacuum 查询优化器Vacuum做了什么 回收重利用dead tupleVacu
2、um做了什么 回收重利用dead tupleVacuum做了什么 回收重利用dead tupleVacuum做了什么 回收重利用dead tupleVacuum做了什么 回收重利用dead tupleVacuum做了什么 冻结事务IDVACUUM在扫描表时,用来决定是否freeze行的年龄(以事务计)。默认值是 5 千万个事务。Vacuum做了什么 收集表信息随着表增删改操作的持续进行,表信息需要周期性的更新,包括更新:表数据统计信息,可见性映射文件信息1.表数据统计信息:供查询优化器使用2.可见性映射文件信息:加速index-only scan更新表统计信息可单独运行 analyze 命令运
3、行中的Vacuum 抢占资源运行中的Vacuum 抢占资源参参数数名名称称参参数数解解释释默默认认成成本本(cost)vacuum_cost_page_hit在shard buffer中扫描一个page的成本1vacuum_cost_page_miss在磁盘上扫描一个page的成本2vacuum_cost_page_dirty清理一个含有dead tuple页面的成本20vacuum_cost_limit在执行VACUUM期间,系统会维护一个计数器累加各种操作cost值200vacuum_cost_delay当该值达到vacuum_cost_limit的值时,该进程会休眠 vacuum_cos
4、t_delay 指定的时间,并重置计数器的值,继续运行 VACUM 操作0运行中的Vacuum 必须全表扫描vacuum_freeze_table_age:如果pg_class表中relfrozenxid字段标识的表年龄达到vacuum_freeze_table_age参数的设定,那么Vacuum就需要一个全表扫描。运行中的Vacuum 手工运行与自动运行autoVacuum是PostgreSQL一个可选的但强烈推荐的功能。它自动Watch PostgreSQL的运行,在数据表达到一定条件时,触发对表Vacuum操作。运行中的Vacuum 手工运行与自动运行Vacuum的局限性-空间不释放Vacuum的局限性-释放空间有代价vacuum full会锁表,不能随便运行。THANKS谢谢观看