在使用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/