合并到基于分区列的分区表时,MERGE INTO语句是否会锁定整个表?

Jar*_*red 5 sql oracle11g

在我们的生产环境中出现一些性能问题后,我向数据库管理员寻求帮助.在帮助时,他们告诉我合并锁定表并建议我使用UPDATE语句.

从我读过的所有内容来看,我认为MERGE INTO和UPDATE具有类似的增量锁定模式.下面是我们的应用程序正在使用的MERGE INTO语句的示例.

MERGE INTO sample_merge_table smt
USING (
    SELECT smt.*, sjt.* 
    FROM sample_merge_table smt 
    JOIN some_join_table sjt 
        ON smt.index_value = sjt.secondary_index_value 
    WHERE smt.partition_index = partitionIndex
) umt ON (smt.partition_index = partitionIndex AND smt.index_value = umt.index_value)
WHEN MATCHED THEN
    UPDATE SET...
WHEN NOT MATCHED THEN
    INSERT VALUES...
Run Code Online (Sandbox Code Playgroud)

在运行此语句时,锁定过程实际上是什么?是否会锁定USING select中涉及的每个表?sample_merge_table会被完全锁定,还是只被访问的分区?UPDATE语句是否会以递增方式锁定,或者MERGE INTO本身是否已拥有所需的锁定?

Seb*_*bas 1

合并语句以行为基础工作,但会预先锁定所有内容,即当语句执行完成规划并确定受影响的行时。

读物:

论坛文章已删除