本文首发于GreatSQL社区
原创内容未经授权不得随意使用,转载请联系小编并注明来源
业务需要删除大量数据,如果直接 delete 会造成如下问题:
问1:如何优雅的删除大量数据
答:
问2:系统表空间不断膨胀怎么处理
答:
1.如果是已存在的数据库 无法在线收缩,那就通过mysqldump的方式建立新的从库,然后主从切换
2.新实例如何处理
innodb_file_per_table
独立表空间也会产生碎片,但是可以通过 OPTIMIZE TABLE 或 ALTER TABLE xxxx ENGINE=INNODB 进行碎片回收,5.7之后该操作属online ddl,具体可以自行测试
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的管理更加灵活,主要如下改进
问:ibtmp文件不断增大,怎么处理
答:
5.7 版本可以设置限制ibtmp大小,但是需要重启实例;同时超过设定的最大值会导致SQL执行失败,关键参数
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
8.0 版本临时表空间有区分全局和session级;垃圾SQL生成的临时表空间随着SQL的结束也会跟着自动释放。
《深入浅出MGR》视频课程 复制链接在浏览器中打开