Announcement

Collapse
No announcement yet.

Extended Statistics

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Extended Statistics

    Guten Tag

    Ich habe eine Frage zu Extended Statistics. Es geht um ein Verständnisproblem.

    Ich erstelle folgende Tabelle

    create table juerg as select * from dba_tables;

    Ich erstelle Statistiken mit Extended Statistiken über Owner, Tablespace. Dies da diese Felder im Normalfall eine nicht gleichmässige Verteilung haben.

    exec dbms_stats.gather_table_stats
    (ownname =>'SYSTEM', tabname =>'JUERG', method_opt =>'for all columns size auto for columns(owner,tablespace_name) size skewonly'
    ,estimate_percent=>100);

    Ich frage ab wieviele Rows owner und TS=SYSTEM haben
    select count (*) from juerg where owner='SYSTEM' and tablespace_name ='SYSTEM' (82 Rows)

    Ich prüfe ob es in den Histogrammen ein Wert mit 82 Einträgen gibt und finde diesen mit folgendem Statement

    select endpoint_number,endpoint_number-lag(endpoint_number,1,0) over (order by endpoint_number) as diff
    from dba_tab_histograms where owner='SYSTEM' and table_name ='JUERG' and column_name like 'SY%';

    Ich parse folgendes Statement
    select * from juerg where owner='SYSTEM' and tablespace_name ='SYSTEM'

    Oracle gibt mir bei Cardinality nun 70 anstelle den erwarteten 82 zurück. Was habe ich hier falsch verstanden ?

    Besten Dank

  • #2
    Ich kann das Beispiel nicht bestätigen. Der analoge Ablauf mit einer Änderung in der Syntax (OP gibt bei mir ERROR):
    Code:
    exec dbms_stats.gather_table_stats
    (ownname =>'SCOTT', tabname =>'JUERG',
     method_opt =>'for all columns size auto
     for columns owner,tablespace_name size skewonly',
    estimate_percent=>100);
    führt beim auf die korrekte Zeilenzahl in der Statistik (Test mit ca. 9 Mio Zeilen).
    Eventuell ist die Statistik aufgrund des Syntaxfehlers garnicht gelaufen ?!
    Zudem ist es nicht ratsam solche Tests unter der Kennung SYS oder SYSTEM durchzuführen, da sich diese Nutzer u.U. anders verhalten als "normale". Evtl. hilft Umschalten auf "COMPUTE":
    Code:
    estimate_percent=>NULL
    Viel Erfolg!

    Comment


    • #3
      Hallo Jum
      Besten Dank für deine Antwort.
      Aus meiner Sicht fehlen in dem Beispiel die Klammern bei den Feldern
      for columns owner,tablespace_name size skewonly'
      Sollte
      for columns (owner,tablespace_name) size skewonly'
      sein

      Die Syntax funktioniert erst ab Oracle 11 und ich bin diese am testen.
      Welche Funktion gibt bei dir Error ?

      Aus meiner Sicht darf der User nicht das Problem sein.
      Danke
      Juerg

      Comment


      • #4
        Unter ORACLE 11 (11.1.0.7.0) funktioniert die Syntax.
        Allerdings stimmt bei mir dann auch die Statistik ?!

        Comment

        Working...
        X