【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 2018-08-19
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2018-02-07
      相关资源
      最近更新 更多