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

Oracle 11g - Wie optimiere ich die Auswahl langsamer paralleler Einfügungen?

Statistiken verbessern. Die geschätzte Anzahl der Zeilen beträgt 1, aber die tatsächliche Anzahl der Zeilen liegt bei über 7 Millionen, Tendenz steigend. Dies bewirkt, dass der Ausführungsplan eine verschachtelte Schleife anstelle eines Hash-Joins verwendet. Eine verschachtelte Schleife funktioniert besser für kleine Datenmengen und ein Hash-Join funktioniert besser für große Datenmengen. Dies zu beheben, kann so einfach sein, wie sicherzustellen, dass die relevanten Tabellen über genaue, aktuelle Statistiken verfügen. Dies kann normalerweise durch Sammeln von Statistiken mit den Standardeinstellungen erfolgen, zum Beispiel:exec dbms_stats.gather_table_stats('SIRS_UATC1', 'TBL_RECON_PM'); .

Wenn dies die Kardinalitätsschätzung nicht verbessert, versuchen Sie es mit einem dynamischen Sampling-Hinweis wie /*+ dynamic_sampling(5) */ . Bei solch einer lang andauernden Abfrage lohnt es sich, ein wenig mehr Zeit für das Vorab-Sampling von Daten aufzuwenden, wenn dies zu einem besseren Plan führt.

Verwenden Sie Parallelität auf Anweisungsebene anstelle von Parallelität auf Objektebene. Dies ist wahrscheinlich der häufigste Fehler bei parallelem SQL. Wenn Sie Parallelität auf Objektebene verwenden, muss der Hinweis auf den Alias verweisen des Objekts. Seit 11gR2 müssen Sie sich keine Gedanken mehr über die Spezifikation von Objekten machen. Diese Anweisung benötigt nur einen einzigen Hinweis:INSERT /*+ PARALLEL(16) APPEND */ ... . Beachten Sie, dass NOLOGGING ist kein echter Hinweis.