GaussDB(DWS)数据库整体查询慢

问题描述

数据库整体查询慢,之前查询需要2-3分钟完成,现在需要6-7分钟

处理过程

由于数据库整体慢一般是数据库的表脏页率高,使用Select * from pgxc_get_stat_dirty_tables(0,0);查询数据库的表脏数据,发现这个数据库的系统表和一些大表的脏数据很多(如下图),需要先清理,一般清理后数据库的性能会恢复正常,还有单点性能问题需要具体问题具体分析

GaussDB(DWS)数据库整体查询慢

根因

GaussDB(DWS)采用多版本控制技术(Multi-Version Concurrency Control,简称MVCC)的并发控制机制保证多个事务访问数据库时的一致性和并发性,其优点是读写互不阻塞,缺点则是会造成磁盘膨胀的问题,而MVCC机制是产生脏页的主要原因。

 

具体表现为如下场景:

当对表执行delete操作时,删除的数据只是在逻辑上被标记为已删除,并未真正从磁盘页面中移除。

当对表执行update操作时,GaussDB(DWS)将待更新的原数据进行逻辑上的删除标记,同时插入新数据。

对于表中的delete、update操作,被标记为已删除的数据在数据库内部统称为废弃元组,废弃元组在整张表中的占比即为脏页率。因此当表的脏页率高时,则认为表内部被标记为已删除的数据占比高。

针对表的脏页率过高的问题,GaussDB(DWS)提供了查询脏页率的系统视图,具体使用请见PGXC_STAT_TABLE_DIRTY。

为了解决脏页率高导致磁盘空间膨胀的问题,GaussDB(DWS)提供了VACUUM的功能,可以有效清理delete、update操作后标记的已删除数据,具体请参见请参考VACUUM。

VACUUM不会释放已经分配好的空间,如果要彻底回收已删除的空间,则需要使用VACUUM FULL。

说明:

VACUUM FULL可以清理并释放已删除数据的空间,进而提高数据库的性能和效率。但是执行VACUUM FULL命令更加耗费时间和资源,并且可能会导致一些表被锁定,因此VACUUM FULL命令需要在数据库负载较低的情况下使用。

为降低磁盘膨胀对数据库性能的影响,建议对查询脏页率超过80%的非系统表执行VACUUM FULL,用户也可根据业务场景自行选择是否执行VACUUM FULL

解决方案

清理系统表

https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=150164

普通表清理

需要在这个表没有业务的时候执行

VACUUM FULL ANALYZE tablename;

 

后续813版本及以上版本是建议开启autovauum的功能,虽然不能彻底回收已删除的空间,但是可以整理和利用被标识为删除状态的记录空间,并更新表的统计数据

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/316337.html

(0)
上一篇 3天前
下一篇 3天前

相关推荐

发表回复

登录后才能评论