在现网使用过程中,易出现个别表数据存储倾斜,导致单个磁盘使用率远大于其他磁盘。由于数据库对象数较多,如通过table_skewness()函数进行排查,耗时巨大。
原因分析
执行du -sh *
对比使用率正常与使用率远大于其他磁盘master与slave的使用情况;
通过cm_ctl query –Cvd
确认该磁盘节点对应的DN实例(如上一步检查为slave磁盘占用率过大,则需要查看与该备实例对应的主实例磁盘使用情况),确认DN实例端口号;
进入实例base目录,执行du -ak | sort -nr |
more查找类似如下图中所示,文件大小为1GB,且文件前缀数字ID相同的文件,查找相同文件数量最多的文件,记录其ID值及其所在文件夹ID值。
通过gsql连接DN实例,并通过文件夹ID确认表所属数据库。
如上图示例中,执行:
gsql -d postgres -p 25330 –r
select oid,* from pg_database where oid='1642599'
切换至该数据库,通过文件的ID确认表名称,执行如下SQL:
select relname from pg_class where relfilenode = 3308672;
根据表名称进一步确认该表所属schema,执行如下SQL:
SELECT n.nspname as ""Schema"",
c.relname as ""Name""
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE relname = 'insured';
通过gsql连接CN实例,最后再通过table_skewness()函数进行核实确认。