我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

问题:

在 实验 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 的技术内容,你们还有什么想知道的吗?赶紧留言告诉小编吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

问题:在 实验 05中,我们看到了内部临时表会使用到不少内存。那么如果需要的临时表再大一些,必然要使用到磁盘来承载,那么内部临时表是何时使用磁盘的?实验:我们仍使用 实验 05中的环境,略去准备数据的过程。我们仍然使用两个会话,一个会话 run,用于运行主 S
第06问:内部临时表何时使用磁盘?
2020-10-03

第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?

问题:MySQL 在处理临时结果集(UNION 运算 / 聚合运算等)时,会用到内部临时表(internal temporary table)。那么内部临时表会使用多少内存呢?实验:我们先创建一个测试用的数据库,然后准备好数据,我们使用一个带 UNION 的子
第05问:MySQL 在处理临时结果集时,内部临时表会使用多少内存?
2018-08-15
SQLServer 错误 41359 当数据库选项 READ_COMMITTED_SNAPSHOT 设置为 ON 时,使用 COMMITTED 隔离级别访问内存优化表的查询不能访问基于磁盘的表。 使用
2023-11-05

编程热搜

目录