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

How can I get the size of a TEMPORARY MySQL MEMORY table?

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

The table 'tmp' is full

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

我试过 SHOW TABLE STATUS; 但它似乎不包括临时 table。我也查看了 information_schema.tables 但同样,它没有显示有关临时 tables 的任何信息。

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

为了进行调试,请将其设为永久 table 足够长的时间以获得您的答案。甚至烘烤它:

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

如果此 tmp table 需要同时存在多个连接,那么您可能会遇到更严重的问题 -- 交换或 运行 内存不足。我提出这个问题而不是讨论如何使连接的名称 tmp 唯一。

请注意,您需要降低 innodb_buffer_pool_size(可能还有其他缓存限制)以便为您的 tmp table 留出足够的 RAM。你是"robbing peter to pay paul";它可能导致更差整体表现。

请进一步描述你在做什么。可能MEMORY不是最好的解决方案。