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

MySQL
前言

在当前 RDS MySQL 控制台上,选择监控告警,引擎监控,Tmp,我们可以看如下指标:

alt

目前关于连接相关的指标有三个,分别为:

  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)

控制台显示如下:

alt

临时文件数量

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

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

控制台显示如下:

alt

总结

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

经验值是 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

如果您有其他问题,欢迎您联系火山引擎技术支持服务

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