【问题标题】:How can I get the size of a TEMPORARY MySQL MEMORY table?如何获取 TEMPORARY MySQL MEMORY 表的大小?
【发布时间】:2018-01-15 21:24:34
【问题描述】:

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

表 'tmp' 已满

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

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

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

【问题讨论】:

标签: mysql temp-tables


【解决方案1】:

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

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 可能不是最好的解决方案。

【讨论】:

  • 谢谢 - 事实上,你在这里展示的正是我最后做的,只是为了了解所使用的内存。临时表是作为搜索引擎的一部分构建的,所以它只包含一个 id 列表,仅此而已,然后其他几个查询使用它来执行连接、过滤器和各种行计数。然后它立即被扔掉。因为它或多或少是我目前使用 myisam 的只读数据,而不是 innodb。目前它实际上表现相当不错,但我只是在考虑使用内存是否可行并且可以提供性能提升。
猜你喜欢
  • 2021-04-05
  • 2011-06-18
  • 2017-02-21
  • 2010-12-16
  • 1970-01-01
相关资源
最近更新 更多