用户抱怨在进行 mysqldump 时系统运行缓慢

dba*_*cha 9 mysql mysql-5 mysqldump backup

MYSQL 数据库 (ibdata1) 的大小为 73 GB,配置为在 Windows 2008 O/S 上作为 INNODB 表的专用数据库服务器运行。我们正在使用 mysqldump mysqldump --skip-opt --quick --single-transaction --create-options --extended-insert --disable-keys --add-drop-table --complete-insert -- 运行备份set-charset -- 压缩 --log-error=Proddb0635.err -u root -pjohndoe Proddb> \devNas\devNas\sqlbackup\LIVE\db\Proddb0635.sql

备份文件 Proddb0635.sql 存储在与数据库服务器不同的服务器上。内存为 12 GB。INNODB 缓冲池大小为 6 GB。额外的 mem.pool 是 32 MB。查询缓存大小为 2 GB 网络缓冲区长度为 16 M 最大。数据包大小 1 GB。

mysql 版本是 5.0.67。

当备份未运行时,用户对性能感到满意。

当备份运行时,INNODB 缓冲池命中率很高,接近 100%。没有挂起的读取或挂起的写入。innodb 等待空闲时间为 0。CPU 使用率不高,最低 9% 到最高 15% 查询缓存命中率低约 40%,无论是否运行 mysqlbackup。当前 Windows 任务管理器显示正在使用 10GB 的 RAM。我应该在只有 2GB 可用 RAM 的情况下增加查询缓存吗?mysqlld-nt 占用 9.2 GB RAM,mysqldump 占用 5 MB RAM。Alos,注意到转储文件的大小在是否存在 --compress 选项的情况下是相同的。

我应该减少 iNNODB 缓冲池的大小吗?

谢谢

mrd*_*nny 8

Windows 中存在一个已知问题,即当您将大文件推送到另一台服务器时,所有内存最终都会分配给系统缓存而不是用户进程。您可以查看任务管理器的物理内存 (MB) 部分,了解分配给系统缓存的内存量。

这可以通过备份到本地磁盘,然后让远程机器提取该文件来解决。


ran*_*omx 7

鉴于您的情况,以下是我对提高 mysqldump 性能的一些想法。这是你的命令:

mysqldump --skip-opt --quick --single-transaction --create-options --extended-insert --disable-keys --add-drop-table --complete-insert --set-charset --compress - -log-error=Proddb0635.err -u root -pjohndoe Proddb> \devNas\devNas\sqlbackup\LIVE\db\Proddb0635.sql

我注意到的第一件事是您将输出重定向到文件系统。它说 'devNas' 所以我假设这是Network Attached Storage。我是 NAS 备份的粉丝,但它必须连接到与生产流量不同的物理 NIC 上。您可能不会使带宽饱和,但它们仍在竞争。由于 --quick 标志,这将是一个更大的问题,因为它刷新每一行而不是将其保存在内存中。

我看到的下一件事是您调用了--compress。看起来您是在本地运行 mysql,因为您没有使用 -h 开关。这可能会使用在此上下文中不必要的本地 CPU。是否需要 --compress ?它只压缩 mysqldump 客户端和 mysql 服务器之间的数据,而不是文件内容。

接下来我看到您正在使用 --single-transaction 标志。这将导致额外的 CPU,因为它作为 mysqldump 的一部分在每个选择上进行测试。

这与性能无关,但您使用的 --disable-keys 仅适用于 MyISAM(手册)。

您可能想要尝试从离线主机远程运行 mysqldump 并在完成后将转储文件移动到 NAS以尽可能多地进行带外操作。