问题:

在 实验 05中,我们看到了内部临时表会使用到不少内存。

那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的?

实验:

我们仍使用 实验 05中的环境,略去准备数据的过程。

我们仍然使用两个会话,一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察:

主会话线程号为 29,

将 performance_schema 中的统计量重置,

临时表的表大小限制取决于参数 tmp_table_size 和 max_heap_table_size 中较小者,我们实验中以设置 max_heap_table_size 为例。

我们将会话级别的临时表大小设置为 2M(小于上次实验中临时表使用的空间),执行使用临时表的 SQL:

查看内存的分配记录:

会发现内存分配略大于 2M,我们猜测临时表会比配置略多一点消耗,可以忽略。

查看语句的特征值:

可以看到语句使用了一次需要落磁盘的临时表。

那么这张临时表用了多少的磁盘呢?

我们开启 performance_schema 中 waits 相关的统计项:

重做实验,略过。

再查看 performance_schema 的统计值:

可以看到几个现象:

1. 临时表空间被写入了 7.92MiB 的数据。

2. 这些数据是语句写入后,慢慢逐渐写入的。

来看看这些写入操作的特征,该方法我们在 实验 03使用过:

可以看到写入的线程是 page_clean_thread,是一个刷脏操作,这样就能理解数据为什么是慢慢写入的。

也可以看到每个 IO 操作的大小是 16K,也就是刷数据页的操作。

结论:

我们可以看到,

1. MySQL 会基本遵守 max_heap_table_size 的设定,在内存不够用时,直接将表转到磁盘上存储。

2. 由于引擎不同(内存中表引擎为 heap,磁盘中表引擎则跟随 internal_tmp_disk_storage_engine 的配置),本次实验写磁盘的数据量和实验 05中使用内存的数据量不同。

3. 如果临时表要使用磁盘,表引擎配置为 InnoDB,那么即使临时表在一个时间很短的 SQL 中使用,且使用后即释放,释放后也会刷脏页到磁盘中,消耗部分 IO。

mysql 内部 临时表_MySQL内部临时表何时使用磁盘相关推荐

  1. mysql 内部 临时表_MySQL内部临时表策略 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    1H#dGTog4r5J6H0通过对源码的跟踪和调试,以及参考MySQL官方文档,对MySQL内部临时表使用策略进行整理,以便于更加深入的理解.#D4s,PXr9k_2S051Testing软件测试网 ...

  2. mysql 查询 插入 临时表_mysql创建临时表,将查询结果插入已有表中

    今天遇到一个很棘手的问题,想临时存起来一部分数据,然后再读取.我记得学数据库理论课老师说可以创建临时表,不知道mysql有没有这样的功能呢?临时表在内存之中,读取速度应该比视图快一些.然后还需要将查询 ...

  3. mysql 中有没有临时表_MySQL 中的两种临时表

    来源:阿里云RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/06/07/ 外部临时表 通过CREATE TEMPORARY TABLE 创建的 ...

  4. mysql临时表_MySQL中的两种临时表

    目录: MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间. 使用其他MySQL客户端程序连接MySQL数据库服务器 ...

  5. mysql 临时索引_MySQL select in 语句未使用索引,产生磁盘临时表,导致 crash

    1. 问题描述 业务执行一个非常简单的 SQL,结果导致 MySQL crash,并且每次都能复现. MySQL 版本: Percona Server for MySQL 5.7.20 SQL 语句: ...

  6. mysql临时表的使用实例_MySQL中临时表的使用示例

    这两天事情稍微有点多,公众号也停止更新了几天,结果有读者催更了,也是,说明还是有人关注,利己及人,挺好. 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实没有过多的研究,只是知道MySQL ...

  7. MySQL存储过程:利用游标+临时表实现查询

    MySQL存储过程使用游标.临时表实现动态SQL查询 2020.3.24 用能第二周周二上午,任务需求:编写存储过程查询监测设备状态以及目标监测设备状态.(任务完成) 改存储过程包含了大量相关知识,特 ...

  8. mysql表变量临时表_sql server 临时表详细讲解及简单示例

    一.概述 在sql server里临时表存储在TempDB库中,TempDB是一个系统数据库,它只有Simple恢复模式,也是最小日志记录操作.主要用于存放局部临时表,全局临时表,表变量,都是基于临时 ...

  9. mysql 临时表 概念_临时表的概念

    union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执容行效率要比union高 一.临时表的概念 在我们操作的表数据量庞大而且又要关联其他表进行查 ...

最新文章

  1. html如何让tr自动换行,js和css如何让table自动换行但是不是超出td?
  2. java.lang.exception_java.lang.RuntimeException和java.lang.Exception
  3. 基于java多线程来实现生产者和消费者的实例
  4. Android开发--Service开启,关闭,绑定,解除
  5. ELK学习9_ELK数据流传输过程_问题总结2
  6. mysql 导出数据为csv格式
  7. java获取mysql执行计划_好程序员Java学习路线之MySQL的执行计划
  8. 【hadoop】hadoop 安装 kerberos
  9. J2EEd 13个规范
  10. C++中sizeof和strlen
  11. (转)C#读写共享文件
  12. Retrofit2从入门到放弃
  13. VS2017使用Qt教程
  14. win10底部任务栏无响应解决办法
  15. 大话西游2服务器修改,大话西游2:9.17维护解读:五倍次数修改全服上线,灵兽村要变样啦...
  16. git 不abandon的办法
  17. java swing choice_Java-GUI基础(三)java.swing
  18. 软件测试周刊(第67期):用一颗浏览的心,去看待人生,一切的得与失、隐与显,都是风景与风情。
  19. “2022零信任神兽方阵”启动调研,欢迎各单位填报信息
  20. 软件测试基础学习 - Linux文件及文件内容查找命令总结

热门文章

  1. HDU 2088 Box of Bricks
  2. (转)关于同步和异步的理解(ajax网络编程)
  3. 线程同步 互斥量(mutex) Linux函数
  4. Eclipse创建Java项目时提示Open Associated Perspective?
  5. ALSA DAPM创建codec到codec的dai连接
  6. Go实现 爬虫v0.2
  7. prolog参考手册学习(第一章)
  8. android Camera相关问题及NV12剪裁旋转
  9. tensorflow之安装opencv
  10. 解决yolo+cudnn+opencv+gpu的一些问题