postgresql技术大讲堂 -凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 593406
  • 博文数量: 486
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4941
  • 用 户 组: 普通用户
  • 注册时间: 2018-07-05 13:59
个人简介

ocp考试资料群:569933648 验证码:ocp ocp 12c 19c考试题库解析与资料群:钉钉群号:35277291

文章分类

全部博文(486)

文章存档

2024年(3)

2023年(35)

2021年(151)

2020年(37)

2019年(222)

2018年(38)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: mysql/postgresql

2023-05-25 09:32:55


postgresql从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对pg基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱pg、学习pg的同学们有帮助,欢迎持续关注cuug pg技术大讲堂。

part 17:vacuum空间管理工具

内容1:vacuum 概述

内容2:可见性地图作用

内容3:冻结处理

内容4:autovacuum daemon

内容5:full vacuum

 

vacuum概述

· vacuum概述vacuum处理对数据库中的指定表或所有表执行以下任务:

1、移除死元组

 删除死元组并对每个页面的活元组进行碎片整理。

 删除指向死元组的索引元组。

2、冷冻老的txid

 必要时冻结老元组的txid 更新冻结的与系统目录(pg_database和pg_class)相关的txid

 如有可能,移除clog中不必要的部分

3、其他

 更新已处理表的fsm和vm。

 更新几个统计数据(pg_stat_all_tables等)

 

vacuum处理流程

· vacuum 处理流程

(1) 从指定的表中获取每个表。

(2) 获取表的shareupdateexclusivelock锁。此锁允许读取其他事务。

(3) 扫描所有页面以获取所有死元组,必要时冻结旧元组。

(4) 如果存在,则移除指向相应死元组的索引元组。

(5) 对表的每一页执行以下步骤(6)和(7)。

(6) 移除死元组并重新分配页面中的活元组。

(7) 更新目标表的相应fsm和vm。

(8) 如果{banned}最佳后一页没有元组,则截断{banned}最佳后一页?u003c/p>

(9) 更新与目标表的真空处理相关的统计信息和系统目录。

(10) 更新与真空处理相关的统计数据和系统目录。

(11) 如果可能的话,删除不必要的文件和clog的页面

· {banned}中国第一步

执行冻结处理并删除指向死元组的索引元组

1、扫描目标表,创建死元组列表

2、通过死元组列表删除索引元组,即“清理阶段”

3、如此循环,直到清完为止

· 清理操作流程

· 第二步

更新与每个目标表的真空处理相关的统计信息和系统目录。

此外,如果{banned}最佳后一页没有元组,则从表文件中将其截断。

如果可能的话,它会删除不必要的clog部分

 

可见性地图

· 提高vacuum的效率

可见性地图用来记录含有被删除行的数据块id,以提供给vacuum参考。

 

冻结处理

· 冻结处理流程

冻结处理有两种模式:

lazy mode(惰性模式)

eager mode(急切模式)

 

删除不需要的clog文件

· 删除clog文件

 

autovacuum daemon

· autovacuum 守护进程

默认每分钟执行一次,由autovacuum_naptime参数定义。

默认调用三个worker进程进行工作,由autovacuum_max_workers参数定义。

 

full vacuum

· full vacuum

· full vacuum 处理流程

什么时候需要full vacuum?

testdb=# create extension pg_freespacemap;

create extension

testdb=# select count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "av. freespace size",

round(100 * avg(avail)/8192 ,2) as "av. freespace ratio"

from pg_freespace('accounts');

number of pages | av. freespace size | av. freespace ratio

----------------- -------------------- ---------------------

1640 | 99 bytes | 1.21


full vacuum示例(一)

testdb=# delete from accounts where aid  != 0 or aid < 100;

delete 90009

testdb=# vacuum accounts;

vacuum

testdb=# select count(*) as "number of pages",

pg_size_pretty(cast(avg(avail) as bigint)) as "av. freespace size",

round(100 * avg(avail)/8192 ,2) as "av. freespace ratio"

from pg_freespace('accounts');

number of pages | av. freespace size | av. freespace ratio

----------------- -------------------- ---------------------

1640 | 7124 bytes | 86.97

(1 row)


full vacuum示例(二)

testdb=# select *, round(100 * avail/8192 ,2) as "freespace ratio"

from pg_freespace('accounts');

blkno | avail | freespace ratio

------- ------- -----------------

0 | 7904 | 96.00

1 | 7520 | 91.00

2 | 7136 | 87.00

3 | 7136 | 87.00

4 | 7136 | 87.00

5 | 7136 | 87.00


full vacuum示例(三)

testdb=# vacuum full accounts;

vacuum

testdb=# select count(*) as "number of blocks",

pg_size_pretty(cast(avg(avail) as bigint)) as "av. freespace size",

round(100 * avg(avail)/8192 ,2) as "av. freespace ratio"

from pg_freespace('accounts');

number of pages | av. freespace size | av. freespace ratio

----------------- -------------------- ---------------------

164 | 0 bytes | 0.00

(1 row)



以上就是part 17 - vacuum空间管理工具 的内容,往期视频也可联系cuug客服观看

阅读(216) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图