MySQL5.7将临时表中的数据和回滚信息(仅适用于未压缩的表)从共享表空间中剥离,以形成它们自己的单独表空间。参数为innodb_temp_data_file_path。
在MySQL 5.7中,临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info。 并且MySQL 5.7之前的版本希望查看临时表系统信息不是很好。
要注意的一件事是,尽管INNODB临时表具有其自己的表空间,但是当前无法独自定义临时表空间文件的存储路径。它只能从innodb_data_home_dir继承。此时,如果要使用其他磁盘(例如内存磁盘)作为临时表空间的存储地址,则只能使用旧方法进行软链接。举一个小例子:
我正在使用的操作系统是Ubuntu12.X,我想将tmpfs文件系统用作临时表空间,
root @ ytt-master-VirtualBox:/usr/local/mysql/data# ln-s/run/shm//usr/local/mysql/data/tmp_space2
root @ ytt-master-VirtualBox:/usr/local/mysql/data#ls-l | grep” shm”
lrwxrwxrwx1 root root 13 Nov 13 10:28tmp_space2-\ gt;/run/shm/
然后将
innodb_temp_data_file_path = tmp_space2//ibtmp2:200M:autoextend
添加到my.cnf中[mysqld]下面的行
重新启动MySQL服务后,
mysql \ gt;选择@@ innodb_temp_data_file_path \\\\ G
*************************** 1.行*** *** *********************
@@ innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend
1行设置( 0.00秒)
首先编写一个存储过程,用于批量创建临时表:
DELIMITER $$
USE` t_girl` $$
如果存在`sp_create_temporary_table` $$
CREATEDEFINER =`root` @`localhost`过程`sp_create_temporary_table `(
IN f_cnt INT UNSIGNED)
开始
DECLARE i INT UNSIGNED DEFAULT 1;
当我\ lt; = f_cnt
DO
SET @ stmt = CONCAT(”创建临时表tmp”,i,”(id int,tmp_desc varchar(60));”);
从@stmt准备s1;
执行s1;
SET i = i + 1;
结束时;
DROP PREPARE s1;
END $$
分隔符;
现在创建10个临时表:
>
mysql \ gt;调用sp_create_temporary_table(10);
QueryOK,受影响的行数为0.07秒(0.07秒)
如果在过去,我们仅知道创建了10个临时表,但是临时表的名称和其他信息只能通过内存或手动记录。
现在可以直接从数据字典中检索相关数据。
mysql \ gt; 选择* frominformation_schema.innodb_temp_table_info;
+———-+————–+——–+——-+———————-+—————+
| TABLE_ID | NAME | N_COLS |空间| PER_TABLE_TABLESPACE | IS_COMPRESSED |
+———-+————–+——–+——-+———————-+—————+
| 56 | #sql1705_2_9 | 5 | 36 |假|假|
| 55 | #sql1705_2_8 5 | 36 |假|假|
| 54 | #sql1705_2_7 | 5 | 36 |假|假|
| 53 | #sql1705_2_6 | |
| 52 | #sql1705_2_5 | 5 | 36 |假|假|
| 51 | #sql1705_2_4 | 5 | 36 |假|假|
50 | #sql1705_2_3 | 5 | 36 |假|假|
| 49 | #sql1705_2_2 | 5 | 36 |假|假|
| 36 |假|假|
| 47 | #sql1705_2_0 | 5 | 36 |假|假|
+———-+————–+——–+——-+———————-+—————+
设置10行(0.00秒)
可能性我写信给您,如果您有时间测试,我们会对性能感兴趣。