Frage

Beim Versuch, zu verstehen, wie eine SQL-Anweisung ausgeführt wird, wird es manchmal im erklären Plan aussehen empfohlen. Was ist der Prozess, sollte man bei der Interpretation (mache Sinn) durch einen Plan erklären? Was soll stehen als: „Oh, das vortrefflich funktioniert?“ versus "Oh nein, das ist nicht richtig."

War es hilfreich?

Lösung

Ich schaudere, wenn ich Kommentare sehen, dass die vollständige tablescans ist schlecht und Indexzugriff ist gut. Vollständige Tabellen-Scans, Indexbereich Scans, schnell kompletter Index-Scans, verschachtelte Schleifen, fusionieren verbinden, Hashverknüpfungen usw. sind einfach Zugriffsmechanismen, die vom Analytiker und in Kombination mit der Kenntnis der Datenbankstruktur und dem Zweck einer Abfrage verstanden werden müssen, in um eine sinnvolle Schlussfolgerung zu gelangen.

Ein vollständiger Scan ist einfach der effizienteste Weg, einen großen Teil der Blöcke eines Datensegmentes (eine Tabelle oder eine Tabelle (Unter-) Partition) zu lesen, und, während es kann oft ein Leistungsproblem hinweisen, dass nur im Rahmen dessen, ob es ein effizienter Mechanismus für die Erreichung der Ziele der Abfrage ist. Das sage ich als ein Data Warehouse und BI Typ, für die Leistung meiner Nummer eins Warnflag ist ein Index basierte Zugriffsverfahren und eine verschachtelte Schleife.

Also, für den Mechanismus, wie ein lesen Plan erklären die Oracle-Dokumentation ist eine gute Anleitung: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/ex_plan.htm#PFGRF009

Haben Sie eine gute Lese durch die Performance-Tuning Guide auch.

Haben Sie auch eine Google für „Kardinalität Feedback“, eine Technik, bei der ein erklären Plan verwendet werden kann, um die Schätzungen der Mächtigkeit in verschiedenen Phasen in einer Abfrage mit den tatsächlichen Mächtigkeiten während der Ausführung erfahren zu vergleichen. Wolfgang Breitling ist der Autor des Verfahrens, glaube ich.

Also, Fazit: die Zugriffsmechanismen verstehen. Verstehen Sie die Datenbank. Verstehen Sie die Absicht der Abfrage. Vermeiden Sie Faustregeln.

Andere Tipps

Dieses Thema ist zu groß, in einer Frage wie diese zu beantworten. Sie sollten einige Zeit in Anspruch nehmen Oracle Performance Tuning Guide lesen

Die beiden folgenden Beispiele zeigen einen Scan und einen schnellen Scan mit einem INDEX.

Es ist am besten auf Ihre Kosten und Cardinality zu konzentrieren. Mit Blick auf die Beispiele, die die Verwendung des Index reduziert die Kosten für die Abfrage von ausgeführt wird.

Es ist ein bisschen komplizierter (und ich habe nicht 100% Griff auf mich), aber im Grunde die Kosten ist eine Funktion der CPU und IO Kosten und die Kardinalität ist die Anzahl der Zeilen Oracle zu analysieren erwartet. beides zu reduzieren, ist eine gute Sache.

Vergessen Sie nicht, dass die Kosten für eine Abfrage kann durch Ihre Frage und die Oracle-Optimierers Modell beeinflusst werden. (ZB: COST, WÄHLEN SIE etc.) und wie oft Sie führen Sie Ihre Statistiken

Beispiel 1:

SCAN http://docs.google.com/a/shanghainetwork.org/File? id = dd8xj6nh_7fj3cr8dx_b

Beispiel 2 unter Verwendung von Indizes:

INDEX http://docs.google.com/a/fukuoka-now. com / Datei? id = dd8xj6nh_9fhsqvxcp_b

Und wie bereits angedeutet, achten Sie auf TABLE SCAN aus. Sie können diese in der Regel vermieden werden.

Suchen Sie wie sequenzieller Scans kann etwas nützlich sein, aber die Realität ist in den Zahlen ... außer, wenn die Zahlen sind nur Schätzungen! Was ist in der Regel weit nützlicher als bei einer Abfrage suchen Plan ist bei der aktuellen Suche Ausführung . In Postgres, dann ist dies der Unterschied zwischen EXPLAIN und EXPLAIN ANALYZE. EXPLAIN ANALYZE führt die Abfrage tatsächlich, und bekommt Echtzeitinformationen für jeden Knoten. Das können Sie sehen, was wirklich geschieht, statt dessen, was der Planer denkt wird passieren. Viele Male werden Sie feststellen, dass ein sequentieller Scan ist überhaupt kein Problem, sondern es ist etwas anderes in der Abfrage.

Der andere Schlüssel ist die Identifizierung, was der tatsächliche teure Schritt ist. Viele grafische Werkzeuge werden unterschiedlich große Pfeile, wie viel verschiedene Teile des Plans Kosten anzuzeigen. In diesem Fall sucht nur für Schritte, die dünne Pfeile haben kommen und einen dicken Pfeil Weggang. Wenn Sie nicht eine GUI finden Sie die Zahlen Augapfel müssen und suchen, wo sie plötzlich bekommen viel größer. Mit einer wenig Übung wird es ziemlich einfach, die Problembereiche auszuwählen.

Wirklich für Fragen wie diese, das Beste, was zu tun ist, AskTom . Insbesondere seine Antwort auf diese Frage enthält Links zu dem Online-Oracle doc, wo viele der diese Art von Regeln erklärt werden.

Eine Sache im Auge zu halten, ist das erklären Pläne sind wirklich am besten Vermutungen.

Es wäre eine gute Idee sein, zu lernen, sqlplus zu verwenden, und experimentieren Sie mit dem Befehl AUTOTRACE. Bei einigen harten Zahlen, können Sie in der Regel bessere Entscheidungen treffen.

Aber Sie sollten AskTom. Er weiß alles über sie:)

Der Ausgang des erklären erfahren Sie, wie lange jeder Schritt getan. Die erste Sache ist, die Schritte zu finden, die eine lange Zeit genommen haben, und verstehen, was sie bedeuten. Dinge wie ein sequentieller Scan Ihnen sagen, dass Sie eine bessere Indizes müssen - es meist eine Frage der Forschung in Ihre bestimmte Datenbank ist und Erfahrung

.

Ein "Oh nein, das ist nicht richtig" ist oft in Form eines Tabellen-Scan . Tabellen-Scans verwenden keine spezielle Indizes und können zu Reinigungs jeden nützlich in Speicher-Caches beitragen. In postgreSQL zum Beispiel finden Sie es wie folgt aussieht.

Seq Scan on my_table  (cost=0.00..15558.92 rows=620092 width=78)

Manchmal Tabellen-Scans sind ideal über, sagen wir, einen Index mit den Zeilen abzufragen. Dies ist jedoch ein jene rote Flagge Muster, die Sie scheinen zu suchen.

Im Grunde nehmen Sie einen Blick auf jeder Operation und sehen, ob die Operationen Ihres Wissen gegeben „Sinn machen“, wie es sollte in der Lage zu arbeiten.

Zum Beispiel, wenn Sie zwei Tabellen sind Beitritt, A und B auf ihren jeweiligen Spalten C und D (AC = BD) und Ihr Plan einen Clustered-Index Scan zeigt (SQL Server Begriff - nicht sicher, ob der Oracle Begriff ) auf dem Tisch A, dann eine verschachtelte Schleife eine Reihe von Clustered-Index sucht auf Tabelle B kommen, könnte man denken, es ein Problem gab. In diesem Szenario könnten erwarten, dass Sie die Maschine ein Paar von Index-Scans zu tun (über die Indizes auf den verknüpften Spalten) durch eine Zusammenführung gefolgt beizutreten. Weitere Untersuchungen könnten schlechte Statistiken zeigen, macht das Optimierungsprogramm wählen, dass Muster verbinden, oder einen Index, der nicht wirklich existiert.

Blick auf dem Prozentsatz der Zeit, in jedem Abschnitt des Plans ausgegeben, und überlegen, was der Motor tut. wenn es eine Tabelle zum Beispiel ist das Scannen, betrachten einen Index auf dem Feld setzen (n), sind Scannen für

Ich sehe hauptsächlich für Index- oder Tabellenscans. Diese in der Regel sagt mir, ich bin einen Index auf eine wichtige Säule fehlt, die in der Aussage ist, wo oder Join-Anweisung.

http://www.sql-server-performance.com/ Tipps / query_execution_plan_analysis_p1.aspx :

  

Wenn Sie eine der folgenden Aktionen in einem sehen   Ausführungsplan, sollten Sie   sie Warnschilder und untersuchen   sie für potenzielle Leistungs   Probleme. Jeder von ihnen ist weniger als   Ideal aus Sicht der Leistung.

* Index or table scans: May indicate a need for better or  additional indexes.
* Bookmark Lookups: Consider changing the current clustered index,
  consider using a covering index, limit
  the number of columns in the SELECT
  statement.
* Filter: Remove any functions in the WHERE clause, don't include wiews
  in your Transact-SQL code, may need
  additional indexes.
* Sort: Does the data really need to be sorted? Can an index be used to
  avoid sorting? Can sorting be done at
  the client more efficiently? 
     

Es ist nicht immer möglich zu vermeiden   diese, aber desto mehr können Sie vermeiden   sie ist, desto schnelle Abfrageleistung   sein wird.

Faustregeln

(Sie wollen wahrscheinlich auf die Details zu lesen, auch:

Bad

Table Scans von mehreren großen Tabellen

Gute

einen eindeutigen Index
Verwenden Index enthält alle erforderlichen Felder

Die häufigsten Win

In etwa 90% der Leistung Probleme, die ich gesehen habe, ist der einfachste Sieg eine Abfrage mit viel zu brechen (4 oder mehr) von Tabellen in 2 kleinere Abfragen und eine temporäre Tabelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top