MySQL:为什么在命令“优化表”后innodb缓冲池内存增加

时间:2019-03-21 12:57:07

标签: mysql optimization database-indexes

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

步骤:  1.启动mysql docker。使用大约2-2.5G的内存;  2.启动命令“ optimiz table”。使用内存增长到4.5-5G;  3.重新启动mysql docker并再次使用内存2-2.5G(请参见屏幕截图)  4.列表项;

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

为什么会这样? 附言对不起,我的英语不好。

screenshot

1 个答案:

答案 0 :(得分:0)

  • 请勿在InnoDB表上使用OPTIMIZE TABLE。它几乎永远不会提供任何好处。
  • OPTIMIZE TABLE将表复制过来。显然您有innodb_file_per_table = OFF,这意味着它将在ibdata1中复制该表的第二个副本。
  • “每列的索引”-这通常是浪费。查看SELECTs,您必须查看可以使用的索引。 (在此处寻求帮助,但提供SHOW CREATE TABLE和相关查询。)
  • buffer_pool在RAM中;其大小受innodb_buffer_pool_size的限制。当MySQL启动时(例如,在您的Docker中),它会很小并且会增长,甚至可能达到该大小。
  • 使用OPTIMIZE(尤其是使用这么多索引)会消耗部分或全部可用的buffer_pool。