Windows 上的 MySQLDump 性能随时间下降
MySQLDump on Windows performance degrading over time
我有一个问题让我(和我的客户)感到困惑。它们是 运行 MySQL on Windows - 我继承了这个平台,我没有设计它并在 Windows 上更改为 MSSQL 或迁移 MySQL 实例到 *Nix VM 在这个阶段不是一个选项。
服务器是单个 Windows VM,配置合理(4 个 vCore,16 Gb RAM 等)
最初 - 他们有一个单独的磁盘用于 OS、MySQL 和 MySQL 备份位置,他们得到不一致的备份,经常失败并显示错误消息:
mysqldump:写入时出现错误号 22
最终我们通过简单地将备份目标移动到第二个虚拟磁盘解决了这个问题(即使它在同一个底层存储网络上,我们认为上述错误是由底层 OS )
生活也很美好....
大约2-3个月
现在我们有一个不同的(但我的直觉告诉我相关的)问题:
MySQL 转储过程花费的时间越来越长(在过去 4 天里,每次备份转储所花费的时间增加了大约 30 分钟)。
数据库本身有点大 - 58 Gb,但是大小增量每天只有大约 100 mb(除非我遗漏了什么 - 转储 100 mb 的数据不应该额外花费 30 分钟数据).
最初我们认为这是底层存储网络 I/O - 但是作为备份脚本的一部分,一旦创建了 .SQL 文件,它就会被压缩(大约 8.5 Gb ) - 这个过程在所用时间上非常一致 - 这让我不怀疑磁盘 I/O (因为我的假设是,如果是这种情况,Zip 时间也会增加)。
我用来调用备份的脚本是这样的:
%mysqldumpexe% --user=%dbuser% --password=%dbpass% --single-transaction --databases %databases% --routines --force=true --max_allowed_packet=1G --triggers --log-error=%errorLogPath% > %backupfldr%FullBackup
MySQLDump 的版本是 C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe
现在复杂一点 - 我主要是 Windows 人(所以 MySQL 经验有限),办公室里的所有 Linux 人都不会碰它,因为在 Windows.
我怀疑增加时间的原因是行锁发生了一些奇怪的事情(可能是由于使用 MySQL 实例的应用程序) - 但我不确定。
现在回答我的问题:随着时间的推移,MySQL 转储的时间逐渐增加,有没有人经历过类似的事情?
在 Windows 上有没有办法本地监控 MySQL 转储的性能以找到 bottlenecks/locks 在哪里?
在 Windows 平台上进行常规 MySQL 备份是否有更好的方法?
我应该告诉客户它不受支持并将其迁移到受支持的平台吗?
我应该简单地说一个4个字母的词然后去酒吧消遣一下吗?
最终发现罪魁祸首是底层存储网络。
我有一个问题让我(和我的客户)感到困惑。它们是 运行 MySQL on Windows - 我继承了这个平台,我没有设计它并在 Windows 上更改为 MSSQL 或迁移 MySQL 实例到 *Nix VM 在这个阶段不是一个选项。
服务器是单个 Windows VM,配置合理(4 个 vCore,16 Gb RAM 等)
最初 - 他们有一个单独的磁盘用于 OS、MySQL 和 MySQL 备份位置,他们得到不一致的备份,经常失败并显示错误消息:
mysqldump:写入时出现错误号 22
最终我们通过简单地将备份目标移动到第二个虚拟磁盘解决了这个问题(即使它在同一个底层存储网络上,我们认为上述错误是由底层 OS )
生活也很美好....
大约2-3个月
现在我们有一个不同的(但我的直觉告诉我相关的)问题:
MySQL 转储过程花费的时间越来越长(在过去 4 天里,每次备份转储所花费的时间增加了大约 30 分钟)。
数据库本身有点大 - 58 Gb,但是大小增量每天只有大约 100 mb(除非我遗漏了什么 - 转储 100 mb 的数据不应该额外花费 30 分钟数据).
最初我们认为这是底层存储网络 I/O - 但是作为备份脚本的一部分,一旦创建了 .SQL 文件,它就会被压缩(大约 8.5 Gb ) - 这个过程在所用时间上非常一致 - 这让我不怀疑磁盘 I/O (因为我的假设是,如果是这种情况,Zip 时间也会增加)。
我用来调用备份的脚本是这样的:
%mysqldumpexe% --user=%dbuser% --password=%dbpass% --single-transaction --databases %databases% --routines --force=true --max_allowed_packet=1G --triggers --log-error=%errorLogPath% > %backupfldr%FullBackup
MySQLDump 的版本是 C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe
现在复杂一点 - 我主要是 Windows 人(所以 MySQL 经验有限),办公室里的所有 Linux 人都不会碰它,因为在 Windows.
我怀疑增加时间的原因是行锁发生了一些奇怪的事情(可能是由于使用 MySQL 实例的应用程序) - 但我不确定。
现在回答我的问题:随着时间的推移,MySQL 转储的时间逐渐增加,有没有人经历过类似的事情? 在 Windows 上有没有办法本地监控 MySQL 转储的性能以找到 bottlenecks/locks 在哪里? 在 Windows 平台上进行常规 MySQL 备份是否有更好的方法? 我应该告诉客户它不受支持并将其迁移到受支持的平台吗? 我应该简单地说一个4个字母的词然后去酒吧消遣一下吗?
最终发现罪魁祸首是底层存储网络。