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

时间:2024-01-18 22:20:31 

微博上讨论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,删除表
0
投稿

猜你喜欢

  • Python在groupby分组后提取指定位置记录方法

    2023-06-09 08:48:16
  • 一文搞懂 parseInt()函数异常行为

    2024-04-30 08:57:11
  • SpringBoot调用python接口的实现步骤

    2022-01-24 22:41:57
  • Python3基于sax解析xml操作示例

    2022-06-07 10:18:52
  • 基于Python实现股票收益率分析

    2022-03-15 20:24:08
  • vs10安装之后一些列问题

    2024-01-29 11:59:48
  • PyTorch中的参数类torch.nn.Parameter()详解

    2021-09-07 19:06:30
  • 深入理解Python虚拟机中描述器的实现原理

    2021-08-05 21:20:48
  • vue项目的创建的步骤(图文教程)

    2024-05-21 10:16:29
  • pyqt5与matplotlib的完美结合实例

    2022-01-09 12:23:59
  • python ftp 按目录结构上传下载的实现代码

    2021-01-28 00:38:33
  • python利用opencv实现SIFT特征提取与匹配

    2021-07-22 19:08:46
  • Python的Flask框架中@app.route的用法教程

    2022-05-14 07:25:19
  • php牛逼的面试题分享

    2023-11-20 19:31:35
  • python迭代器实例简析

    2023-07-26 07:40:29
  • vee-validate vue 2.0自定义表单验证的实例

    2023-07-02 17:09:33
  • Python元素集合的列表切片

    2023-08-08 23:08:57
  • vue实现给div绑定keyup的enter事件

    2024-05-13 09:08:51
  • python读取dicom图像示例(SimpleITK和dicom包实现)

    2023-07-06 14:08:10
  • MSMQ微软消息队列详解

    2024-05-03 15:32:00
  • asp之家 网络编程 m.aspxhome.com