Gibt es eine gute Faustregel für die Übersetzung der EXPLAIN-Kosten in die Laufzeit (Wanduhr)?


7

Von Zeit zu Zeit werden Verbraucher meiner Datenbankprozesse nach einer Schätzung fragen, wann eine bestimmte Aufgabe erledigt wird. Obwohl ich das Gefühl habe, in den meisten Datenbankmodulen EXPLAIN lesen zu können, habe ich Probleme, dies so zu übersetzen, dass ich in 15 Minuten erneut gefragt werde. Kennt jemand eine gute "Faustregel" für eine bestimmte Datenbank?

Mir ist klar, dass dies keine feste Regel sein wird, aber in einigen Fällen kann es sogar nützlich sein, eine Baseball-Figur anzugeben.

Antworten:


6

Kostenbasierte Optimierer arbeiten alle über eine Vielzahl von proprietären Algorithmen (oder Sie können sie für Open Source-Datenbanken lesen). Sie weisen jedoch normalerweise einer Referenzoperation den Wert 1 zu. In SQL Server beispielsweise eine Operation mit einer Kostenschätzung von 1 benötigt eine 1 / 320stel Sekunde auf einem Referenzcomputer unter einem Entwicklertisch in Redmond. Die Kostenberechnung ist nur eine relative Schätzung, wie teuer eine Abfrage sein wird. Viele RDBMS verwenden diese Kosten, um Prioritäten festzulegen oder im Fall von Deadlocks billigere Abfragen zu beenden (die erneute Ausführung dauert weniger lange). Es ist jedoch alles nur eine Vermutung, die auf den Informationen basiert, die dem Abfrageoptimierer zum Zeitpunkt der Ausführung der Abfrage zur Verfügung stehen.

Peter hat Recht. Das Beste, auf das Sie hoffen können, ist, einige Benchmark-Abfragen in idealen Szenarien durchzuführen und diese als Grundlage für die besten Vermutungen zu verwenden. Sie müssen sich mit vielen verschiedenen Streitpunkten in einem RDBMS befassen, daher ist es schwierig, genau zu bestimmen, wie eine bestimmte Abfrage in der realen Welt funktioniert.


Vergessen Sie nicht, der Computer wurde verwendet, um die Kosten in Redmond zu ermitteln, die wahrscheinlich vor 10-15 Jahren gestorben sind.
Mrdenny

Gute Erklärung, wie CBO-Zahlen basieren. Vielen Dank!
TML

@mrdenny - Nein, sie halten diesen Strom, sie passen einfach an, was ein Wert von 1 für jede Veröffentlichung ist. Angeblich. Aber da der Abfrageplaner die supergeheime Sauce hinter SQL Server ist, werden wir es nie wirklich wissen.
Jeremiah Peschka

1
Als ich das letzte Mal gefragt habe, wurde mir gesagt, dass die Werte nichts mehr bedeuten, da sie in mehreren Releases nicht geändert wurden. Sie sagten mir, ich solle nur eine möglichst niedrige Zahl wählen.
Mrdenny

6

Ich vermute, dass dies nicht so möglich ist, wie Sie es sich vorstellen. Ein wichtiger Grund ist, dass die tatsächliche Laufzeit sehr hardwareabhängig ist und viele der Optimierungsentscheidungen, die das Datenbankmodul trifft, effektiv darauf abzielen, die Verwendung der verschiedenen Hardwarekomponenten (z. B. Festplatte, Speicher, CPU) auszugleichen.

Ich schlage vor, dass Sie eine Reihe von Abfragen ausführen, die für Ihre Anwendung relevant sind, die Kostenschätzungen und die Laufzeiten aufzeichnen und versuchen, diese Daten zu verstehen. Möglicherweise erhalten Sie eine schöne lineare Beziehung, oder Sie erfahren, dass die Kostennummern für diesen Zweck wertlos sind.


Ja, ich dachte, das wäre die Antwort. Ich dachte nur, es könnte eine wirklich weiche Regel geben, die verwendet werden könnte ... aber danke für die Bestätigung. :)
TML
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.