首页 > 其他分享 >第06问:内部临时表何时使用磁盘?

第06问:内部临时表何时使用磁盘?

时间:2022-12-20 15:00:18浏览次数:43  
标签:06 临时 何时 写入 实验 内存 使用 磁盘


第06问:内部临时表何时使用磁盘?_数据

 

问题:

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

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

 

实验:

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

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

主会话线程号为 29,

第06问:内部临时表何时使用磁盘?_数据_02

将 performance_schema 中的统计量重置,

第06问:内部临时表何时使用磁盘?_SQL_03

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

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

第06问:内部临时表何时使用磁盘?_数据_04

查看内存的分配记录:

第06问:内部临时表何时使用磁盘?_MySQL_05

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

查看语句的特征值:

第06问:内部临时表何时使用磁盘?_MySQL_06

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

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

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

第06问:内部临时表何时使用磁盘?_MySQL_07

重做实验,略过。

再查看 performance_schema 的统计值:

第06问:内部临时表何时使用磁盘?_MySQL_08

可以看到几个现象:

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

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

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

第06问:内部临时表何时使用磁盘?_MySQL_09

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

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

 

结论:

我们可以看到,

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

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

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


关于 MySQL 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!

 

第06问:内部临时表何时使用磁盘?_数据_10

标签:06,临时,何时,写入,实验,内存,使用,磁盘
From: https://blog.51cto.com/u_15077536/5955433

相关文章

  • 数据库错误1064
    数据库错误1064及解决昨天在做后台管理项目时执行的代码<updateid="updateUserMoney"parameterType="com.youyu.war.entity.po.UserPo">UPDATEuser......
  • MySQL-InnoDB磁盘结构
    主要阐述InnoDB存储引擎(MySQL5以后的默认引擎)。数据库中最基本的组成结构是数据表,视觉上的表和其对应的磁盘结构如下:此图参考了厦门大学课堂:MySQL原理。但是视频中一些......
  • Kubernetes监控手册06-监控APIServer
    写在前面如果是用的公有云托管的Kubernetes集群,控制面的组件都交由云厂商托管的,那作为客户的我们就省事了,基本不用操心APIServer的运维。个人也推荐使用云厂商这个服务,......
  • ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度
    平台信息:PC:ubuntu16.04、i5、七彩虹GTX1060显卡作者:庄泽彬(欢迎转载,请注明作者)说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写......
  • Linux磁盘管理
    ​Linux磁盘管理1.写在前面在此强调一个Linux的核心机制就是一切皆文件。I/OPorts即I/O设备地址,用来标识硬件对应的设备地址,来让操作系统以及cpu使用。CPU的核数不......
  • KBL406-ASEMI适配高端电源整流桥KBL406
    编辑:llKBL406-ASEMI适配高端电源整流桥KBL406型号:KBL406品牌:ASEMI封装:KBL-4特性:整流桥正向电流:4A反向耐压:600V恢复时间:>2000ns引脚数量:4芯片个数:4芯片尺寸:84MIL浪涌电流:120A......
  • KBL406-ASEMI适配高端电源整流桥KBL406
    编辑:llKBL406-ASEMI适配高端电源整流桥KBL406型号:KBL406品牌:ASEMI封装:KBL-4特性:整流桥正向电流:4A反向耐压:600V恢复时间:>2000ns引脚数量:4芯片个数:4芯片尺寸:84MIL......
  • Qt音视频开发06-海康sdk内核linux客户端
    一、前言海康sdk的示例在官方是提供了的,但是无论UI还是交互简直是宇宙无敌的垃圾,猜测应该是初学者编写的,估计练手用的,所以老早就想把这个linux支持集成到自己的示例中,既然......
  • 006.Git如何删除本地仓库
    Git如何删除本地仓库想要删除本地的git仓库,其实很简单,只需要删除目录下的.git文件就可以。前往想要删除git仓库的目录。执行以下命令。rm-rf.git......
  • Redis——06 学习
    Redis——06将Redis的基本使用以及三种模式进行了学习和了解。接下来就学习如何在Java中以及SpringBoot框架中使用Redis。JedisRedis在Java上的操作多半是集......