欢送来到 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 公布!