Interviewfrage für Backend-Entwickler

Eine Query wurde nach einem Release langsam. Zeig mir, wie du den Query-Plan liest und entscheidest, was du änderst.

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Führ explain analyze aus, um den echten Plan mit tatsächlichen Zeilenzahlen und Zeiten zu bekommen, und schau dann auf den Node, der die meiste Zeit frisst, und vergleich geschätzte mit tatsächlichen Zeilen. Eine große Lücke heißt schlechte Statistiken, der Planner hat also den falschen Join oder Scan gewählt. Achte auf Sequential Scans auf großen Tabellen, Nested Loops, die von einer Unterschätzung getrieben sind, und Sorts, die auf Disk auslagern. Fix ist ein Index, aktualisierte Statistiken oder ein umgeschriebenes Prädikat, das der Index nutzen kann.

Warum Interviewer das fragen

Einen Index anlegen kann jeder Backend-Entwickler; der Interviewer prüft, ob du erst diagnostizierst und dann handelst. Tatsächliche gegen geschätzte Zeilen zu lesen, ein nicht sargfähiges Prädikat zu erkennen und zu wissen, dass ein Sequential Scan auf einer kleinen Tabelle völlig in Ordnung ist, sind alles Zeichen echter Datenbankarbeit. Es öffnet außerdem die Frage, ob du die gesamte Workload anschaust, denn eine einzelne Query wird selten von allein langsam.

So baust du deine Antwort auf

  • Hol dir den echten Plan mit explain analyze, nicht nur explain.
  • Find den dominanten Node und vergleich Schätzung mit Realität.
  • Ordne die üblichen Muster ihren Ursachen zu.
  • Prüf den Fix, indem du den Plan erneut misst, nicht aus dem Bauch.

Beispielantwort

Gesprochenes Beispiel, erste Person

Ich starte mit explain analyze und buffers, damit ich echte Zeiten und Zeilenzahlen bekomme, idealerweise gegen produktionsgroße Daten, denn ein Plan auf einem kleinen Datensatz sagt mir nichts. Dann suche ich den Node, der den Großteil der Zeit hält, und prüfe seine Schätzung gegen den tatsächlichen Wert. Wenn er eine Zeile geschätzt und fünfzigtausend bekommen hat, hat der Planner einen Nested Loop gewählt, der jetzt eine Katastrophe ist, und die Ursache sind meistens veraltete Statistiken oder ein korreliertes Prädikat, das der Planner nicht modellieren kann. Danach schaue ich nach den üblichen Verdächtigen: ein Sequential Scan auf einer großen Tabelle, ein Filter, der eine Index Condition sein könnte, ein Sort, der auf Disk auslagert, oder eine Funktion um die Spalte herum, sodass der Index unbrauchbar ist. Genau das war mein letzter Fall, ein lower-Aufruf auf einer E-Mail-Spalte, der den Index ignoriert hat; ein Functional Index auf lower von E-Mail hat das von rund 900 Millisekunden auf zwei gebracht. Danach lasse ich den Plan nochmal laufen, um zu bestätigen, dass sich die Form geändert hat, denn ein schnellerer Lauf auf einem warmen Cache beweist gar nichts.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Was macht ein Prädikat unfähig, einen Index zu nutzen?
  • Wie unterscheidest du ein Statistikproblem von einem fehlenden Index?
  • Wann ist ein Sequential Scan der richtige Plan?

Weitere Fragen für Backend-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen