Macht ein MERGE-INTO-Anweisung die gesamte Tabelle sperren, wenn die Verschmelzung in eine partitionierte Tabelle, basierend auf den partitionierten Spalten?

Nachdem einige performance-Probleme aufgetreten, die in unserer Produktionsumgebung, ich bat um Hilfe aus unserer Datenbank Administratoren. Beim helfen, Sie teilte mir mit, dass die Zusammenlegung sperren den Tisch und schlug ich eine UPDATE-Anweisung, statt.

Von allem, was ich gelesen habe, war ich unter dem Eindruck, dass die MERGE-INTO und UPDATE haben ähnliche inkremental-locking-Muster. Unten ist ein Beispiel der Art von MERGE-INTO-Anweisung, die unsere Anwendung nutzt.

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...

Nach ausführen dieser Anweisung, was würde das locking-Verfahren eigentlich? Würde jeder der beteiligten Tabellen in der USING-wählen Sie gesperrt werden? Würde die sample_merge_table komplett gesperrt werden, oder nur die partition, auf die zugegriffen wird? Würde die UPDATE-Anweisung lock inkrementell, oder funktioniert der SERIENDRUCK IN sich selbst bereits die erforderlichen sperren?

InformationsquelleAutor Jared | 2013-04-10
Schreibe einen Kommentar