mysql临时表空间_MySQL 5.7 深度解析: 临时表空间

先来说说临时表的概念。 临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。 临时表有下面几种:

全局临时表

这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。

会话级别临时表

这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以create temporary table 这样的关键词创建的表。

事务级别临时表

这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。

检索级别临时表

这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。

MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。在MySQL5.7中,对于临时表做了下面两个重要方面的优化:

MySQL 5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。

在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)

功能性我就写到这里,大家性能方面如果有兴趣可以找时间去测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 从库状态_大神教你自动发现监控mysql从库状态

导读zabbix从库如果复制有问题&#xff0c;在主库机器有问题的时候&#xff0c;切为主就会导致数据的丢失。或者主从分离的时候&#xff0c;如果从库出现延时状态的话&#xff0c;会导致前端页面展示的数据不是为最新的数据。因此&#xff0c;监控mysql从库的状态是必要的。mys…

mysql查看session对应的ip_Mysql 查看session连接数,状态 | 学步园

命令&#xff1a; showprocesslist; 如果是root帐号&#xff0c;你能看到所有用户的当前连接。如果是其它普通帐号&#xff0c;只能看到自己占用的连接。 showprocesslist;只列出前100条&#xff0c;如果想全列出请使用showfull processlist; mysql> show processlist;命令&…

mysql集群fuzhi_MySQL集群 和MySQL主从复制的不同

主从复制理论上支持无穷大的从库个数&#xff0c;实际情况下&#xff0c;受服务器带宽和读写能力的影响请参考mysql官方手册的建议&#xff1a;理论上&#xff0c;通过使用单个主服务器/多从服务器设置&#xff0c;可以通过添加更多的从服务器来扩充系统&#xff0c;直到用完网…

mysql 查询一个字段快还是一条记录快_mysql (优化)查询一条再筛选某个字段和直接查询该条的某个字段的效率比较...

查询所有&#xff0c;10000次&#xff0c;$sql "select * from mh_user where (username‘333‘) and (password‘xxx‘)";总共耗时1.1420359611511查询username字段&#xff0c;10000次。$sql "select username from mh_user where (username‘333‘) and (p…

winform mysql 工具类_C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingSystem.Data;7 usingMySql.Data.MySqlClient;8910 namespaceFly.Util.DataBase11 {12 /// 13 ///MySql数据库操作类14 /// 15 public static cl…

服务器搭建php mysql5_Windows下php5+apache+mysql5 手工搭建笔记

Windows下php5apachemysql5 手工搭建笔记更新时间&#xff1a;2011年02月15日 01:35:09 作者&#xff1a;php运行环境对于站长们或者初学者来说可以直接用一键包的方式或者直接从服务提供商处得到支持&#xff0c;不必自己手工按部就班的搭建&#xff0c;所以这篇文章是写给我…

java连接mysql封装代码_JDBC连接数据库方法的封装,以及查询数据方法的封装

(在上一篇文章中&#xff0c;我们详细的介绍了连接数据库的方法&#xff0c;以及eclipse操作数据库信息的相关方法&#xff0c;在这里我们将主要讲封装。)主要内容&#xff1a;一般的连接数据库测试把连接数据库的方法封装成一个类和测试一个简单的插入表实例查询数据实例封装查…

mysql连接字符串加密配置文件_Asp.net2.0如何加密Web.config配置文件数据库连接字符串...

在asp.net2.0中,发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下:①添加密钥执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "hnlaw" -exp其中"hnlaw"为密钥名称②添加web.config节点在web.config的之…

Java编程和C语言哪个更好?

学编程用哪一个编程语言好?很多人刚开始接触编程的时候都不知道自己该学哪个好&#xff0c;软件开发编程语言多达600余种&#xff0c;每种都有各自的特点和应用领域。目前&#xff0c;热门编程语言无外乎Java、C、C了&#xff0c;实际上&#xff0c;Java确实是从C语言和C语言继…

bugzilla dbd-mysql_别人写的关于在Windows下安装BugZilla的说明,不错,值得借鉴

Bugzilla Windows安装红宝书一直寻找合适的Bug Tracking System&#xff0c;网上找了很久&#xff0c;commercial的太贵&#xff0c;还有licence限制&#xff0c;远远超出我等贫民的承受范围。也曾考虑干脆自己写一个算了&#xff0c;但终究未能如愿。对Bugzilla倒是早有所闻&a…

Java程序员常犯的几类错误

1.忽视异常 相信很多小伙伴在编程的过程中经常对异常置之不理。针对初学者和有经验的 Java 程序员&#xff0c;最佳实践仍是处理它们。异常抛出通常是带有目的性的&#xff0c;因此在大多数情况下需要记录引起异常的事件。不要小看这件事&#xff0c;如果必要的话&#xff0c;…

jdk1.8 mysql_Centos 7配置JDK1.8+MySQL5.7+Tomcat 8 开发环境

工具腾讯云服务器(可通过公网ip访问)Xshell 6Xftp 61、Xshell 6 连接云服务器打开xshell很简单&#xff0c;直接上图配置好之后连接云服务器&#xff0c;之后就可以对云服务器进行操作了。2、配置JDK 1.8a、下载JDK1.8如果直接在云服务器的命令行中使用wget http://download.or…

做为一名java高级程序员,需要了解哪些岗位?

一、Java高级程序员 要想成为JAVA&#xff08;高级&#xff09;程序员也称Java高级工程师&#xff0c;肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA高级程序员&#xff0c;您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包…

mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

转载自公众号&#xff1a;玩转MySQL&#xff0c;作者&#xff1a;洪斌一直以来 MySQL 复制延迟观测是不完善的&#xff0c;既无法观测到真实的主从延迟&#xff0c;也无法支持复杂的复制拓扑环境&#xff0c;常用的 second_behind_master 指标更多是判断是否存在回放延迟&#…

Java 程序员必读的五本书籍

如果你是一名程序员&#xff0c;想知道如何提高你对Java的了解或者成为更好的Java开发人员。在本文中&#xff0c;我将分享一些最好的Java书籍。这些书经受住了时间的考验&#xff0c;随着岁月的流逝变得越来越重要。不管你是学生还是职业者&#xff0c;你总有很多东西要学&…

使用sqlserver连接mysql服务_Sqlserver创建连接MySql的链接服务器

第一步&#xff1a;在MySql服务器上安装与系统对应的 MySql-Connector-ODBC安装过程中可能会报 缺失 msvcr100.dll的错误&#xff0c;这需要你根据系统到网上下载对应的这个dll文件。(当初遇到这个问题的时候&#xff0c;在网上试了很多的这种文件 最后才找到一个合适自己的)第…

什么人适合学习Java编程?编程好学吗?

什么人适合学习Java编程&#xff1f;编程好学吗&#xff1f;首先自己做个自我评估&#xff0c;包括能力、兴趣、逻辑思维、性格特点等等&#xff0c;结合这些特质判断自己是否适合学习Java。评估自己时&#xff0c;要尽量客观&#xff0c;追随内心&#xff0c;切勿轻易抬高或者…

not support mysql_MYSQL(解决方法):Client does not support authentication

mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法shell> mysqlClient does not support authentication protocol requestedby server; consider upgrading MySQL client官方的说法是MySQL 4.1 and up uses an authentication proto…

mysql分布式如何实现原理_分布式通讯协议实现原理

分为两个阶段&#xff1a;投票表决阶段和提交阶段。事务参与者完成系统相关业务成功后&#xff0c;通知协调者状态&#xff0c;当所有的事务参与者业务状态都成功后&#xff0c;协调者才发出提交指令&#xff0c;参与者提交或者取消事务一协调者 二事务的参与者(一般有多个事务…

大神程序员都懂英文翻译,而你却因英语不行遭拒?

程序员中很多人都是在外企里面工作的。这样的话就会涉及到&#xff0c;跟外籍同事的沟通和协作。上下级之间的汇报工作。虽然我们的主要工作是开发软件。是技术类工作。跟计算机打交道比较多&#xff0c;但是沟通对技术来说&#xff0c;还是非常重要的。跟外籍同事沟通&#xf…