6

在我们的生产环境中出现一些性能问题后,我向我们的数据库管理员寻求帮助。在提供帮助的同时,他们告诉我合并会锁定表,并建议我改用 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...

运行此语句后,锁定过程实际上是什么?USING 选择中涉及的每个表都会被锁定吗?sample_merge_table 会被完全锁定,还是仅被访问的分区?UPDATE 语句会以增量方式锁定,还是 MERGE INTO 本身已经拥有所需的锁定?

4

1 回答 1

2

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

读数:

https://forums.oracle.com/message/4372012

于 2013-11-05T02:49:00.420 回答