4
在我們的生產環境中發生了一些性能問題後,我向我們的數據庫管理員尋求幫助。在幫助時,他們告訴我,合併鎖定表,並建議我改用UPDATE語句。合併到基於分區列的分區表時,MERGE INTO語句是否鎖定整個表?
從我讀過的所有內容來看,我的印象是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 select的每個表是否會被鎖定? sample_merge_table將被完全鎖定,還是隻有正在訪問的分區? UPDATE語句會增量鎖定,還是MERGE INTO本身已經擁有所需的鎖?