Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查看MySQL内部innodb临时表的大小_Mysql_Innodb_Amazon Aurora - Fatal编程技术网

如何查看MySQL内部innodb临时表的大小

如何查看MySQL内部innodb临时表的大小,mysql,innodb,amazon-aurora,Mysql,Innodb,Amazon Aurora,我看到有很多人在写。我可以通过显示全局状态来查看计数,其中变量名称类似于'Created\u tmp\u disk\u tables' 我知道我可以更新max\u heap\u table\u size和tmp\u table\u size来帮助防止这种情况,但是如果不知道写入磁盘的表的大小,就很难知道要使用什么值 有人知道如何找到这个值吗?只要查看文档,并假设仅仅知道表的数量是不够的(查看创建的\u tmp\u表),该变量将为您提供存储这些表的目录的位置。降低温度应确保在磁盘上创建临时表,以便

我看到有很多人在写。我可以通过
显示全局状态来查看计数,其中变量名称类似于'Created\u tmp\u disk\u tables'

我知道我可以更新
max\u heap\u table\u size
tmp\u table\u size
来帮助防止这种情况,但是如果不知道写入磁盘的表的大小,就很难知道要使用什么值


有人知道如何找到这个值吗?

只要查看文档,并假设仅仅知道表的数量是不够的(查看
创建的\u tmp\u表
),该变量将为您提供存储这些表的目录的位置。降低温度应确保在磁盘上创建临时表,以便您能够查看其大小。

这不容易获得。在Percona服务器中,可以选择在慢速查询日志中添加其他信息,以显示临时表的大小(请参阅)

(上面的示例取自Percona文档,显示了扩展字段,尽管该示例用于未创建临时表的查询,因此大小显示为0。)

在Oracle MySQL中,一些相同的扩展信息在PERFORMANCE_模式的查询事件中可用,但临时表大小不可用

2014年,我记录了一个功能请求以提供此信息:此错误已被确认,但据我所知尚未实现

有点不清楚这将如何实现,因为任何给定的查询都可能创建多个不同大小的临时表。我相信Percona特性显示了这种情况下临时表大小的总和

作为建议,我所能提供的只是增加
max\u heap\u table\u size
tmp\u table\u size
的增量,并监控
创建的tmp\u disk\u tables
报告的
显示全局状态
,与
创建的tmp\u tables
(不使用磁盘的临时表)相比的增长率。由于允许的tmp表大小能够容纳创建的更大百分比的临时表,您应该开始看到磁盘上临时表与内存中临时表的比率降低

通常不需要增加
tmp_table_size
来容纳所有可能的临时表,无论它们有多大。您希望最大的异常值使用磁盘。但只要临时表在98%的时间内使用内存,您就可以了。这意味着创建的\u tmp\u磁盘\u表与创建的\u tmp\u表的比率应为1:50或更高。

(比尔答案的附录)

在5.7和8.0中对tmp表的处理进行了一些重大更改。我不确定他们是否适用于这里,但我知道

超过
tmp\u table\u size
并不是使用基于磁盘的临时表--
TEXT
BLOB
@variables
UNION
等的唯一原因。因此,我对Bill的1:50建议提出质疑

Tmp表(在磁盘或内存中)可以通过大量查询创建;复杂查询可能需要多个tmp表。因此,同时tmp表的数量可能超过
max\u connections
。因此,我建议将
tmp\u table\u size
保持在可用RAM的1%以下。如果您确实有一个高设置,并且需要大量的同时tmp表,那么可能会导致交换,这对性能非常不利

对于创建的\u tmp*表,有许多“修复程序”可以使其具有较高的值;太多了,无法在这里一一列举。如果要显示查询(以及相关的
显示创建表
);我们可以讨论那个特殊情况

当一个客户的系统,我寻找的东西,如

Created_tmp_disk_tables > 1/second
Created_tmp_disk_tables > 4% of queries
Created_tmp_tables > 20/second

在我看来,所有这些都表明有必要对缓慢的查询进行仔细检查。但是如果
tmp\u table\u size
大于RAM的1%,我建议降低它,即使这会影响一些查询。

看起来确实有一小部分表正在写入磁盘(小于1%)。然而,它看起来每天会产生大约1GB的数据。您知道重新启动数据库是否是回收磁盘临时表占用空间的唯一方法吗?根据tmp,在完全关闭期间,表空间将被删除,因此,是的,您必须重新启动。有些人选择设置
default\u tmp\u storage\u engine=MyISAM
以避免使用InnoDB tmp表空间。您使用的是哪个版本的MySQL/Aurora?Aurora版本1.14.1
Created_tmp_disk_tables > 1/second
Created_tmp_disk_tables > 4% of queries
Created_tmp_tables > 20/second