在使用ENGINE=MEMORY将行插入临时表时,出现了以下错误:
“tmp”表已满
我知道可以增加max_heap_table_size变量来克服这个问题,但问题是我不知道当前数据使用了多少内存。
我试过SHOW TABLE STATUS;但它似乎不包括临时表。我还查看了information_schema.tables,但是它没有显示任何关于临时表的信息。
如何获取临时表的当前使用情况统计信息?

最佳答案

为了进行这种调试,请将其设置为一个足够长的永久表,以获得您的答案。甚至烤进去:

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。你在“抢彼得的钱给保罗”,这可能会导致更糟糕的整体表现。
请进一步描述你在做什么。可能MEMORY不是最好的解决方案。

关于mysql - 如何获得TEMPORARY MySQL MEMORY表的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48270872/

10-16 13:42