在线 DDL 操作的磁盘空间要求如下所述。这些要求不适用于即时执行的操作。
-
临时日志文件:
在线 DDL 操作创建索引或修改表时,临时日志文件记录并发 DML。临时日志文件根据
innodb_sort_buffer_size
的值扩展,直到达到innodb_online_alter_log_max_size
指定的最大值。如果操作需要很长时间,并发 DML 修改表如此之多,以致临时日志文件的大小超过innodb_online_alter_log_max_size
的值,online DDL 操作将失败,并回滚未提交的并发 DML 操作。较大的innodb_online_alter_log_max_size
设置允许在线 DDL 操作期间更多的 DML,但是也延长了 DDL 操作结束时锁定表以应用日志的时间。变量
innodb_sort_buffer_size
也定义了临时日志文件读取缓冲区和写入缓冲区的大小。 -
临时排序文件:
在线 DDL 操作在创建索引时,将临时排序文件写入 MySQL 临时目录(Unix 上的
$TMPDIR
,Windows 上的%TEMP%
,或由--tmpdir
指定的目录)中。临时排序文件不在包含原始表的目录中创建。每个临时排序文件足够大以容纳一列数据,并在数据合并到最终表或索引时删除。如果在线 DDL 操作使用了所有可用的磁盘空间,会报告错误。如果 MySQL 临时目录不足以容纳排序文件,可以将
tmpdir
设置为不同的目录。或者,使用innodb_tmpdir
选项定义在线 DDL 操作的单独临时目录,以避免临时目录溢出。 -
中间表文件:
一些在线 DDL 操作在重建表时,在原始表所在的目录中创建临时中间表文件。中间表文件可能需要与原始表相同的空间。中间表文件名以
#sql-ib
前缀开头,并且只在在线 DDL 操作期间短暂出现。选项
innodb_tmpdir
不适用于中间表文件。