我正在查询SQL Server DB中的一个表,该表从其他来源获取连续插入。我的ETL作业中使用了SELECT
语句从该表中读取数据,它仅查询表中的选定分区。
SELECT *
FROM REALTIMESRC
WHERE PARTITION = '2018-11';
我了解到SELECT
语句默认在其选择的行上引入了共享锁。
Select
语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。有人可以澄清一下吗?答案 0 :(得分:2)
我了解默认情况下,SELECT语句在其选择的行上引入了共享锁。
是的,是的。
当该表从同一分区中的其他来源获取插入时 我在哪里查询,数据插入会由于我的
Select
操作而受到影响?
否,由于插入内容仅会引入您尚未选择的新行,因此不会有任何问题。
我假定由Select语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。
是的,这是正确的-INSERT
和SELECT
应该可以并行工作。
在某些极端情况下,您可能会遇到麻烦:
INSERT
语句试图在单个事务中插入5000多个行,SQL Server可能会选择将这5000个单独的锁升级到表级 strong>排他锁-在SELECT
交易完成之前,将无法再进行INSERT
操作