如何获得 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
不是最好的解决方案。
在使用 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
不是最好的解决方案。