Teil 5: MySQL 4 - Einplanungsmodifikatoren und Locking

SQL-Optimierung: Manuelles Priorisieren und Sperren

Anfragemodifikatoren

In MySQL können Sie die Einplanungsstrategie mithilfe verschiedener Anfragemodifikatoren beeinflussen. Einer dieser Modifikatoren ist das Schlüsselwort LOW_PRIORITY für die Anweisungen DELETE, INSERT, LOAD DATA, REPLACE und UPDATE, ein anderer ist das Schlüsselwort HIGH_PRIORITY für SELECT-Anweisungen. Der dritte Modifikator ist das Schlüsselwort DELAYED für INSERT- und REPLACE-Anweisungen.

Das Schlüsselwort LOW_PRIORITY beeinflusst die Einplanung wie folgt: Wenn eine Schreiboperation für eine Tabelle empfangen wird, während diese gelesen wird, wird der Schreiber normalerweise blockiert, bis der Leser fertig ist, denn die Ausführung einer Anfrage wird nicht unterbrochen. Kommt eine weitere Leseanforderung an, während der Schreiber wartet, wird auch der Leser blockiert, weil nach der Standardstrategie Schreiber eine höhere Priorität als Leser haben. Nachdem der erste Leser fertig ist, wird die Anforderung des Schreibers verarbeitet, und nachdem diese abgearbeitet ist, wird die Anforderung des zweiten Lesers verarbeitet.

Hat die Schreibanforderung das Attribut LOW_PRIORITY, dann hat der Schreiber keine höhere Priorität als die Leser. Trifft in diesem Fall eine zweite Leseanforderung ein, während der Schreiber wartet, kann das zweite Lesen vor dem Schreiben ausgeführt werden. Nur wenn keine weiteren Leser anstehen, darf der Schreiber schreiben. Das bedeutet, dass es theoretisch möglich ist, LOW_PRIORITY-Schreibvorgänge für immer zu blockieren. Solange weitere Leseanforderungen ankommen, während noch Leseoperationen ausgeführt werden, erfolgen die neuen Anforderungen vor der Ausführung des LOW_PRIORITY-Schreibvorgangs.

Das Schlüsselwort HIGH_PRIORITY für SELECT-Anfragen verhält sich ganz ähnlich. Damit darf eine SELECT-Anforderung vor einer wartenden Schreiboperation ausgeführt werden, selbst wenn das Schreiben eine normale Priorität besitzt.