V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
mingsz
V2EX  ›  Go 编程语言

mssql 大数据插入很慢问题

  •  
  •   mingsz · 2019-12-03 19:32:29 +08:00 · 5149 次点击
    这是一个创建于 1848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    go 语言,用的 gorm 表格内没有建立任何索引,共计 55 个字段。
    插入之前把多条数据组成一条插入语句insert into values(),最多 2100 个参数。
    用事务和批量插入插入数据,每个事务插入 1w 条数据提交一次。
    我们通常一批数据 30w,下来要 30 分钟,感觉很慢,且插入期间该表格无法进行其他操作。
    想问问各位,这是 sqlserver 的性能问题,还是我操作问题,是否有更优的办法?

    第 1 条附言  ·  2019-12-04 10:44:16 +08:00
    2100 是 sqlserver 对语句参数个数的限制,试过减少插入参数的数量,但速度没提升
    表格是一份流向数据,能独立出来的都已经独立出来了
    总结一下解决办法:
    1.监控和分析现有插入方法,看能否优化
    2.换库尝试(已试过 xorm,性能差不多)
    3.导入文件,批量插入
    在此谢过各位 v 友了
    第 2 条附言  ·  2019-12-05 14:27:13 +08:00
    已解决,用了 go-mssqldb 库的 bulkCopy
    35w 条数据用时 20 秒
    12 条回复    2019-12-05 06:00:34 +08:00
    gamexg
        1
    gamexg  
       2019-12-03 19:35:24 +08:00   ❤️ 1
    github.com/denisenkom/go-mssqldb 库?

    mssqlConn.CreateBulk 和 mssql.CopyIn

    印象大概每秒几 W 写入速度
    tomczhen
        2
    tomczhen  
       2019-12-03 19:43:28 +08:00 via Android
    都用 MSSQL 了,配套的企业管理器了解一下,查询分析器了解一下,自己看执行计划不就好了。

    再说还有 SQL Profiler,别开源产品用太习惯了,不去用这些配套工具啊。
    mingsz
        3
    mingsz  
    OP
       2019-12-03 19:50:11 +08:00
    @tomczhen 第一次用 mssql,谢谢老哥提示,我去查查资料
    mingsz
        4
    mingsz  
    OP
       2019-12-03 19:52:20 +08:00
    @gamexg 收到,谢谢老哥,回头去试试
    superrichman
        5
    superrichman  
       2019-12-03 20:18:56 +08:00
    2100 个参数. 我很好奇这是什么表要这么多参数的?
    fox0001
        6
    fox0001  
       2019-12-03 22:21:57 +08:00
    用 insert 语句插入是超级慢的,一般我直接用 excel 或 csv 导入
    mituxiaomanong
        7
    mituxiaomanong  
       2019-12-03 22:43:19 +08:00 via Android
    sqlbulk 了解一下? 30 万数据 10 几 20 秒即可
    mituxiaomanong
        8
    mituxiaomanong  
       2019-12-03 22:44:14 +08:00 via Android
    批量插入用你那个方法 数据多了,肯定不好
    zjhui
        9
    zjhui  
       2019-12-03 23:29:47 +08:00 via Android
    sqlbulk 适合大批量插入
    reus
        10
    reus  
       2019-12-04 00:10:37 +08:00
    直接导入啊
    kiracyan
        11
    kiracyan  
       2019-12-04 09:55:43 +08:00
    怎么会有这么多参数.
    kidexp
        12
    kidexp  
       2019-12-05 06:00:34 +08:00
    应该是 mssql 的问题 之前用 python 也遇到相同的情况 mssql 好像有专门的 buck insert 的工具可以试试哪个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1235 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:04 · PVG 02:04 · LAX 10:04 · JFK 13:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.