Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_rac_index_contention

Contention im RAC Cluster mit intelligenten Schlüsseln bekämpfen

Problem:

Werden in einem RAC Verbund auf allen Knoten massiv Daten in die gleiche Tabelle eingefügt, führt dies oft zu hohen Waits (GC Contention, Index Contention}

Ursache:

Wird eine normale fortlaufende Sequenz verwendet und auf beiden Knoten gleichzeitig eingefügt, muss der Index Block andauernd zwischen den beiden Knoten hin- und her versandt werden. Dies kann zu erheblichen Contention führen.

Lösungsansatz 1:

Hohe Cache Wert für die Sequenz auf jeden Knoten (» 10.000) um zu erreichen, das die Schlüssel möglichst in großen Bereichen auf dem gleiche Cluster Knoten vergeben werden.

ALTER SEQUENCE my_seq cache 20000;

Lösungsansatz 2:

ID und Sessionid in den künstlichen Schlüssel mit einbeziehen.

Dies ist dann immer gut einsetzbar wenn nicht aus dem Schlüssel der Tabelle eine echte Business Funktion abgleitet wird!

Beispiel:

-- Instance ID
sys_context('USERENV', 'INSTANCE');
 
-- Key out of Session, to prevent Session Contention
MOD(userenv('SESSIONID'),100)
 
-- Sequence abfragen
my_seq.nextval
 
-- Beispiel:
SELECT (sys_context('USERENV', 'INSTANCE') * 1E06 * MOD(userenv('SESSIONID'),100))+my_seq.nextval FROM dual;

Die Daten sollten sich aber nicht zu weit von einander entfernen, damit ein Index Range Scan nicht später wiederum durch zu viel IO die Leistung verschlechtert.

Daher ist auch oft der Einsatz von einem Reverse Key Index nicht immer eine gute Lösung!

Quelle

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
prog/oracle_rac_index_contention.txt · Zuletzt geändert: 2014/02/19 21:53 von Gunther Pippèrr