在使用ENGINE=MEMORY
将行插入临时表时,我遇到了错误:
表'tmp'已满
我知道我可以增加max_heap_table_size
变量来克服这个问题,但问题是我不知道当前数据使用了多少内存。
我已经尝试了SHOW TABLE STATUS;
但它似乎没有包含临时表。我还查看了information_schema.tables
但是,它再次没有显示有关临时表的任何信息。
如何获取临时表的当前使用情况统计信息?
答案 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
不是最佳解决方案。