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

mssql 大数据插入很慢问题

  •  
  •   mingsz · 6 天前 · 1145 次点击

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

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

    mssqlConn.CreateBulk 和 mssql.CopyIn

    印象大概每秒几 W 写入速度
        2
    tomczhen   6 天前 via Android
    都用 MSSQL 了,配套的企业管理器了解一下,查询分析器了解一下,自己看执行计划不就好了。

    再说还有 SQL Profiler,别开源产品用太习惯了,不去用这些配套工具啊。
        3
    mingsz   6 天前
    @tomczhen 第一次用 mssql,谢谢老哥提示,我去查查资料
        4
    mingsz   6 天前
    @gamexg 收到,谢谢老哥,回头去试试
        5
    superrichman   6 天前
    2100 个参数. 我很好奇这是什么表要这么多参数的?
        6
    fox0001   6 天前
    用 insert 语句插入是超级慢的,一般我直接用 excel 或 csv 导入
        7
    mituxiaomanong   6 天前 via Android
    sqlbulk 了解一下? 30 万数据 10 几 20 秒即可
        8
    mituxiaomanong   6 天前 via Android
    批量插入用你那个方法 数据多了,肯定不好
        9
    zjhui   6 天前 via Android
    sqlbulk 适合大批量插入
        10
    reus   6 天前
    直接导入啊
        11
    kiracyan   6 天前
    怎么会有这么多参数.
        12
    kidexp   5 天前
    应该是 mssql 的问题 之前用 python 也遇到相同的情况 mssql 好像有专门的 buck insert 的工具可以试试哪个
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4328 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    ♥ Do have faith in what you're doing.