'Rows per batch' 是 SSIS OLE DB 目标是否有助于减少锁定?

Does 'Rows per batch' is SSIS OLE DB destination help reducing locking?

OLE DB Destination 中有一个名为 'Rows per batch' 的选项,当指定时,将在一个批次中拉取一定数量的行,否则,将在一个批次中拉取源中的所有行。

问题:如果我的源 and/or 目标服务器都是高度 OLTP 数据库,将此参数设置较低的数字(例如,10k 或 50k)有助于减少锁升级机会,以便加载过程可以对任一数据库的影响最小吗?

总的来说答案是:是的。 它还取决于行的处理速度和每批次的开销。 如果您在一个批次中处理所有行的事务需要很长时间,请考虑拆分。但是将它分成太小的批次也会产生性能问题。

最好的方法是测试并找到甜蜜点。

"Rows per batch" 实际上更适合调整数据流。通过计算一行的最大宽度(以字节为单位),然后除以默认缓冲区大小(默认为 10MB),您将获得可以插入的行数 "batch" 而不会将数据溢出到 tempdb或您的缓冲磁盘(取决于您是否为临时缓冲区设置了特定位置)。在将数据流完全保存在内存中而不需要溢出到磁盘的同时,您将尽可能快地进行数据传输。

OLE DB 目标中的 "Table Lock" 选项告诉服务器是否锁定 table。