Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erklären Sie den Schmerzpunkt der Plankosten

Heute habe ich mit einem Entwickler an einer Abfrage gearbeitet, die eine schlechte Leistung hatte. Diese Abfrage war umfangreich und komplex, und zunächst sah es nach einer gewaltigen Anstrengung aus, herauszufinden, wo das Leistungsproblem liegt. Mit Explain Plan können wir manchmal die Kosten nutzen, um den Leistungsschmerzpunkt einer großen, komplexen Abfrage einzugrenzen.

Wenn wir uns einen Erklärungsplan dieser Abfrage ansehen, sehen wir, dass die Gesamtkosten ziemlich hoch sind.

Wenn wir uns die Details ansehen, können wir sehen, dass der FULL-Tabellenscan (FTS) in der Tabelle DETAIL_RECORD hohe Kosten von 51018 hat. Beachten Sie, wie sich die hohen Kosten des FTS im Plan nach oben ausbreiten. Alle Operationen über diesem FTS sind wegen der hohen Kosten dieses Einzeltabellenzugriffs mit hohen Kosten verbunden. Der Zugriff auf die Tabelle CIMS_POLICIES_TO_PROCESS hat relativ geringe Kosten, aber die HASH JOIN-Operation verursacht ihre hohen Kosten nur wegen der hohen Kosten für den Zugriff auf die Tabelle DETAIL_RECORD.

Die Gesamtkosten sind nur wenig höher als die Kosten für den Zugriff auf diese Tabelle. Es ist klar, dass die FTS in dieser Tabelle den größten Beitrag zum Schmerzpunkt dieser zu analysierenden Abfrage leistet.

Indem wir die Explain Plan-Kosten auf diese Weise betrachteten, konnten wir uns sehr schnell auf den einen Bereich einer sehr komplexen Abfrage konzentrieren, der die größten Leistungseinbußen verursacht. Ohne die hier durchgeführte Kostenanalyse wäre es viel Arbeit gewesen, festzustellen, welcher Teil der nachstehenden Abfrage Probleme verursacht.