SQL Server共享锁定选择

时间:2018-11-14 09:47:49

标签: sql-server sql-server-2012 azure-sql-database

我正在查询SQL Server DB中的一个表,该表从其他来源获取连续插入。我的ETL作业中使用了SELECT语句从该表中读取数据,它仅查询表中的选定分区。

SELECT * 
FROM REALTIMESRC 
WHERE PARTITION = '2018-11';

我了解到SELECT语句默认在其选择的行上引入了共享锁。

  1. 当该表从我正在查询的同一分区中的其他源获取插入信息时,数据插入是否会由于我的Select操作而受到影响?
  2. 我假设Select语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:2)

  
    

我了解默认情况下,SELECT语句在其选择的行上引入了共享锁。

  

是的,是的。

  
    

当该表从同一分区中的其他来源获取插入时     我在哪里查询,数据插入会由于我的Select操作而受到影响?

  

否,由于插入内容仅会引入您尚未选择的新行,因此不会有任何问题。

  
    

我假定由Select语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。

  

是的,这是正确的-INSERTSELECT应该可以并行工作。

在某些极端情况下,您可能会遇到麻烦:

  • 如果INSERT语句试图在单个事务中插入5000多个行,SQL Server可能会选择将这5000个单独的锁升级表级 strong>排他锁-在SELECT交易完成之前,将无法再进行INSERT操作