我有一个查询停滞不前,我不知道为什么。它看起来很合理,但它“永远”运行(我去吃午饭并让它运行,20 分钟后还没有完成)。
查看“SHOW PROCESSLIST”,我看到我的连接状态为“正在复制到 tmp 表”。
我查看了 my.cnf,看起来临时文件应该在 /tmp 中,但是那里没有与 MySQL 相关的内容(只有 2 个目录,都是空的)。
为了帮助我诊断出了什么问题,我想我应该看看它应该复制到的临时文件。如果它很大,我一定把查询搞砸了。如果没有,也许这是一个错误。
但我无法弄清楚它在哪里存储它们。它是内存中的“文件”吗?
我在 Ubuntu 9.04 JeOS 安装上运行 MySQL 5.1.31。
许多临时表可以并且将在内存中创建。表是在内存中创建还是在磁盘上创建取决于一些因素,例如表的大小、结构(是否有 BLOB)等等。
我建议您阅读TMP_TABLE_SIZE 和 MAX_HEAP_TABL\E_SIZE以深入了解临时表的工作原理。
您可以检查输出
mysql> show status like '%tmp%';
Run Code Online (Sandbox Code Playgroud)
如果您实际上是在创建磁盘表。但是请注意,实际的临时表文件对于确定是否存在问题几乎没有帮助。
你也可以尝试EXPLAIN查询,看看应该如何执行。
归档时间: |
|
查看次数: |
21737 次 |
最近记录: |