MariaDB(11.4 GA)解决了MySQL临时表空间无限增大的问题

MySQL BUG复现

影响版本:MySQL 5.7 和 8.0


复现步骤:

  1. 创建一个包含1000万行记录的 sbtest1 表(可以使用 sysbench 工具生成数据)。


  1. 创建一个临时表 sbtest2,其结构与 sbtest1 相同:
mysql> CREATE TEMPORARY TABLE sbtest2 LIKE sbtest1;


  1. 向临时表sbtest2 插入1000行数据:
mysql> INSERT INTO sbtest2 SELECT * FROM sbtest1;


  1. 退出会话,临时表sbtest2 被系统自动删除:
mysql> EXIT;


  1. 然而,在MySQL中,InnoDB 临时表(例如 ibtmp1)所占的空间不会被释放,导致专用共享表空间不断增大。


MariaDB 解决方案:

在MariaDB中,您可以通过设置 innodb_truncate_temporary_tablespace_now 系统变量,在无需重启数据库的情况下缩减临时表空间:

MariaDB> SET GLOBAL innodb_truncate_temporary_tablespace_now = 1;

这一改进有效避免了MySQL中临时表空间持续膨胀的问题。