Temat: Oracle Dictionary Cache Stats
Kamil Stawiarski:
Sebastian Kolski:
Czyli, nawet jeśli byś całkowicie wyeliminował miss'y w kategorii dc_files, to wpływ tego, na wydajność bazy, będzie najprawdopodobniej niezauważalny.
Chyba, że statystyka wynika z ciągłego rozszerzania plików danych o np. 10m przy ładowaniu dużych paczek. Wtedy wyeliminowanie tego objawu będzie miało bardzo duże znaczenie wydajnościowe.
Mam wrażenie, że akurat rozszerzanie plików nie wpływa na statystyki dictionary cache dc_files.
Przy wykonywaniu operacji, które zmieniają metadane oracle aktualizuje to co siedzi w dc.
Wydaje mi się, że jedyny sposób aby pojawiły się miss'y przy dc_files to przy pierwszym ładowaniu danych o plikach do dc lub przy kolejnych jeśli dane zostały z niego usunięte na skutek długiego braku odwołań.
W przykładzie, który podawałeś wcześniej wzrost ilości miss'ów spowodowany był flushowaniem shared poola, a nie rozszerzaniem pliku.
Rozszerzanie plików powoduje powstawanie waitów data file init write. I to one były by objawem jeśli było by to problemem.
Przykład:
Database opened.
SQL> select parameter, count, usage, gets, getmisses from v$rowcache where parameter='dc_files';
PARAMETER COUNT USAGE GETS GETMISSES
-------------------------------- ---------- ---------- ---------- ----------
dc_files 0 0 0 0
SQL> select event, total_waits from v$system_event where event = 'Data file init write';
no rows selected
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
<ciach>
35 rows selected.
-- metadane o plikach siedzą teraz w dc
SQL> select parameter, count, usage, gets, getmisses from v$rowcache where parameter='dc_files';
PARAMETER COUNT USAGE GETS GETMISSES
-------------------------------- ---------- ---------- ---------- ----------
dc_files 35 35 35 35
-- tworzenie nowego pliku będzie nowy miss
SQL> create tablespace test datafile '/tmp/test.dbf' size 128k autoextend on next 8k;
Tablespace created.
SQL> select parameter, count, usage, gets, getmisses from v$rowcache where parameter='dc_files';
PARAMETER COUNT USAGE GETS GETMISSES
-------------------------------- ---------- ---------- ---------- ----------
dc_files 36 36 39 36
SQL> select bytes, blocks from dba_data_files where file_name = '/tmp/test.dbf';
BYTES BLOCKS
---------- ----------
131072 16
-- generujemy wielokrotne rozszerzanie pliku - nie powoduje to powstania nowych miss'ów
-- za to pojawiają się wait'y data file init write
SQL> create table test tablespace test as select rownum n1, rpad('x',8000) padding
2 from all_objects where rownum < 100;
Table created.
SQL> select parameter, count, usage, gets, getmisses from v$rowcache where parameter='dc_files';
PARAMETER COUNT USAGE GETS GETMISSES
-------------------------------- ---------- ---------- ---------- ----------
dc_files 36 36 40 36
SQL> select bytes, blocks from dba_data_files where file_name = '/tmp/test.dbf';
BYTES BLOCKS
---------- ----------
983040 120
SQL> select event, total_waits from v$system_event where event = 'Data file init write';
EVENT TOTAL_WAITS
---------------------------------------------------------------- -----------
Data file init write 28
Pozdrawiam
Sebastian