Parsen - Query Planning - Compiling


Die Begriffe Parsen (Oracle), Query Planning (PostgreSQL) und Compiling (SQL Server) beschreiben das überführen einer SQL-Anweisung in einen Ausführungsplan.

Datenbanken mit zentralem Ausfürhungsplan-Cache haben zwei Parse-Phasen:

Hard Parsing

Hard Parsing bedeutet, dass der Optimizer einen neuen Ausführungsplan aus einem SQL-String erstellt. Dazu müssen alle möglichen Join-Reihenfolgen und Indizes berücksichtigt werden. Hard Parsing ist sehr aufwendig.

Soft Parsing

Soft Parsing bedeutet, dass ein passender Ausführungsplan im Cache gefunden wird. Danach müssen eventuell noch Zugriffsberechtigungen geprüft werden, der Ausführungsplan selbst kann aber wiederverwendet werden. Das ist eine verhältnismäßig einfache Operation.

Um einen passenden Ausführungsplan im Cache zu finden, wird meist ein Hash-Code des SQL-Strings als Schlüssel verwendet. Ein Ausführungsplan kann also nur dann gefunden werden, wenn die exakt gleiche SQL-Anweisung zuvor ausgeführt wurde. Andernfalls findet ein Hard-Parse statt. Durch das Einbetten von Werten in die SQL-Anweisung, wenn also keine Bind-Parameter verwendet werden, sieht jede SQL-Abfrage anders aus, sodass bei neuen Werten wieder ein Hard-Parse angestoßen wird.

Selbst in dem Fall, dass die exakt gleiche Anweisung, mit denselben Werten, nochmal ausgeführt wird, besteht das Risiko, dass der Ausführungsplan bereits aus dem Cache entfernt wurde. Ohne Verwendung von Bind-Parametern sieht jede SQL-Anweisung anders aus, und die Ausführungspläne werden nicht nur mehrfach erzeugt, sondern auch mehrfach im Cache abgespeichert. Dadurch fallen ältere Abfragen schneller aus dem Cache.

Über den Autor

Photo of Markus Winand
Markus Winand stimmt Entwickler auf SQL-Performance ein. Er hat das Buch SQL Performance Explained veröffentlicht und bietet inhouse Schulungen sowie Tuning-Leistungen auf http://winand.at/ an.

?Recent questions at
Ask.Use-The-Index-Luke.com

0
votes
1
answer
73
views

PostgreSQL Bitmap Heap Scan on index is very slow but Index Only Scan is fast

2 hours ago Markus Winand ♦♦ 881
index postgresql postgres sql
3
votes
2
answers
356
views

pagination with nulls

yesterday Rocky 46
pagination
0
votes
2
answers
66
views