MERGE INTO语句在基于分区列合并为分区表时锁定整个表



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

合并语句以行为基础工作,但在hand之前锁定所有,即当语句执行完成规划并确定受影响的行时。

阅读

:

已删除论坛文章

最新更新