大量MySQL临时磁盘表

Tom*_*Tom 12 mysql performance monitoring

我们注意到MySQL正在报告大量的临时磁盘表(超过10,000),这是由服务器密度报告的.试图更多地了解这一点.

  • 为什么MySQL创建临时磁盘表?
  • 它们对性能有何影响?
  • 它们是否被MySQL删除或者这个数字会增加吗?

Mar*_*c B 15

可以出于很多原因创建临时表.任何具有大数据集并需要排序的选择操作都将写入一个.由查询直接创建的实际临时表(TEMPORARY表类型)是基于每个连接完成的,因此如果您有一个包含50个连接的脚本,每个连接执行相同的临时表,那么它们就有50组磁盘上的临时文件.临时表创建原因组按顺序排序基于磁盘的i/o是DBMS中最昂贵的部分,因此,如果这些表用于大型数据集,则可能会将数据库性能限制为您的数据库性能/ o系统.但一般来说,只是现有的,他们只是在占用磁盘空间而不是其他东西.

用于排序的临时表应在查询完成时自行清理.'TEMPORARY'类型的临时表将在它们所连接的连接关闭时自行清理.如果您正在使用持久连接,那么TEMPORARY表将一直存在,直到您(或程序)手动DROP它们为止.


Vad*_*dim 7

首先阅读Marc B的答案这就是为什么你有很多临时表的原因.无论如何,临时表本身并不坏,坏的是"磁盘上的临时表",这是一个缓慢的并导致大量的磁盘IO.

要防止临时表存储在磁盘上,请尝试按照下列步骤操作:

  • 检查max_heap_table_size变量的值
  • 检查tmp_table_size变量的值
  • 检查所有临时表中磁盘表的百分比.只需比较show global status like 'Created_tmp_%tables'这两个数字.如果百分比不是太大 - 没有什么可担心的.