mysql5.7空间运算,深度解析MySQL5.7之临时表空间
临时表
临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。
临时表有下面几种:
1、全局临时表
这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。
2、会话级别临时表
这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以create temporary table这样的关键词创建的表。
3、事务级别临时表
这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。
4、检索级别临时表
这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。
MySQL 5.7之临时表空间
MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。在MySQL5.7中,对于临时表做了下面两个重要方面的优化:
1、MySQL 5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。
2、在MySQL 5.7 中把临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版本想要查看临时表的系统信息是没有太好的办法。
需要注意的一点就是:虽然INNODB临时表有自己的表空间,但是目前还不能自己定义临时表空间文件的保存路径,只能是继承innodb_data_home_dir。此时如果想要拿其他的磁盘,比如内存盘来充当临时表空间的保存地址,只能用老办法,做软链。举个小例子:
我现在用的OS是 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 9 Nov 13 10:28tmp_space2 -> /run/shm/
然后把innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend添加到my.cnf里的[mysqld]下面一行, 重启MySQL服务后:
mysql>select @@innodb_temp_data_file_path\G
***************************1. row ***************************
@@innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend
1 rowin set (0.00 sec)
先写一个批量创建临时表的存储过程:
DELIMITER$$
USE`t_girl`$$
DROPPROCEDURE IF EXISTS `sp_create_temporary_table`$$
CREATEDEFINER=`root`@`localhost` PROCEDURE `sp_create_temporary_table`(
IN f_cnt INT UNSIGNED )
BEGIN
DECLARE i INT UNSIGNED DEFAULT 1;
WHILE i <= f_cnt
DO
SET @stmt = CONCAT('create temporarytable tmp',i,' ( id int, tmp_desc varchar(60));');
PREPARE s1 FROM @stmt;
EXECUTE s1;
SET i = i + 1;
END WHILE;
DROP PREPARE s1;
END$$
DELIMITER;
现在来创建10张临时表:
mysql>call sp_create_temporary_table(10);
QueryOK, 0 rows affected (0.07 sec)
如果在以前,我们只知道创建了10张临时表,但是只能凭记忆或者手工记录下来临时表的名字等信息。
现在可以直接从数据字典里面检索相关数据。
mysql> select * frominformation_schema.innodb_temp_table_info;
+----------+--------------+--------+-------+----------------------+---------------+
|TABLE_ID | NAME | N_COLS | SPACE| PER_TABLE_TABLESPACE | IS_COMPRESSED |
+----------+--------------+--------+-------+----------------------+---------------+
| 56 | #sql1705_2_9 | 5 | 36 | FALSE |FALSE |
| 55 | #sql1705_2_8 | 5 | 36 | FALSE |FALSE |
| 54 | #sql1705_2_7 | 5 | 36 | FALSE |FALSE |
| 53 | #sql1705_2_6 | 5 | 36 | FALSE |FALSE |
| 52 | #sql1705_2_5 | 5 | 36 | FALSE |FALSE |
| 51 | #sql1705_2_4 | 5 | 36 | FALSE |FALSE |
| 50 | #sql1705_2_3 | 5 | 36 | FALSE |FALSE |
| 49 | #sql1705_2_2 | 5 | 36 | FALSE |FALSE |
| 48 | #sql1705_2_1 | 5 | 36 | FALSE |FALSE |
| 47 | #sql1705_2_0 | 5 | 36 | FALSE |FALSE |
+----------+--------------+--------+-------+----------------------+---------------+
10rows in set (0.00 sec)
总结
功能性我就写到这里,大家性能方面如果有兴趣可以找时间去测试。希望本文的内容对大家学习或者使用mysql5.7能带来一定的帮助,如果有疑问大家可以留言交流。
您可能感兴趣的文章:MySQL中临时表的基本创建与使用教程
MySQL中关于临时表的一些基本使用方法
MySQL两种临时表的用法详解
MySQL使用临时表加速查询的方法
解析Mysql临时表及特点
浅谈MySQL临时表与派生表
mysql复制中临时表的运用技巧
MySQL中Update、select联用操作单表、多表,及视图与临时表的区别
MySQL问答系列之什么情况下会用到临时表
MySQL 5.7临时表空间如何玩才能不掉坑里详解
关于JDBC与MySQL临时表空间的深入解析
mysql临时表用法分析【查询结果可存在临时表中】
mysql5.7空间运算,深度解析MySQL5.7之临时表空间相关推荐
- mysql 5.7临时表空间_深度解析MySQL 5.7之临时表空间
临时表 临时表顾名思义,就是临时的,用完销毁掉的表. 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上. 临时表有下面几种: 1.全局临时表 这种临时表从数据库实例启动后开始生效,在 ...
- sql 临时表_深度分析 | JDBC与MySQL临时表空间的分析
原创作者:爱可生开源社区 背景 应用 JDBC 连接参数采用 useCursorFetch=true,查询结果集存放在 mysqld 临时表空间中,导致ibtmp1 文件大小暴增到90多G,耗尽服务器 ...
- mysql临时表空间_MySQL 5.7 深度解析: 临时表空间
先来说说临时表的概念. 临时表顾名思义,就是临时的,用完销毁掉的表. 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上. 临时表有下面几种: 全局临时表 这种临时表从数据库实例启动后 ...
- linux mysql temp 设置_linux怎么修改mysql数据库临时表空间大小
MySQL5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path. 在MySQL5.7 中把临时 ...
- oracle 临时表空间语句,oracle的临时表空间
经常看到有人说看到temporary tablespace空间不释放等等的问题,整理一篇metalink上的相关文章,入门级的,还算浅显吧.基本上就是翻译了. sort之后临时段不回收 描述 当你监控 ...
- oracle的临时表空间问题
当你监控temporary tablespace 的空闲空间,发现空闲空间并没有随着sort的结束而增加,甚至当前数据库没有任何客户端连接也是如此:仍然有大量的temporary类型的extent存在 ...
- Oracle Temp临时表空间及其故障处理
Oracle Temp临时表空间及其故障处理 Oracle 11g中Temp临时表空间.文件的新特性 临时表空间是Oracle体系结构中比较特殊的结构.通常情境下,数据库使用者只需要设置对应的临时表空 ...
- itpub坛友问题--基于普通表或分区表创建索引,会占用临时表空间及何时回收临时表空间...
个人简介: 8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问. 服务过的客户: 中国电信 中国移动 中国联通 中国电通 国家电网 四川达州 ...
- 临时表空间过大解决方法
临时表空间过大解决方法 解决临时表空间过大有两种方法,方法一增加临时表空间的大小,方法二重建临时表空间,解决临时表空间过大的问题. 方案一:增加临时表空间的大小 --1.临时表空间的使用情况 SELE ...
最新文章
- Python入门100题 | 第012题
- HTML之CSS画三角形原理,纯CSS写三角形样式集合(原理解析)
- matlab2017b修改mesh的着色方案
- php中getdistance函数_php代码渗透测试 后门分析篇
- java基础 6 基本类型与运算
- break and continue;
- PHP学习九--会话控制session和cookie
- 测试鼠标传感器的软件,光电鼠标传感器的精密测量与控制系统 - 嵌入式设计应用 - 电子发烧友网...
- 提取swf素材_swf素材提取工具
- A股日内回转交易方法有哪些?
- BUUctf刷题第三天
- Top Android App使用的组件 2
- python回归分析结果怎么看_Python数据分析|线性回归
- 集中式、分布式版本控制系统的区别
- ♠♦♣TypeScript
- 北斗星通GPS调试记录
- 通过虚拟机模拟linux操作系统
- 土是独体字结构吗_“之”是独体字吗?还是上体结构的合体字?
- symbian学习转载
- 【论文翻译 假新闻检测综述 HICSS 2019】Can Machines Learn to Detect Fake News? A Survey Focused on Social Media