首页 > 解决方案 > 如何防止 SQL Server 在并行插入时锁定表?

问题描述

SQL Server 在插入时锁定表,防止多个并行插入

我正在尝试从多个源表并行插入目标表以加快进程。源表有 500 万多条记录。

我没有索引、id 列或表上定义的任何内容。

create table target(col1 varchar(255), col2 varchar(255),col3 varchar(255))

过程1:

insert into target (col1, col2, col3) as select t1_1, t1_2, current_timestamp from table1;

过程2:

insert into target (col1, col2, col3) as select t2_1, t2_2, current_timestamp from table2;

过程3:

insert into target (col1, col2, col3) as select t3_1, t3_2, current_timestamp from table3;

我希望插入可以并行工作。

第一个过程有效,但其他过程失败。但我不断收到以下错误:

1204, b'SQL Server数据库引擎的实例此时无法获取LOCK资源。当活动用户较少时重新运行您的语句。要求数据库管理员检查此实例的锁和内存配置,或检查长时间运行的事务。DB-Lib 错误消息 20018,严重性 19:\n一般 SQL Server 错误:检查来自 SQL Server 的消息\n'

SQL Server 是否允许多个并发进程并行插入大量数据?如果是这样,我该如何防止这些锁?

标签: sql-serverlocking

解决方案


推荐阅读