InnoDB 使用会话临时表空间和全局临时表空间。
会话临时表空间
会话临时表空间存储用户创建的临时表和当InnoDB配置为磁盘内部临时表的存储引擎时由优化器创建的内部临时表。从MySQL 8.0.16开始,用于磁盘内部临时表的存储引擎始终为InnoDB。(以前,存储引擎由的值确定 internal_tmp_disk_storage_engine。)
在创建磁盘临时表的第一个请求上,会话临时表空间从临时表空间池分配给会话。最多为一个会话分配两个表空间,一个用于用户创建的临时表,另一个用于由优化程序创建的内部临时表。分配给会话的临时表空间用于该会话创建的所有磁盘上的临时表。当会话断开连接时,其临时表空间将被截断并释放回池中。启动服务器时,将创建10个临时表空间的池。池的大小永远不会缩小,并且表空间会根据需要自动添加到池中。在正常关闭或初始化中止时,将删除临时表空间池。会话临时表空间文件在创建时大小为5页,并且具有.ibt 文件扩展名。
为会话临时表空间保留了40万个空间ID。因为每次启动服务器时都会重新创建会话临时表空间池,所以在关闭服务器时,会话临时表空间的空间ID不会保留,并且可以重新使用。
该innodb_temp_tablespaces_dir 变量定义创建会话临时表空间的位置。默认位置是 #innodb_temp数据目录中的目录。如果无法创建临时表空间池,则拒绝启动。
shell>cd BASEDIR/data/#innodb_temp
shell>ls
temp_10.ibt temp_2.ibt temp_4.ibt temp_6.ibt temp_8.ibt
temp_1.ibt temp_3.ibt temp_5.ibt temp_7.ibt temp_9.ibt
在基于语句的复制(SBR)模式下&#