无需过分关注Created_tmp_disk_tables
通常地,我们习惯以 Created_tmp_tables/(Created_tmp_disk_tables + Created_tmp_tables) 或者已各自的一个时段内的差额计算,来判断基于内存的临时表利用率。所以,我们会比较关注 Created_tmp_disk_tables 是否过多,从而认定当前服务器运行状况的优劣。
而事实上,我们并没有必要太过分的关注 Created_tmp_disk_tables,因为通过上面的公式,并不能真正反映到mysql里临时表的利用率。通过打上percona的补丁后,我们就可以查看到每个slow query的执行计划了,也就知道了其实很多情况下都创建了 tmp_disk_table,而我们并不需要担心,例如之前我写过的[深入理解MySQL系列] - mysqldump的几个主要选项探究。可以看到,在调用mysqldump备份数据时,大概执行步骤如下:
081022 17:39:33 7 Connect root@localhost on 7 Query /*!40100 SET @@SQL_MODE='' */ 7 Init DB yejr 7 Query SHOW TABLES LIKE 'yejr' 7 Query LOCK TABLES `yejr` READ /*!32311 LOCAL */ 7 Query SET OPTION SQL_QUOTE_SHOW_CREATE=1 7 Query show create table `yejr` 7 Query show fields from `yejr` 7 Query show table status like 'yejr' 7 Query SELECT /*!40001 SQL_NO_CACHE */ * FROM `yejr` 7 Query UNLOCK TABLES 7 Quit
其中,有一步是:show fields from `yejr`。从slow query记录的执行计划中,可以知道它也产生了 Tmp_table_on_disk。
另外,例如 show [global] status 也是会创建 Tmp_table_on_disk 的。
从上面的分析来看,有些情况下产生的 Tmp_table_on_disk 我们完全不用担心,因此没必要过分关注 Created_tmp_disk_tables,但如果它的值大的离谱的话,那就好好查一下,你的服务器到底都在执行什么查询了。
关于percona微秒查询补丁的介绍可以看这里:MySQL 微秒慢查询补丁。
评论
Mars.He (未验证)
周一, 2014/08/25 - 13:54
Permalink
这句话您确定么,“另外,例如 show [global]
这句话您确定么,“另外,例如 show [global] status 也是会创建 Tmp_table_on_disk 的。
从上面的分析来看,有些情况下产生的 Tmp_table_on_disk 我们完全不用担心,因此没必要过分关注 Created_tmp_disk_tables,但如果它的值大的离谱的话,那就好好查一下,你的服务器到底都在执行什么查询了。”,我在官方看到的貌似不一样,“Each invocation of the SHOW STATUS statement uses an internal temporary table and increments the global Created_tmp_tables value. ”,可是官方没有说明增加Created_tmp_disk_tables的
Mars.He (未验证)
周一, 2014/08/25 - 13:54
Permalink
这句话您确定么,“另外,例如 show [global]
这句话您确定么,“另外,例如 show [global] status 也是会创建 Tmp_table_on_disk 的。
从上面的分析来看,有些情况下产生的 Tmp_table_on_disk 我们完全不用担心,因此没必要过分关注 Created_tmp_disk_tables,但如果它的值大的离谱的话,那就好好查一下,你的服务器到底都在执行什么查询了。”,我在官方看到的貌似不一样,“Each invocation of the SHOW STATUS statement uses an internal temporary table and increments the global Created_tmp_tables value. ”,可是官方没有说明增加Created_tmp_disk_tables的
yejr
周一, 2014/11/03 - 14:32
Permalink
我在整理这篇文章是2009年了,当初的版本
我在整理这篇文章是2009年了,当初的版本(版本号是 5.0.67)应该是这样的。目前我使用5.5版本,确实只会产生 Created_tmp_tables 而不是 Created_tmp_disk_tables,不过 show fields from table 还是导致 Created_tmp_disk_tables 值的增加。
Mars.He (未验证)
周一, 2014/08/25 - 13:57
Permalink
为什么我的评论看不见呢
为什么我的评论看不见呢