导读
MySQL 5.7的目标是成为发布以来最安全的MySQL服务器,其在SSL/TLS和全面安全开发方面有一些重要的改变。
MySQL 5.7起支持独立临时表空间,但个别时候也可能会踩坑的。
MySQL 5.7起,开始采用独立的临时表空间(和独立的undo表空间不是一回事哟),命名ibtmp1文件,初始化12M,且默认无上限。
选项 innodb_temp_data_file_path 可配置临时表空间相关参数。
innodb_temp_data_file_path = ibtmp1:12M:autoextend |
临时表空间的几点说明
有时执行SQL请求时会产生临时表,极端情况下,可能导致临时表空间文件暴涨,帮人处理过的案例中最高涨到快300G,比以前遇到的 ibdata1 文件暴涨还要猛…
临时表使用的几点建议
附:临时表测试案例
表DDL
CREATE TEMPORARY TABLE `tmp1` ( `id` int(10) unsigned NOT NULL DEFAULT '0', `name` varchar(50) NOT NULL DEFAULT '', `aid` int(10) unsigned NOT NULL AUTO_INCREMENT, `nid` int(11) unsigned GENERATED ALWAYS AS ((`id` + 1)) VIRTUAL NOT NULL, `nnid` int(11) unsigned GENERATED ALWAYS AS ((`id` + 1)) STORED NOT NULL, PRIMARY KEY (`aid`), KEY `name` (`name`), KEY `id` (`id`), KEY `nid` (`nid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
原表大小只有 120MB,从这个表直接 INSERT…SELECT 导数据到tmp1表。
-rw-r----- 1 yejr imysql 120M Apr 14 10:52 /data/mysql/test/sid.ibd |
生成临时表(去掉虚拟列,临时表不支持虚拟列,然后写入数据),还更大了(我也不解,以后有机会再追查原因)。