GBase 8a
性能调优
文章

提升v862低版本8a含有longblob列的表空间清理速度

发表于2024-04-23 16:06:2748次浏览0个评论

v862低版本的8a底层在处理longblob列时以一行一个小文件的形式进行存储,当一个表的行数达到上亿以上量级时,使用alter table tablename shrink space或者drop table tablename来释放空间时会锁表很长时间,客户可能无法接受处理锁表占用的时间。

因此,提供一种从操作系统删除底层数据文件的形式进行空间释放的方式,这种方式可以不锁表的同时清理空间。

具体方式如下:

需要在每个数据节点执行以下语句,注意tablename_n1和C00001,ni代表的是具体数据节点的分片号,C00001是longblob列所存储的底层目录,比如以下语句就是将n1分片的18年所有的longblob底层文件移动到/data/delete目录下。

find /opt/gnode/userdata/gbase/dbname/sys_tablespace/tablename_n1/C00001 -maxdepth 1 -type d -name '[0-9]*'-newermt '2018-01-01 00:00:00 ' ! -newermt '2018-12-31 00:00:00' -exec mv {} /data/delete/ \;

建议先用移动的方式测试下,等都移动到/data/delete目录,数据库也没有什么异常,可以直接慢慢rm -rf 整个/data/delete目录

当gnode底层存储文件都移动完后,可以从gcluster执行alter table tablename shrink space或者drop table tablename来释放空间,此时执行会很快处理完成。

评论

登录后才可以发表评论