MySQL 删除大表的性能问题解决方案

 更新时间:2012年11月24日 18:51:56   作者:  
MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,本为将提供详细的解决方案,需要了解的朋友可以参考下
微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结:

当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是:
1、当innodb_file_per_table=0的时候,以上不是问题,因为采用共享表空间的时候,该表所占用的空间不会被删除,buffer pool中的相关页不会 被discard。
2、当innodb_file_per_table=1的时候,并且当buffer_pool比较大的时候,遍历整个buffer pool 需要很多的时间(table_cache 会被锁住,所有的DML操作被阻止)。

认识误区
将innodb 表改为 myisam表,这个是没有效果的,该操作会删除旧表,建立新表,依然会遍历整个buffer_pool。

解决思路
1、采用脚本形式,批量删除部分记录
2、可以再slave上进行操作,进行主备切换(成本高)
3、Percona 5.1.58以上版本都支持innodb_lazy_drop_table(bug不少,慎用)
4、与buffer pool无关,但是可以加快 删除数据文件的速度,同样能减少MySQL hang住的时间。即:对数据文件建立硬链接,(依赖原理:OS HARD LINK 当多个文件名同时指向同一个INODE时,这个INODE的引用数N>1, 删除其中任何一个文件名只是删除了一个指针而已,不会删除数据文件。当INODE的引用数N=1时, 删除文件需要去把这个文件相关的所有数据块清除,所以会比较耗时)

相关文章

  • MySQL中TEXT与BLOB字段类型的区别

    MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下
    2014-08-08
  • MySQL系列之十四 MySQL的高可用实现

    MySQL系列之十四 MySQL的高可用实现

    这篇文章主要介绍了MySQL系列之十四 MySQL的高可用实现,从工作原理到具体的技术实现,本文详细的讲述了该项技术,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • MySQL命令执行sql文件的方法小结

    MySQL命令执行sql文件的方法小结

    本文给大家分享MySQL命令执行sql文件的两种方法,每种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • MySql中sql语句执行过程详细讲解

    MySql中sql语句执行过程详细讲解

    天天和数据库打交道,一天能写上几十条 SQL 语句,但你知道我们的系统是如何和数据库交互的吗?下面这篇文章主要给大家介绍了关于MySql中sql语句执行过程详细讲解的相关资料,需要的朋友可以参考下
    2023-02-02
  • 解析Mysql临时表及特点

    解析Mysql临时表及特点

    本篇文章是对Mysql中的临时表以及特点进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL通配符与正则表达式搜过滤数据详解

    MySQL通配符与正则表达式搜过滤数据详解

    简单来说,正则表达式就是用来匹配文本的特殊字符串,下面这篇文章主要给大家介绍了关于MySQL通配符与正则表达式搜过滤数据的相关资料,文中通过实例代码以及图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • MySQL使用UNIQUE实现数据不重复插入

    MySQL使用UNIQUE实现数据不重复插入

    当unique列在一个UNIQUE键上插入包含重复值的记录时,我们可以控制MySQL如何处理这种情况:使用IGNORE关键字或者ON DUPLICATE KEY UPDATE子句跳过INSERT、中断操作或者更新旧记录为新值。
    2017-05-05
  • mysql 8.0.22 winx64安装配置图文教程

    mysql 8.0.22 winx64安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.22 winx64安装配置图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Centos7.3下mysql5.7.18安装并修改初始密码的方法

    Centos7.3下mysql5.7.18安装并修改初始密码的方法

    这篇文章主要为大家详细介绍了Centos7.3下mysql5.7.18安装并修改初始密码的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • mysql把主键定义为自动增长标识符类型

    mysql把主键定义为自动增长标识符类型

    这篇文章主要介绍了mysql中如何把主键定义为自动增长标识符类型,下面有个不错的示例,大家可以参考下
    2014-07-07

最新评论