高斯数据库脏页率处理

一、脏页率说明
每当更新或删除PostgreSQL表中的行时,都会留下死元组。VACUUM摆脱了它们,以便空间可以重复使用。如果一个表没有被清理,它就会变得臃肿,这会浪费磁盘空间并减慢表的顺序扫描(以及索引扫描)。
VACUUM还负责冻结表行,以避免在事务ID计数器环绕时出现问题 资料参考pg中文论坛
实际操作新表insert也会产生脏页,特别是gds导入失败后空表也会占用大量空间;空表查询缓慢

一般数据库事务管理中所指的锁是指表级锁,GaussDB(DWS)中支持的锁模式有8种,按排他级别分别为1-8。
每种锁模式都有与之相冲突的锁模式,由锁冲突表定义相关的信息,锁冲突表如下:
编号 名称 用途 冲突关系
1 AccessShareLock SELECT 8
2 RowShareLock SELECT FOR UPDATE/FOR SHARE 7 | 8
3 RowExclusiveLock INSERT/UPDATE/DELETE 5 | 6 | 7 | 8
4 ShareUpdateExclusiveLock VACUUM 4 | 5 | 6 | 7 | 8
5 ShareLock CREATE INDEX 3 | 4 | 6 | 7 | 8
6 ShareRowExclusiveLock ROW SELECT…FOR UPDATE 3 | 4 | 5 | 6 | 7 | 8
7 ExclusiveLock BLOCK ROW SHARE/SELECT…FOR UPDATE 2 | 3 | 4 | 5 | 6 | 7 | 8
8 AccessExclusiveLock DROP CLASS/VACUUM FULL 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

二、注意事项及应对方式
2.1、风险
•数据库将进行大量读写操作,可能影响正常使用,建议选择空闲时间执行。
•数据库的存储空间越大,即数据可能越多,清理的时间越长。
VACUUM FULL回收所有过期的行空间,但是它需要对每个正在处理的表进行独占锁定,并且可能需要很长时间才能完成大型分布式数据库表。节点数较少的大表vacuum full时间较长,可能会两个小时也未能做完vacuum full,期间整表上锁,因此这里建议大表按照分区来做vacuum full
分区脏页查询方式

2.2、应对方式
设置statement_timeout
设置锁等待时间与lockwait_timeout和max_query_retry_times

  1. 通过pg_terminate_backend函数去对应的节点上杀掉持锁语句

三、脏页率查询
3.1、模式脏页率
pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples)
pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples, text schema)
描述:获取各表的插入、更新、删除以及脏页率信息。该函数针对视图
PGXC_GET_STAT_ALL_TABLES进行了性能优化, 可以快速筛选出每个DN上满足脏页
率大于dirty_percent,dead元组数大于n_tuples的表,将筛选结果返回到CN进行汇总
并输出。
3.2、单表脏页率(准确)
select pg_stat_get_live_tuples(‘schema.table’::regclass::oid) as n_live_tup
,pg_stat_get_dead_tuples(‘schema.table’::regclass::oid) as n_dead_tup
,case n_dead_tup when 0 then 0 else round(n_dead_tup/(n_live_tup+n_dead_tup)*100,2) end as dirty_ratio;
3.3、分区脏页率
pg

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值