如何获得TEMPORARY MySQL MEMORY表的大小?

时间:2018-01-15 21:24:34

标签: mysql temp-tables

在使用ENGINE=MEMORY将行插入临时表时,我遇到了错误:

  

表'tmp'已满

我知道我可以增加max_heap_table_size变量来克服这个问题,但问题是我不知道当前数据使用了多少内存。

我已经尝试了SHOW TABLE STATUS;但它似乎没有包含临时表。我还查看了information_schema.tables但是,它再次没有显示有关临时表的任何信息。

如何获取临时表的当前使用情况统计信息?

1 个答案:

答案 0 :(得分:2)

为了进行此调试,请将其设置为永久性表,以便获得答案。甚至烘烤它:

CREATE /* not TEMPORARY */ TABLE tmp...;
INSERT INTO tmp...;
use `tmp`
SHOW TABLE STATUS LIKE 'tmp';
DROP TABLE tmp;

如果这个tmp表需要同时存在多个连接,那么你可能会遇到更糟糕的问题 - 交换或内存不足。我提出这个问题而不是讨论如何使名称tmp对连接唯一。

请注意,您需要减少innodb_buffer_pool_size(可能还有其他缓存限制),为您的tmp表留下足够的RAM。你是"抢劫彼得支付保罗&#34 ;;它可能导致更糟的整体表现。

请进一步说明你在做什么。可能MEMORY不是最佳解决方案。