SQL Server批量插入性能

use*_*907 5 performance sql-server-2012

I\xe2\x80\x99m 运行 sql server 2012,该计算机上安装的 RAM 为 128 GB。批量插入的性能非常低。批量插入1000万条记录大约需要2小时。我们检查了CPU、磁盘IO、内存,一切似乎都正常。我\xe2\x80\x99ve刚刚检查了wait_type,发现CXPACKET wait_time_ms是79346890761,max_wait_time_ms是2164694,signl_wait_time_ms是2849080871。这些数字是否太高,是否是性能缓慢的原因?并行度设置为0。

\n

Kin*_*hah 6

以下是改进 BULK INSERT 操作的一些好方法:

  1. 使用 TABLOCK 作为查询提示。
  2. 在批量加载操作期间删除索引,然后在完成后重新创建它们。
  3. 在加载操作期间将数据库的恢复模式更改为 BULK_LOGGED。
  4. 如果目标有聚集索引,那么在批量插入操作中指定 ORDER BY 子句将提高批量加载的速度。
  5. 在 BULK INSERT 操作开始时使用跟踪标志 610。

最大并行度应在服务器上配置,而不是默认值。具体配置方法可以参考我的回答。

此处的数据加载性能指南 中提供了一些带有有趣统计数据的很好的参考 。请查看指南中的 BATCHSIZE 和 ROWS_PER_BATCH。