MySQL可能需要一个多小时才能启动

时间:2017-02-20 15:36:31

标签: mysql percona

我有一个超过1M的表的mysql(Percona)5.7实例。 当我启动数据库时,可能需要一个多小时才能启动。 Errorlog没有显示任何内容,但是当我追踪mysqld_safe时,我发现MySQL正在获取数据库中每个文件的统计信息。

知道为什么会这样吗? 另外,请不要修改我的架构,这是一个黑盒子。

由于

1 个答案:

答案 0 :(得分:1)

原来是2个问题(数百万个表除外)!

  1. 当MySQL启动并且需要进行崩溃恢复时,从5.7.17开始,它需要遍历你的datadir来构建它的字典。这将在未来版本(8.0)中解除,因为MySQL将拥有自己的目录,并且不再依赖于datadir内容。 Doc表示不再这样做了。这是真的和错误的。它不会读取ibd文件的第一页,但它会执行文件统计。 Filed Bug
  2. 一旦完成(1),它就会启动一个新进程,“执行'SELECT * FROM INFORMATION_SCHEMA.TABLES;'使用已弃用的分区引擎获取表的列表。“那当然会再次打开所有文件。如果您认为不需要,请使用disable-partition-engine-check。 Doc
  3. 使用sysdig可以观察到所有这些。非常强大的方便dtrace之类的工具。

      

    sysdig proc.name = mysqld | grep“open fd =”

    好的,现在,是时候减少文件数了。