欢送来到 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_directoryinnodb_undo_tablespacesinnodb_undo_logs

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

innodb_undo_log_truncateinnodb_max_undo_log_sizeinnodb_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 公布!