为什么 innodb 缓冲池内存在命令 "optimize table" 后增长?

Why does innodb buffer pool memory grow after command "optimize table"?

我在带有 Mysql 容器的本地计算机上使用 docker。

步骤:

  1. 启动 mysql docker。使用内存约2-2.5G。
  2. 启动命令“优化table”。使用内存增长到 4.5-5G;
  3. 重新启动mysql docker并再次使用内存2-2.5G(见截图)
  4. 列表项;

数据库有 10 个小 table(< 10 行)和一个大 table(10,000,000 行,10 列,table 每列都有索引)。

为什么会这样? P.S。抱歉我的英语不好。

screenshot

  • 不要在 InnoDB table 上使用 OPTIMIZE TABLE。它几乎从不提供任何好处。
  • OPTIMIZE TABLE 复制 table 过来。显然你有 innodb_file_per_table = OFF,这意味着它将在 ibdata1.
  • 中制作 table 的第二个副本
  • "An index for every column" -- 这通常是一种浪费。看看SELECTs 你得看看你能用什么索引。 (在这里寻求帮助,但提供 SHOW CREATE TABLE 和相关查询。)
  • buffer_pool 在 RAM 中;它的大小受到 innodb_buffer_pool_size 的限制。当 MySQL 开始时(例如,在您的 Docker 中),它会开始变小并逐渐变大,也许会达到那个大小。
  • 执行 OPTIMIZE,尤其是有这么多索引时,将消耗部分或全部可用 buffer_pool。