MySQL 5.7怎么爬出暂时表空间的坑
导读
怎样确认暂时表是由哪个用户连接创建的?
上次我们介绍了MySQL 5.7暂时表空间怎么玩才干不掉坑里,这次我们来介绍怎样确认是哪个用户连接创建的暂时表。以及怎样释放暂时表。
首先,我们查看当前的连接ID:
yejr@imysql.com>SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
| 2470 |
+-----------------+
在当前会话中创建暂时表:
yejr@imysql.com [test]>create temporary table tmp1
select * from I_S.global_status;
备注:上面的I_S是information_schema的简写。下同。
马上查看暂时表信息:
yejr@imysql.com [test]>select TABLE_ID, NAME from
I_S.innodb_temp_table_info;
+----------+-----------------------+
| TABLE_ID | NAME |
+----------+-----------------------+
| 505 | #sql17ab5_4000003a6_4 |
+----------+-----------------------+
我们观察到 NAME
列的值是 #sql17ab5_4000003a6_4,它由3部分构成:
第1部分,由“#sql”字符串開始,并加上随机值。
第2部分,一串”疑似”16进制字符。
第3部分,单调递增的数值;
这当中的第2部分,我们注意到是“疑似”16进制,我们把“3a6“从16进制转成10进制试试看:
yejr@imysql.com [test]>select conv('3a6', 16, 10);
+---------------------+
| conv('3a6', 16, 10) |
+---------------------+
| 934 |
+---------------------+
能够看到,正好和当前的连接ID是一样的,这证实了我们的设想。
我手上有两个MySQL 5.7版本号,以下是多次、不定时创建暂时表的整个观察过程记录。
首先是Linux系统下的5.7.18版本号:
Server version: 5.7.18-log MySQL Community Server (GPL) yejr@imysql.com[test]> select connection_id();
+----------+----------------+
+-----------------+
| connection_id() |
+-----------------+
| 1737 |
+-----------------+ yejr@imysql.com[test]> select conv(1737, 10 ,16);
+--------------------+
| conv(1737, 10 ,16) |
+--------------------+
| 6C9 |
+--------------------+ yejr@imysql.com[test]> select TABLE_ID, NAME from
I_S.innodb_temp_table_info where NAME like ‘%6C9%’;
| TABLE_ID | NAME |
+----------+----------------+
| 121 | #sql7e95_6c9_5 |
| 120 | #sql7e95_6c9_4 |
| 119 | #sql7e95_6c9_3 |
| 118 | #sql7e95_6c9_2 |
+----------+----------------+
以及Mac系统下的MySQL 5.7.16版本号:
Server version: 5.7.16-log MySQL Community Server (GPL)
yejr@imysql.com[test]> select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 934 |
+-----------------+
yejr@imysql.com[test]> select conv(934, 10 ,16);
+--------------------+
| conv(1737, 10 ,16) |
+--------------------+
| 3A6 |
+--------------------+
yejr@imysql.com[test]> select TABLE_ID, NAME from
I_S.innodb_temp_table_info where NAME like ‘%3A6%’;
+----------+-------------------------+
| TABLE_ID | NAME |
+----------+-------------------------+
| 518 | #sql17ab5_31000003a6_31 |
| 517 | #sql17ab5_29000003a6_29 |
| 516 | #sql17ab5_26000003a6_26 |
| 515 | #sql17ab5_23000003a6_23 |
| 514 | #sql17ab5_1e000003a6_1e |
| 513 | #sql17ab5_1b000003a6_1b |
| 512 | #sql17ab5_18000003a6_18 |
| 511 | #sql17ab5_16000003a6_16 |
| 510 | #sql17ab5_14000003a6_14 |
| 509 | #sql17ab5_12000003a6_12 |
| 508 | #sql17ab5_10000003a6_10 |
| 507 | #sql17ab5_d000003a6_d |
| 506 | #sql17ab5_a000003a6_a |
| 505 | #sql17ab5_4000003a6_4 |
+----------+-------------------------+
从这个结果能看到暂时表的 NAME
的第三部分数值在两个版本号中的表现不一样。
在5.7.16版本号上,尽管也是单调递增,但并非顺序的,而是有跳跃,跳跃规则未知;
在5.7.18版本号上,在保持单调递增的基础上,每次值都是顺序增长的。未跳跃,这个规则看起来更合理些。
好了,如今我们知道仅仅要依据当前的用户连接ID。就能找到该会话里创建的全部暂时表。想要释放这些暂时表。仅仅须要查询 I_S.INNODB_TEMP_TABLE_INFO 表的
NAME 列值全部包括当前用户连接ID的记录。杀掉相应的用户连接ID就可以(注意:这会释放该用户连接创建的全部暂时表)。
MySQL 5.7怎么爬出暂时表空间的坑的更多相关文章
- Mysql怎样删除以“#sql-”开头的暂时表
author:skate time:2014/09/28 Mysql怎样删除以"#sql-"开头的暂时表 现象:在重建索引后,发现Mysqlserver的磁盘空间快满了 在用例如以 ...
- oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段
今天在查数据的时候报错 ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace, b.segfile# ...
- oracle表空间查询维护命令大全之三(暂时表空间)史上最全
--UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...
- ORACLE-015:ora-25153 暂时表空间为空,ora01652 无法通过128
写了一个复杂的select语句,突然oracle就报了:ora-25153 暂时表空间为空,这个错误,于是网上查了下.发现了例如以下解决方法:创建一个新的暂时表空间. 首先要有system权限.登录进 ...
- MySQL Server参数优化 - innodb_file_per_table(独立表空间)
1 简介 Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间. 共享表空间以及独立表空间都是针对数据的存储方式而言的. ...
- 表空间_暂时表空间引起的错误:ora-01652 小例
原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46888243 报暂 ...
- Oracle中暂时表空间的清理
作者:iamlaosong Oracle暂时表空间主要用来做查询和存放一些缓冲区数据. 暂时表空间消耗的主要原因是须要对查询的中间结果进行排序.暂时表空间的主要作用: 索引create或rebuild ...
- MySQL 独立表空间恢复案例
创建表的时候就会得到元数据.可以通过定义的方式对表的元数据进行生成 这个地方要注意的是 独立表空间当中 ibd & frm分别存储的是什么数据? 表空间:文件系统,为了更好的扩容数据库的存 ...
- mysql表空间加密 keyring encryption
从5.7.11开始,mysql开始支持物理表空间的加密,它使用两层加密架构.包括:master key 和 tablespace key master key用于加密tablespace key,加密 ...
随机推荐
- Struts2(四)属性驱动和模型驱动
一.概述 所谓模型驱动,就是使用单独的JavaBean实例贯穿整个MVC流程,与之相对应的属性驱动方式,则使用属性作为贯穿MVC流程的信息携带者.属性无法独立存下,它必须依附于一个对象,这个对象就是A ...
- hive报错: Specified key was too long; max key length is 767 bytes
废话不多说,报错如下: DataNucleus.Datastore (Log4JLogger.java:error(115)) - An exception was thrown while addi ...
- 【Java知识点专项练习】之 数据类型两大类
Java的数据类型分为两大类:基本类型和引用类型: 基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能: 为了操作基本类型的数据,java也对它们进行了封装, 得到八个 ...
- 三.jquery.datatables.js表格编辑与删除
1.为了使用如图效果(即将按钮放入行内http://www.datatables.net/examples/ajax/null_data_source.html) 采用了另一个数据格式 2.后台php ...
- CSS技巧:逐帧动画抖动解决方案
笔者所在的前端团队主要从事移动端的H5页面开发,而团队使用的适配方案是: viewport units + rem.具体可以参见凹凸实验室的文章 – 利用视口单位实现适配布局 . 笔者目前(2017. ...
- 整理一系列优秀的Android开发源码
转:http://www.cnblogs.com/feifei1010/archive/2012/09/12/2681527.html 游戏类: 一.15个Android游戏源码(是以andengin ...
- eclipse中改变默认的workspace的方法
1.File-->Switch Workspace-->Other 2.Window-->Preferences-->General-->Startup and Shui ...
- Android.mk(4) 依赖:目标编程的模式
https://www.jianshu.com/p/3777a585a8d0 另一种范式 我一直觉得,Makefile确实是C/C++程序员的良配,因为Makefile所使用的两种范式都是C/C++程 ...
- 使用CMake编译跨平台静态库
在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑.因为很多开源的程序,比如png,都是自带编译脚本的.我们可以使用下列脚本来进行编译: . / con ...
- 使用 udev 管理 Linux 设备文件
本文以通俗的方法阐述 udev 及相关术语的概念.udev 的配置文件和规则文件,然后以 Red Hat Enterprise Server 为平台演示一些管理设备文件和查询设备信息的实例.本文会使那 ...