〇 前言:
在
Mysql 5.6引用了独立undo tablespace之后,
mysql 5.7在temporary tablespace上做了改进。
已经实现将temporary tablespace从ibdata(系统表空间文件)中分离。
并且可以重启重置大小,避免出现像ibdata难以释放的问题。
但下面所有的讨论只针对InnoDB,并且指定了innodb_file_per_table,所用版本为My
sql 5.7.x
〇 新特性 · 共享临时表空间(shared temporary tablespace):
共享临时表空间出现于MySQL 5.7.1,为的是将临时表空间从系统表空间(system tablespace)文件中独立出来。该共享临时表空间用于存储非压缩InnoDB临时表(non-compressed InnoDB temporary tables)、关系对象(related objects)、回滚段(rollback segment)等数据。更多信息可以参考【MySQL 5.7 Reference Manual 8.4.4 Internal Temporary Table Use in MySQL】
因为存放的数据特殊性,不会参与crash recovery,因此无需记录redo log。
该共享临时表空间默认大小为12MB。在实例关闭之后,将会被删除。在实例启动时则会被创建。
默认的,该共享临时表空间存放在innodb_data_home_dir中的ibtmp1里,而innodb_data_home_dir默认为datadir。
所以一般该ibtmp1存放在datadir下,显然,其路径与共享表空间的路径一样,取决于innodb_data_home_dir。
新增参数innodb_temp_data_file_path,通过修改其值可以将该共享临时表空间的文件名,扩展大小做修改。
比如在配置文件中加上innodb_temp_data_file_path = temp_tablespace:64M:autoextend
那么在启动实例之后,会生成一个大小为64MB的temp_tablespace文件
-rw-r----- 1 root root 67108864 Jun 20 17:29 temp_tablespace
该参数默认出现于5.7.1,静态,默认值为ibtmp1:12M:autoextend。
〇 新特性 · InnoDB临时表统计信息优化
因为临时表特性,是无法在SHOW TABLES;与通过inf
ORMat
ion_schema.TABLES查询到其元数据信息的。
老版本可能只能通过一些比较麻烦的方法来查看:
比如SHOW CREATE TABLE tmp_a\G
5.7版本之后,在I_S里增加了一个表来统计该表的元数据信息INNODB_TEMP_TABLE_INFO。
可以通过I_S来查看该表的定义:
-
SELECT * FROM information_schema.INNODB_TEMP_TABLE_INFO;
-
+----------+---------------+--------+-------+----------------------+---------------+
-
| TABLE_ID | NAME | N_COLS | SPACE | PER_TABLE_TABLESPACE | IS_COMPRESSED |
-
+----------+---------------+--------+-------+----------------------+---------------+
-
| 68 | #sql2b79_35_0 | 4 | 37 | FALSE | FALSE |
-
+----------+---------------+--------+-------+----------------------+---------------+
-
1 row in set (0.00 sec)
--结束END--
本文标题: MySQL 5.7 新特性 共享临时表空间及临时表改进
本文链接: https://www.lsjlt.com/news/46873.html(转载时请注明来源链接)
有问题或投稿请发送至:
邮箱/279061341@qq.com QQ/279061341
0