Oracle Este necesar să se adune statisticile tabelului pentru un tabel nou cu un indice nou? (Programare, Oracle, Oracle11G)

Shawn a intrebat.
a intrebat.

Tocmai am creat un tabel nou pe 11gR2 și l-am încărcat cu date fără index. După ce încărcarea a fost finalizată, am creat mai mulți indici pe noua tabelă, inclusiv constrângerea primară.

CREATE TABLE xxxx (col1 varchar2(20), ...., coln varhcar2(10));
INSERT INTO xxxx SELECT * FROM another_table;
ALTER TABLE xxxx ADD CONSTRAINT xxxc PRIMARY KEY(col_list);
CREATE INDEX xxxx_idx1 ON xxxx (col3,col4);

În acest moment, mai trebuie să folosesc DBMS_STATS.GATHER_TABLE_STATS(v_owner,’XXXX’) pentru a colecta statisticile tabelei?Dacă da, de ce? deoarece Oracle spune în documentație că „Oracle Database acum colectează automat statisticile în timpul creării și reconstruirii indicilor”.

Nu vreau să aștept colectarea automată a statisticilor peste noapte, deoarece am nevoie să raportez dimensiunea reală a tabelului și a indexului său imediat după operațiunile de mai sus. Cred că rularea DBMS_STATS.GATHER_TABLE_STATS ar putea să-mi ofere date de utilizare mai precise. S-ar putea să mă înșel totuși.

Vă mulțumesc anticipat,

Comentarii

  • Pentru dimensiunea unui tabel nu aveți nevoie de statistici. Doar select BYTES, SEGMENT_NAME from USER_SEGMENTS. –  > Por Wernfried Domscheit.
1 răspunsuri
Husqvik

În Oracle 11gR2 încă trebuie să adunați statisticile tabelelor. Bănuiesc că ai citit documentația pentru Oracle 12c, care colectează automat statisticile, dar numai pentru inserțiile pe cale directă, ceea ce nu este cazul tău, inserția ta este convențională. De asemenea, dacă adunați statistici (cu opțiuni implicite) pentru o tabelă nou-nouță, care nu a fost folosită pentru interogări, nu vor fi generate histograme.

Statisticile indexului sunt colectate atunci când indexul este construit, astfel încât nu este necesară colectarea explicită a statisticilor acestuia. Atunci când adunați ulterior statisticile tabelelor, trebuie să utilizați opțiunea DBMS_STATS.GATHER_TABLE_STATS opțiunea cascade => false astfel încât statisticile indexului să nu fie colectate de două ori.

Puteți verifica pur și simplu statisticile folosind

SELECT * FROM ALL_TAB_COL_STATISTICS WHERE TABLE_NAME = 'XXXX';

Comentarii

  • Bună, Husqvik, mulțumesc pentru răspunsul rapid. Dacă nu execut statisticile tabelelor, pot obține dimensiunea exactă a utilizării spațiului? –  > Por Shawn.
  • Sigur, verificați acest fir – stackoverflow.com/questions/264914/… –  > Por Husqvik.
  • Am înțeles. fără a rula DBMS_STATS.GATHER_TABLE_STATS, ALL_TAB_COL_STATISTICS este gol. Vă mulțumim din nou. –  > Por Shawn.