文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 数据库使用/ 如何判断表是否执行过UPDATE或DELETE
更新时间:2024-07-01 GMT+08:00

如何判断表是否执行过UPDATE或DELETE

问题现象

DWS中有两种情况需要关注表是否做过UPDATE及DELETE操作:

  1. 对表频繁执行UPDATE或者DELETE操作会产生大量的磁盘页面碎片,从而逐渐降低查询的效率,需要将磁盘页面碎片恢复并交还操作系统,即VACUUM FULL操作,这种场景下需要查找出哪些表执行过UPDATE;
  2. 判断一张表是否是维度表,是否可以从Hash表变更为复制表,可以查看这张表是否执行过UPDATE或DELETE,如果执行过UPDATE或DELETE操作,则不能修改为复制表。

处理方法

通过以下命令查找哪些表执行过UPDATE及DELETE操作:

1
2
3
4
5
6
7
8
9
ANALYZE tablename;
SELECT  
    n.nspname , c.relname, 
    pg_stat_get_tuples_deleted(x.pcrelid) as deleted,
pg_stat_get_tuples_updated(x.pcrelid) as updated
FROM pg_class c
INNER JOIN pg_namespace n ON n.oid = c.relnamespace
INNER JOIN pgxc_class x ON x.pcrelid = c.oid
WHERE c.relkind = 'r' and c.relname='tablename' ;