在线DDL空间要求
就地在线DDL操作的空间要求概述如下。空间要求不适用于立即执行的操作。
临时日志文件的空间
联机DDL操作创建索引或更改表时,临时日志文件记录并发DML。临时日志文件将根据需要扩展,
innodb_sort_buffer_size
最大值由指定innodb_online_alter_log_max_size
。如果临时日志文件超出大小限制,则联机DDL操作将失败,并且未提交的并发DML操作将回滚。较大的innodb_online_alter_log_max_size
设置允许在联机DDL操作期间使用更多DML,但是当表被锁定以应用记录的DML时,它也会延长DDL操作结束时的时间。如果该操作花费了很长时间,并且并行DML修改了表,以至于临时日志文件的大小超过的值
innodb_online_alter_log_max_size
,则联机DDL操作将失败并显示DB_ONLINE_LOG_TOO_BIG
错误。临时排序文件的空间
重建表的在线DDL操作将临时排序文件写入MySQL临时目录(
$TMPDIR
在Unix,%TEMP%
Windows或Windows Server 2003指定的目录中)--tmpdir
)。临时排序文件不在包含原始表的目录中创建。每个临时排序文件都足够大以容纳一列数据,并且每个排序文件的数据合并到最终表或索引中时都会被删除。涉及临时排序文件的操作可能需要的临时空间等于表中的数据量加上索引。如果联机DDL操作使用了数据目录所在的文件系统上的所有可用磁盘空间,则会报告错误。如果MySQL临时目录的大小不足以容纳排序文件,请设置
tmpdir
为其他目录。或者,使用定义一个单独的临时目录以进行联机DDL操作innodb_tmpdir
。引入此选项是为了避免因大型临时排序文件而导致的临时目录溢出。中间表文件的空间
一些重建表的在线DDL操作会在与原始表相同的目录中创建一个临时中间表文件。中间表文件可能需要的空间等于原始表的大小。中间表文件名以
#sql-ib
前缀开头,并且仅在联机DDL操作期间短暂出现。该
innodb_tmpdir
选项不适用于中间表文件。