在当前 RDS MySQL 控制台上,选择监控告警,引擎监控,Tmp,我们可以看如下指标:
目前关于连接相关的指标有三个,分别为:
- 磁盘临时表数量
- 临时文件数量
注:这两个指标取值均为 "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
如果您有其他问题,欢迎您联系火山引擎技术支持服务