MySQL 5.7 新特性 共享临时表空间及临时表改进
短信预约 -IT技能 免费直播动态提醒
〇 前言:
在MySQL 5.6引用了独立undo tablespace之后,MySQL 5.7在temporary tablespace上做了改进。
已经实现将temporary tablespace从ibdata(系统表空间文件)中分离。
并且可以重启重置大小,避免出现像ibdata难以释放的问题。
但下面所有的讨论只针对InnoDB,并且指定了innodb_file_per_table,所用版本为MySQL 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;与通过information_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)
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
MySQL 5.7 新特性 共享临时表空间及临时表改进
下载Word文档到电脑,方便收藏和打印~
下载Word文档
相关文章
- Ruby加密技术:如何改变数据存储方式?
- 在 Java 中,arraycopy 方法的具体用法是什么?(java中arraycopy的用法是什么)
- 如何巧妙利用 Java Map 来实现缓存功能?(如何利用Java Map实现缓存功能)
- Java 中 zlib 库的使用技巧有哪些?(Java中zlib库的使用技巧)
- 在 Java 中如何将 Object 转换为自定义类型?(java怎么将Object转换为自定义类型)
- Java多线程编程中常见错误有哪些?如何解决?(Java多线程编程常见错误及解决方法)
- 在 eclipse 中如何进行 java 代码规范设置?(eclipse下java代码规范设置)
- 如何在 Java 分布式架构中避免错误?(Java分布式架构如何避免错误)
- 如何利用 Java 多线程来进行数据统计?(怎么用java多线程统计数据)
- 掌握Ruby加密与解密:确保数据安全的关键步骤
猜你喜欢
2024-04-02
2024-04-02
编程热搜
[mysql]mysql8修改root密码
use mysqlselect * from user where user="root";update user set password=password("mysql@2020") where user="root";ERROR 1064 (42000)MySQL专题3之MySQL管理
1、启动以及关闭MySQL服务器- 首先,我们需要通过以下命令来检查MySQL服务器是否已经启动:ps -ef | grep mysqld- 如果MySQL已经启动,以上命令将输出mysql进程列表,如果mysql未启动,你可以使用以下
编程资源站
- 资料下载
- 历年试题
目录
反馈
我要
反馈