SNEK5: Warteschlange (Uwe Ricken)

Was ist eine Warteschlange? Wann muss der SQL-Server warten? Interessante Fragen, und jeder von uns weiß wohl, dass das gelegentlich vorkommt. Gewartet werden muss immer mal, wenn irgendeine Ressource nicht verfügbar ist. Das wiederum kann verschiedene Ursachen haben, von einem simplen (und oft nur kurzzeitigem) parallelen Zugriff bis hin zu einer begonnenen, aber leider nicht beendeten Transaktion eines anderen Users.

Eigentlich ist es ganz einfach. Eine SELECT-Abfrage wird, vom User kommend, in eine Warteschlange gestellt, die nach dem Muster First-In-First-Out abgearbeitet wird. Ist die Abfrage an der Reihe, wird sie an den Parser weitergegeben, es wird ein Plan für die Ausführung erstellt (zur Ermittlung des effizientesten Weges, die Daten zu beschaffen) und dann wird sie zur Ausführung vorgemerkt. Jetzt ist also bekannt, wie es gemacht werden soll.

Nun geht es darum, auf die Daten zuzugreifen. Dabei kann es wiederum zu Wartezeiten kommen, z.B. für den Fall, dass die Daten erst von der Festplatte in den Puffer geladen werden müssen (das Lesen aus dem Puffer ist bis zu 1000x schneller als von der Platte). Auch könnte eine existierende Sperre wegen eines Schreibvorganges abgewartet werden müssen. Das Problem dabei: Sobald ein Prozess warten muss, geht er zurück in den Modus „suspended“, er  muss sich gewissermaßen hinten wieder anstellen. Auch wenn es vielleicht nur um eine Millisekunde gegangen wäre, kann die zusätzliche Wartezeit je nach Anzahl der weiteren Prozesse ein Vielfaches von dieser Millisekunde betragen.

Warten ist schwer

Ich muss das an dieser Stelle mal einschieben. Wenn Uwe einen Vortrag hält, dann ist das auch bei dem trockensten Thema ein großer Spaß. Nein, es ist eine Performance. Anekdote reiht sich an Anekdote, und keine davon scheint mit dem Thema auch nur entfernt zu tun zu haben. Doch er kriegt jedes mal die Kurve und kommt wieder zurück auf die SQL-Server-Wartezyklen. Wenn also die Männer bei Ikea im Bälleparadies abgegeben werden, während die Frauen die Möbel aussuchen, die die Männer dann später aufbauen müssen, dann … sorry, jetzt hab ich den Faden verloren. So schnell, wie der redet, kann ich nicht schreiben! Aber er kann auch langsamer. Wenn er mal auf eine Demoabfrage warten muss, tanzt er seinen Namen (so lang ist der ja nicht, gottseidank), seine ganz persönliche Idle Task. Ob das nun so viel besser ist?

Es ist auf jeden Fall faszinierend, wie man den SQL-Server tunen kann, indem man beispielsweise geschickt Indices setzt (oder auch weglässt), oder regelmäßig die Statistiken aktualisiert. Gerade letzteres nimmt der Server zwar auch selbst vor, aber erst nachdem 20 % seines Datenbestandes verändert (also gelöscht oder hinzugefügt) worden sind. Dies kann gerade bei Datenbanken mit sehr vielen Datensätzen ungewöhnlich lange dauern. Wenn allerdings zu lange mit veralteten Statistiken gearbeitet wird, dann werden die darauf basierenden Ausführungspläne mit hoher Wahrscheinlichkeit völlig daneben liegen und vielleicht Strategien vorschlagen, die kontraproduktiv sind.

„Gewusst wie“ heißt die Devise, wie im richtigen Leben. Manchmal ist es so einfach, das richtige zu tun.


SmallInvoice Logo

Ähnliche Artikel:

AuthorChristoph Jüngling

Selbständiger Softwareentwickler und Seminarleiter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

zehn + 16 =