如何增加 bcp 批处理负载?

问题描述

有没有办法增加发送到 sql server/sec 的行数?

我有超过 700 万条记录(1.5 GB 文件),将所有记录从 bcp 文件导入到 sql server 表需要大约 30 分钟。

bcp load

有没有办法将其增加到每次发送 10k 甚至 100000 行? 我遇到了 bcp 的一些问题,直到我最终解决了它们,但是每次我不得不调试这些问题时,我都不得不等待半个小时,这令人沮丧。此外,我们可能需要一遍又一遍地加载,因此了解未来 bcp 加载的更快方法会很有帮助。

这里有一些统计数据:

7217765 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1765235 Average : (4088.84 rows per sec.)

bcp文件在网盘上,表DDL如下:

CREATE TABLE [dbo].[Historical_Fact](
    [Style Code] [varchar](100) NULL,[Trim Code] [varchar](100) NULL,[Country] [varchar](100) NULL,[Org] [varchar](100) NULL,[Prod Code] [varchar](100) NULL,[Report Year] [varchar](100) NULL,[Scen] [varchar](100) NULL,[Volume] [decimal](25,10) NULL,[EBIT] [decimal](25,[NSR] [decimal](25,[Measures] [varchar](100) NULL,[Values] [decimal](25,10) NULL
) ON [PRIMARY]

解决方法

来自docs

-b batch_size

指定每批导入数据的行数。每个批次都作为单独的事务导入并记录,该事务在提交之前导入整个批次。默认情况下,数据文件中的所有行都作为一批导入。要将行分布在多个批次中,请指定一个小于数据文件中行数的 batch_size。如果任何批次的事务失败,则仅回滚当前批次的插入。已由已提交事务导入的批次不受后续失败的影响。