【问题标题】:mysqldump big MyISAM table starts fast and suddenly slows downmysqldump 大 MyISAM 表启动很快突然变慢
【发布时间】:2015-01-22 22:28:48
【问题描述】:
为包含 innodb 和 myisam 表的数据库调用 mysqldump。
当涉及到 11GB 大小的胖 MyISAM 表时,Dump 仍然运行得非常快。
快速意味着 iotop 向我展示了超过 70MB/s 的写入性能。
我在 mytop 中查看该过程,所以我知道它发生在一张大桌子上。
转储文件增长到 8GB,然后 I/O 突然只有大约 1 MB/s。
服务器负载正常,没有其他进程在运行。
尝试更改 my.cnf 设置,但没有任何效果。
【问题讨论】:
标签:
performance
io
mysqldump
【解决方案1】:
性能取决于几个因素。
我必须为客户端创建 an alternative solution to Mysqldump 以使他们加载 42GB 转储文件(超过 10 亿行)
供参考:最初,MySQLDump 在 64Gb 内存和 10 磁盘 SSD 阵列的 16 核服务器上耗时 3.9 天。
使用 uniVocity 我们在 90 分钟内加载了相同的数据,使用的是 3 年的笔记本电脑。您可以使用 30 天评估许可证来加载它。
除此之外,还有一些可能会影响性能的因素:
检查您的转储文件中是否有此内容以禁用约束:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'
如果它没有添加它们或更改创建表脚本以删除所有约束。如果您在运行转储加载时启用了约束(主键、外键等),则该过程随着时间的推移,数据库将针对越来越多的可能性(更多的 PK 和 FK)验证每次插入时的这些约束。
如果您使用的是 InnoDB(不完全是您的情况,但它可能对其他人有所帮助),请将其添加到您的 my.cfg 文件中:
innodb_doublewrite = 0
innodb_buffer_pool_size = 8000M
# innodb_log_file_size = 512M - If I enable this one the server won't start. Couldn't identify why.
log-bin = 0
innodb_support_xa = 0
innodb_flush_log_at_trx_commit = 0