RDS for MySQL 临时表相关指标说明

数据库关系型数据库技术服务知识库
前言

在当前 RDS MySQL 控制台上,选择监控告警,引擎监控,Tmp,我们可以看如下指标: 图片 目前关于连接相关的指标有三个,分别为:

  1. 磁盘临时表数量
  2. 临时文件数量

:这两个指标取值均为 "Count/Second" 下面会介绍下这几个指标在RDS 中是如何取值的。

磁盘临时表数量

例如 MySQL 在执行order by,group by 查询时,通常会建立一个或两个临时表,当临时表较小时,可以放到内存中,较大时则会存在于磁盘上。 为了避免翻译的准确性问题,这里使用 MySQL 官方文档进行说明:

  • The number of internal on-disk temporary tables created by the server while executing statements[1].
  • If an internal temporary table is created as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table[2].
mysql> show global status like '%Created_tmp_disk_tables%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 0     |
+-------------------------+-------+
1 row in set (0.00 sec)

控制台显示如下: 图片

临时文件数量

mysqld 已经创建的临时文件的数量[3]。这个指标的取值如下:

mysql> show global status like '%Created_tmp_files%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Created_tmp_files | 8     |
+-------------------+-------+
1 row in set (0.00 sec)

控制台显示如下: 图片

总结

理论上来说,临时表的产生虽然不可避免,但是从数量上来说越少越好,并且磁盘临时表应该保持在一个很小的值。 经验值是 Created_tmp_disk_tables/Created_tmp_tables < 20%

mysql> show global status like '%tmp%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| Created_tmp_disk_tables | 1     |
| Created_tmp_files       | 10     |
| Created_tmp_tables      | 1     |
+-------------------------+-------+
3 rows in set (0.00 sec)

如果磁盘临时表过多,建议优化您的 SQL 语句。

参考文档

[1] https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Created_tmp_disk_tables [2] https://dev.mysql.com/doc/refman/5.7/en/internal-temporary-tables.html [3] https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Created_tmp_files 如果您有其他问题,欢迎您联系火山引擎技术支持服务

22
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论