乐趣区

关于mysql:万答7如何批量删数据和调整系统表空间

欢送来到 GreatSQL 社区分享的 MySQL 技术文章,如有疑难或想学习的内容,能够在下方评论区留言,看到后会进行解答

前情提要:

业务须要删除大量数据,如果间接 delete 会造成如下问题:

1. 会产生大事务,造成主从提早,影响数据库高可用切换。
2. 零碎表空间会一直收缩。
3. 锁定的记录多, 更容易可能导致锁期待。
问 1:如何优雅的删除大量数据

答:

1. 如果表不须要就间接 drop

2. 如果只保留表构造用 truncate

3. 如果只保留局部数据能够应用 pt-archive 进行分批删除

特地留神,如果表太大的话,间接 drop 会 truncate 可能会造成大量 IO 导致数据库呈现短暂响应提早,能够通过硬链接的形式对表删除解决

问 2:零碎表空间一直收缩怎么解决
答:

1. 如果是已存在的数据库 无奈在线膨胀,那就通过 mysqldump 的形式建设新的从库,而后主从切换

2. 新实例如何解决

  • a. 能够设置独立表空间,要害参数
innodb_file_per_table

独立表空间也会产生碎片,然而能够通过 OPTIMIZE TABLE 或 ALTER TABLE xxxx ENGINE=INNODB 进行碎片回收,5.7 之后该操作属 online ddl,具体能够自行测试

  • b. 设置独立 UNDO 空间,而后设置主动回收。

5.6 版本就反对独立 UNDO 空间,然而不反对在线回收,要害参数

innodb_undo_directory
innodb_undo_tablespaces
innodb_undo_logs

5.7 版本减少了在线回收的性能,要害参数

innodb_undo_log_truncate
innodb_max_undo_log_size
innodb_purge_rseg_truncate_frequency

8.0 版本中 undo log 的治理更加灵便,次要如下改良

  • 1. 能够动态创建或删除 UNDO 表空间
  • 2. 能够动静减少或缩小 UNDO 表空间的数量
  • 3. 无论是否要进行 InnoDB 复原,也能够在启动前更改相干设置

问:ibtmp 文件一直增大,怎么解决

答:

5.7 版本能够设置限度 ibtmp 大小,然而须要重启实例;同时超过设定的最大值会导致 SQL 执行失败,要害参数

innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G

8.0 版本长期表空间有辨别全局和 session 级;垃圾 SQL 生成的长期表空间随着 SQL 的完结也会跟着主动开释。

Enjoy GreatSQL :)

文章举荐:

GreatSQL MGR FAQ
https://mp.weixin.qq.com/s/J6…

万答 #12,MGR 整个集群挂掉后,如何能力主动选主,不必手动干涉
https://mp.weixin.qq.com/s/07…

『2021 数据技术嘉年华·ON LINE』:《MySQL 高可用架构演进及实际》
https://mp.weixin.qq.com/s/u7…

一条 sql 语句慢在哪之抓包剖析
https://mp.weixin.qq.com/s/AY…

万答 #15,都有哪些状况可能导致 MGR 服务无奈启动
https://mp.weixin.qq.com/s/in…

技术分享 | 为什么 MGR 一致性模式不举荐 AFTER
https://mp.weixin.qq.com/s/rN…

对于 GreatSQL

GreatSQL 是由万里数据库保护的 MySQL 分支,专一于晋升 MGR 可靠性及性能,反对 InnoDB 并行查问个性,是实用于金融级利用的 MySQL 分支版本。

Gitee:
https://gitee.com/GreatSQL/Gr…

GitHub:
https://github.com/GreatSQL/G…

Bilibili:
https://space.bilibili.com/13…

微信 &QQ 群:
可搜寻增加 GreatSQL 社区助手微信好友,发送验证信息“加群”退出 GreatSQL/MGR 交换微信群

QQ 群:533341697
微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 公布!

退出移动版