MySQL在做啥??启动时 100% 的磁盘利用率

Posted

技术标签:

【中文标题】MySQL在做啥??启动时 100% 的磁盘利用率【英文标题】:What is MySQL doing?? 100% disk utilization from bootMySQL在做什么??启动时 100% 的磁盘利用率 【发布时间】:2017-05-27 12:36:57 【问题描述】:

我在 Win10 机器上有一个大型数据库,mysqld.exe 100% 执行大量磁盘 I/O,持续数小时和数小时 100MB/s - 主要是写入 - 在多次重新启动后仍然存在。我怎样才能找出它到底在做什么,并阻止它?我知道数据库目前没有被使用,我想弄清楚这个 I/O 来自哪里并停止它。我在互联网上找到的唯一解决方案是一般配置建议,我不需要,我现在需要关闭这个东西!

show processlist 什么都不显示。

更新:问题是对表的巨大后台回滚操作。解决办法是:

1) kill mysqld.exe
2) add innodb_force_recovery=3 to my.ini
3) start mysqld.exe
4) export the table (96GB table resulted in about 40GB .sql file)
5) drop the table
6) kill mysqld.exe
7) set innodb_force_recovery=0 to my.ini
8) reboot and import the table back

还不知道数据完整性,但看起来还不错。

感谢米尔尼。

【问题讨论】:

Windows Process Explorer 可能会帮助您调试。 【参考方案1】:

如果您从任务管理器查看资源监视器的磁盘选项卡,您可以看到正在写入哪些文件,这将提示您它是哪个数据库;

然后您可以使用 SELECT * FROM information_schema.innodb_trx\G 之类的东西来查看打开的事务并查看导致此问题的语句

【讨论】:

谢谢,上面写着“trx_state: ROLLING BACK”。我怎样才能取消这个? 我发现:“您可以终止 mysqld 进程并将 innodb_force_recovery 设置为 3 以在不回滚的情况下启动数据库,然后 DROP 导致失控回滚的表”。我可以在不删除表的情况下防止回滚吗?这是一张重要的表格,而且太大而无法导出。 您没有备份吗?请告诉我这不是在 Windows 10 客户端而不是服务器上运行的生产数据库吗?理想情况下,您应该让回滚完成... 不,这更像是我的测试。问题是它在 SSD 上,那些写入正在谋杀它,所以我对非理想解决方案持开放态度。 我实际上比 MySQL 更熟悉 MsSQL,但是快速浏览一下文档(这里:dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html)建议你应该在 [mysqld] 标题部分下添加它【参考方案2】:

如果默认的 8MB 增加到 512MB,则只需增加 InnoDB 缓冲池大小

SET GLOBAL Innodb_buffer_pool_size = 5168709120

【讨论】:

以上是关于MySQL在做啥??启动时 100% 的磁盘利用率的主要内容,如果未能解决你的问题,请参考以下文章

file.flush() 到底在做啥?

磁盘占用100%重启动不了

Visual Studio 2012 devenv.exe @ 50% F5 调试在完成之前不会启动,无论它在做啥

Visual Studio 100% 磁盘使用率

win10磁盘100%占用怎么办 解决方法

磁盘占用100%怎么解决