我正在查询Server中的一个表,该表从其他来源获得连续插入。用于从该表读取数据的SELECT语句在我的ETL作业中使用,它只查询表中选定的分区。
SELECT *
FROM REALTIMESRC
WHERE PARTITION = '2018-11';我了解到,默认情况下,SELECT语句在它选择的行上引入了一个共享锁。
Select语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。谁能澄清一下吗?发布于 2018-11-14 09:58:35
我理解SELECT语句在默认情况下会在它选择的行上引入一个共享锁。
没错,是的。
当此表从我正在查询的同一分区中的其他来源获得插入时,数据插入是否由于我的
Select操作而受到影响?
不,因为insert只引入了您尚未选择的新行,因此不会出现任何问题。
我假定Select语句引入的共享锁将适用于行表,而不适用于并行发生的新插入。
是的,这是正确的-- INSERT和SELECT应该可以并行工作。
可能会有一些可能会遇到麻烦的边缘情况:
INSERT语句试图在单个事务中插入超过5000行,Server可能会选择将这5000个单独的锁升级到表级别的独占锁,此时在INSERT事务完成之前不可能进行更多的SELECT操作。https://stackoverflow.com/questions/53297202
复制相似问题