我在具有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列,表的每一列都有索引)。
为什么会这样? 附言对不起,我的英语不好。
答案 0 :(得分:0)
OPTIMIZE TABLE
。它几乎永远不会提供任何好处。OPTIMIZE TABLE
将表复制过来。显然您有innodb_file_per_table = OFF
,这意味着它将在ibdata1
中复制该表的第二个副本。SELECTs
,您必须查看可以使用的索引。 (在此处寻求帮助,但提供SHOW CREATE TABLE
和相关查询。)innodb_buffer_pool_size
的限制。当MySQL启动时(例如,在您的Docker中),它会很小并且会增长,甚至可能达到该大小。OPTIMIZE
(尤其是使用这么多索引)会消耗部分或全部可用的buffer_pool。