(本文档仅供参考,因涉及到清理数据库的数据,如不确认查询是否正确可将根据文档查询到的信息反馈至官方支持)
经常有客户咨询MPP占用了很多的磁盘空间,该怎么清理MPP占用的空间?
如若是和bi相关的,通常是由于以下几种原因生成:
1、生成的抽取自动备份的表太多,占用的空间较多;
2、历史遗留的一些数据异常的表没来及得清除;
3、抽取临时表没有及时清理掉。
1、使用jdbc连接方式的数据库工具先连接mpp,然后执行DLL语句操作。
1.1先从smartbi.war/smartbi/WEB-INF/lib获取到连接CH所需的驱动(可能不同版本后面jar的小版本号会有点不一样,前面名字是一样的)
1.2在dbeaver中配置驱动信息
1.3、配置连接CH信息
2.对于CH的版本为21及以上版本,可先运行下述sql查询Clickhouse中smartbimpp数据库的每个表的占磁盘的空间大小:
select database, table , rows, FLOOR( bytes_on_disk / 1024 / 1024) as MB_on_disk, FLOOR( data_compressed_bytes / 1024 / 1024) as MB_data_compressed, FLOOR( data_uncompressed_bytes / 1024 / 1024) as MB_data_uncompressed from system.parts p where database = 'smartbimpp' order by bytes_on_disk DESC |
如下图红框所示表示占用的磁盘空间,可以找到后缀为“_bak”的表,此类后缀的表名表示的是自动备份的表,可直接运行drop命令删除不用的备份表:
(首次抽取会在缓存库生成目标表,再次点击抽取之前生成的目标表会增加后缀变成xxx.bak ,重新生成了新的临时表。系统默认会备份存储5个目标表,若希望减少备份可 修改系统选项的 BACKUP_TAB_RETAIN_NUM=5 配置得个数。)
另外,drop table后,clickhouse会有个后台进程来删除表的数据,要这个进程完成后,数据才会被删除,空间才会被释放,也可以通过show processlist查看是否有正在运行的服务。
如是通过上述sql查询到的表占的空间都不大,也将where条件去掉后查询每个库的空间占用情况,看看哪个库占用的内存大,再反馈具体的占用情况再作下一步的分析:
select database, table , rows, FLOOR( bytes_on_disk / 1024 / 1024) as MB_on_disk, FLOOR( data_compressed_bytes / 1024 / 1024) as MB_data_compressed, FLOOR( data_uncompressed_bytes / 1024 / 1024) as MB_data_uncompressed from system.parts p order by bytes_on_disk DESC |