Ist das Bindespähen bei verteilten Abfragen deaktiviert?

8

Ich habe Probleme, eine Oracle-Abfrage nach einem Upgrade auf Oracle 11g zu optimieren, und dieses Problem fängt an, mich ein wenig verrückt zu machen.

Beachten Sie, dass diese Frage jetzt vollständig bearbeitet wurde, da ich nach dem Erstellen eines einfachen Testfalls mehr Informationen habe. Die ursprüngliche Frage ist hier verfügbar: Ссылка .

Dieses Problem tritt auf, wenn zwei Tabellen verbunden werden, von denen eine die Bedingung between für eine Datumsspalte hat. Wenn die Abfrage einer entfernten Tabelle beitritt, tritt Binding Peeking nicht auf.

Hier ist ein Testfall, um das Problem zu reproduzieren. Richten Sie zuerst zwei Quellentabellen ein. Die erste ist eine Liste von Daten, die als erste des Monats 30 Jahre zurückgehen.

%Vor%

Dann einige Daten aus dba_objects :

%Vor%

Erstellen Sie anschließend eine leere Tabelle, in der die Daten ausgeführt werden sollen:

%Vor%

Dann führe den Code aus. Möglicherweise müssen Sie eine größere Version mike_temp_dba_objects erstellen, um die Abfrage zu verlangsamen (oder eine andere Methode zum Abrufen des Ausführungsplans zu verwenden). Während die Abfrage ausgeführt wird, erhalte ich einen Ausführungsplan von der Sitzung, indem Sie select * from table(dbms_xplan.display_cursor(sql_id => 'xxxxxxxxxxx')) von einer anderen Sitzung ausführen.

%Vor%

Wenn eine entfernte Tabelle in der Abfrage vorhanden ist, ist die Kardinalitätsschätzung für die Tabelle mike_temp_etl_control völlig falsch, und Bind-Spähen scheint nicht zu erfolgen.

Der Ausführungsplan für die obige Abfrage ist unten dargestellt:

%Vor%

Wenn ich dann die entfernte dual durch die lokale Version ersetze bekomme ich die korrekte Kardinalität (139 statt 2):

%Vor%

Also, ich denke, die Frage ist, wie kann ich die korrekte Kardinalität schätzen lassen? Ist das ein Oracle Bug oder ist dies das erwartete Verhalten?

    
Mike Meyers 06.09.2012, 16:21
quelle

1 Antwort

1

Ich denke, Sie sollten sich mit dynamischen Sampling beschäftigen. Es funktioniert in 11g anders, vielleicht ist es der Grund für Ihre Probleme.

    
Alexander Tokarev 07.09.2012 12:18
quelle

Tags und Links