版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/n88Lpo/article/details/78126267

导读

怎样确认暂时表是由哪个用户连接创建的?

上次我们介绍了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. 第1部分,由“#sql”字符串開始,并加上随机值。

  2. 第2部分,一串”疑似”16进制字符。

  3. 第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怎么爬出暂时表空间的坑的更多相关文章

  1. Mysql怎样删除以“#sql-”开头的暂时表

    author:skate time:2014/09/28 Mysql怎样删除以"#sql-"开头的暂时表 现象:在重建索引后,发现Mysqlserver的磁盘空间快满了 在用例如以 ...

  2. oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

    今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace,        b.segfile# ...

  3. oracle表空间查询维护命令大全之三(暂时表空间)史上最全

    --UNDO表空间汇总 --查看全部的表空间名字 SELECT NAME FROM V$TABLESPACE; --创建新的UNDO表空间,并设置自己主动扩展參数; CREATE UNDO TABLE ...

  4. ORACLE-015:ora-25153 暂时表空间为空,ora01652 无法通过128

    写了一个复杂的select语句,突然oracle就报了:ora-25153 暂时表空间为空,这个错误,于是网上查了下.发现了例如以下解决方法:创建一个新的暂时表空间. 首先要有system权限.登录进 ...

  5. MySQL Server参数优化 - innodb_file_per_table(独立表空间)

    1 简介    Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间.    共享表空间以及独立表空间都是针对数据的存储方式而言的.    ...

  6. 表空间_暂时表空间引起的错误:ora-01652 小例

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46888243 报暂 ...

  7. Oracle中暂时表空间的清理

    作者:iamlaosong Oracle暂时表空间主要用来做查询和存放一些缓冲区数据. 暂时表空间消耗的主要原因是须要对查询的中间结果进行排序.暂时表空间的主要作用: 索引create或rebuild ...

  8. MySQL 独立表空间恢复案例

    创建表的时候就会得到元数据.可以通过定义的方式对表的元数据进行生成 这个地方要注意的是 独立表空间当中   ibd & frm分别存储的是什么数据? 表空间:文件系统,为了更好的扩容数据库的存 ...

  9. mysql表空间加密 keyring encryption

    从5.7.11开始,mysql开始支持物理表空间的加密,它使用两层加密架构.包括:master key 和 tablespace key master key用于加密tablespace key,加密 ...

随机推荐

  1. N76E003之WDT(看门狗定时器)

    N76E003提供一个看门狗定时器(WDT),它可以配置成一个超时复位定时器用于复位整个设备.一旦由于外界干扰设备进入非正常状态或挂起,看门狗可以复位恢复系统.这有用于监测系统运行以提高系统可靠性.对 ...

  2. ISD9160学习笔记03_ISD9160音频解码代码分析

    录音例程涉及了录音和播放两大块内容,这篇笔记就先来说说播放,暂且先击破解码这部分功能. 我的锤子便签中有上个月记下的一句话,“斯蒂芬·平克说,写作之难,在于把网状思考,用树状结构,体现在线性展开的语句 ...

  3. 【转载】Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS

    在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩 ...

  4. RH318之域控服务器

    Windows2012域控服务器 一.安装域服务及DNS 1.配置静态IP 2.点击左下角 3.进入--->服务器管理器 4.点击角色和功能 勾选Active Directory域服务与DNS服 ...

  5. nginx(二)----ubuntu14.04下启动或重启和关闭nginx

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 *转载请注明出处 */ 一.启动 /usr/local/nginx/sbin/nginx或者cd /usr/ ...

  6. 使用java实现的socket代理(支持socket4和socket5)

    代码如下: import java.io.*; import java.net.InetAddress; import java.net.ServerSocket; import java.net.S ...

  7. Centos 7.x临时的网络与路由配置

    今天在虚拟机上安装了Centos 7.1操作系统,使用的最小化安装,安装完成后准备使用ifconfig命令时,发现命令不存在,如下: 心想肯定是新版的Centos 系统默认情况下没有使用ifconfi ...

  8. ELK到底是什么?那么多公司用!

    Sina.饿了么.携程.华为.美团.freewheel.畅捷通 .新浪微博.大讲台.魅族.IBM...... 这些公司都在使用ELK!ELK!ELK! ELK竟然重复了三遍,是个什么?   一.ELK ...

  9. [APP] Android 开发笔记 001-环境搭建与命令行创建项目

    1. 安装JDK,SDK JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK http ...

  10. Mysql带返回值与不带返回值的2种存储过程

    过程1:带返回值: 1 drop procedure if exists proc_addNum; 2 create procedure proc_addNum (in x int,in y int, ...