首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Coding
V2EX  ›  MySQL

mysql load data 大数据文件,太慢了

  •  
  •   lewin5 · 100 天前 · 2404 次点击
    这是一个创建于 100 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前有用过 load data 100G 的 CSV 文件导入单表,没有约束和索引,一次性导入差不多用了三个小时,速度差不多是 11MB/s ; 现在用 load data 导入 10g 的 dat 文件(想使用 tpcds 生成的数据文件)到单表,也没有使用约束和索引,发现出奇的慢,已经三天了,现在速度 1 个小时才 100MB。 考虑到是单表,事务我就一次 load data 一次 commit,也没有拆分文件; 两次情况差不多,没有特别改 my.cnf 配置文件,甚至 100g 的文件里有 100 个字段,而 10g 的才 18 个字段,导入文件内容的格式和分隔符也都一样,不知道这么慢的原因是什么,为什么小一点的还慢,慢的离谱有点。 ps:导 10g 的时候我稍微调大了一个参数 max_allowed_packet = 128M,其他没动过。

    有对 mysql 了解的大大提供点建议 help 一下咩,谢谢了。

    4 回复  |  直到 2019-09-18 09:47:35 +08:00
        1
    neocanable   100 天前
    我觉得还是贴一下你的 my.cnf 吧,表的引擎是啥,innodb ?
    log buffer
    io threads
    buffer pool size 这些参数。
    dat 的分割是什么,我觉得这些都有得考虑。
        2
    fuyufjh   100 天前
    数据文件 split 成 10 份,然后开 10 个进程
        3
    lewin5   85 天前
    @neocanable
    my.cnf:
    skip-log-bin
    innodb_doublewrite = 0
    innodb_log_file_size = 2048M
    innodb_log_buffer_size=2048M
    innodb_flush_log_at_trx_commit = 0
    innodb_buffer_pool_size = 10240M #大概内存的 70%

    set_sql_log_bin=0
    像上改了之后,这样就快很多了,有可能之前是写日志,内存分配太小,有的表一次性导入事务太大,写到磁盘了。然后 20g 大概用了 40 分钟;后面有张表 30 多 g,可能事务太大,undo(10g)写不下又变慢了,mysql 有什么自动 commit 的办法吗,load data 的时候。
        4
    lewin5   85 天前
    @fuyufjh
    主要表有点多,这样弄的挺麻烦的,有没有什么办法在 load data 的时候设置 commit(),拆分一下。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3480 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 05:30 · PVG 13:30 · LAX 21:30 · JFK 00:30
    ♥ Do have faith in what you're doing.