• ADADADADAD

    mysql数据库怎样实现亿级数据快速清理[ mysql数据库 ]

    mysql数据库 时间:2024-11-29 09:50:16

    作者:文/会员上传

    简介:

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下:1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小看到了吗,光olderdb就占了25G2. 用SQLyog登录mys

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下:

    1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小

    看到了吗,光olderdb就占了25G

    2. 用SQLyog登录mysql数据库,查看数据库各个表的占用空间情况

    SELECTCONCAT(table_schema,'.',table_name)AS'aaa',table_rowsAS'NumberofRows',CONCAT(ROUND(data_length/(1024*1024*1024),6),'G')AS'DataSize',CONCAT(ROUND(index_length/(1024*1024*1024),6),'G')AS'IndexSize',CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),6),'G')AS'Total'FROMinformation_schema.TABLESWHEREtable_schemaLIKE'olderdb';

    3. 查询主键索引

    SHOWINDEXFROMorbit

    采取策略

    前提:目前需要删除80%的数据

    ① delete语句

    我们知道delete语句的删除速度与索引量成正比,此表中的索引量已经很大了,而且数据量非常之巨大,若采用常规delete语句删除,必定会话费几天的时间。

    Delete语句删除不会释放出磁盘空间,所以肯定还是会出现报警,所以此种方式不可取。

    ② drop掉表

    新建结构相同的表,命名“cc”,'将需要保存的数据插入到此表中,然后drop掉老表。

    Sql语句如下:

    基于老表新建新表

    CREATETABLEccLIKEorbit;

    插入数据(几百万的数据量一定要分批插入,一次30万-40万为最佳,毕竟mysql的数据处理能力有限)

    按日期查询后插入(每天大概会产生30多万数据量,所以采用日期插入)

    INSERTINTOccSELECT*FROMorbitWHERExttime>'2018-04-1600:00:00'ANDxttime<='2018-04-1700:00:00';

    结果如下:

    可以看到50多万的数据量用了不到5分钟,还是比较快的。

    清理后数据表空间得以释放

    然后drop掉老表

    DROPTABLEorbit

    目测只用了3秒左右

    重命名新表“cc”

    ALTERTABLEccRENAMETOorbit
    mysql数据库怎样实现亿级数据快速清理.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysqlmysql数据库