exec DBMS_STATS.GATHER_SCHEMA_STATS(’[username]‘, cascade=>TRUE);
exec #dla tabeli wraz z indeksami DBMS_STATS.GATHER_TABLE_STATS(’[username','[table_name]‘,cascade=>TRUE); #dla całego schematu wraz z indeksami
TIMED_STATISTICS = TRUE
SELECT last_analysed FROM DBA_TABLES – data zbierania statystyk
EXPLAIN PLAN$oracle_home/rdbms/admin/utlxplan.sql – tworzy tabelę PLAN_TABLE dla generowania planów poprzedzonych:
EXPLAIN PLAN SET STATEMENT_ID = ‘[nazwa]‘ FOR SELECT …
TRACE
TIMED_STATISTICS TRUE
ALTER SESSION SET SQL_TRACE = TRUE – generacja pliku śladu dla zapytań(obciąża bazę),
który będzie znajdował się w katalogu;
show parameter UDUMP; (USER DUMP DEST) #uruchomiony przez usera
show parameter BDUMP; (BACKGROUND DUMP DEST) #uruchomiony przez proces tła
MAX_DUMP_FILE_SIZE #max rozmiar pliku
[instance_name]_[process_name]_[process_id].trc #tracefile format
włączenie:
ALTER SESSION SET EVENTS ‘10046 trace name context forever, level 8′
- level 0 #wyłączone
- level 1 #default
- level 4 #default + bind variable values
- level 8 #default + wait event information
- level 12 #level 4 + level 8
wyłączenie:
ALTER SESSION SET EVENTS ‘10046 trace name context off’
włączenie dla innego usera;
ORADEBUG SETOSPID [nr z v$process];
ORADEBUG UNLIMIT;
ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL8;
wyłączenie dla innego usera:
ORADEBUG EVENT 10046 TRACE NAME CONTEXT OFF;
in 10g is available package DBMS_MONITOR:
- SESSION LEVEL
- turn on (level
exec DBMS_MONITOR.SESSION_TRACE_ENABLE(
session_id => [sid],
serial_num => [serial],
waits => TRUE,
binds => FALSE);
- turn off:
exec DBMS_MONITOR.SESSION_TRACE_DISABLE(
session_id=> [sid],
serial_num=> [serial]);
- check:
SELECT sql_trace,sql_trace_waits,sql_trace_binds FROM v$session;
- DATABASE LEVEL
- turn on:
exec DBMS_MONITOR.DATABASE_TRACE_ENABLE(
waits => TRUE,
binds => TRUE,
instance_name > NULL);
- turn off:
exec DBMS_MONITOR.DATABASE_TRACE_ENABLE(
instance_name > NULL);
- check:
SELECT * FROM dba_enabled_traces;
- CLIENT LEVEL
- turn on:
exec DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(
client_id => ‘client_name’,
waits => TRUE,
binds => FALSE);
- turn off:
exec DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE(client_id => ‘client_name’);
- check:
SELECT * FROM dba_enabled_traces;
- COMPONENT LEVEL (11g)
- turn on :
exec DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => ’serv_name’,
module_name => ‘module’,
action_name => ‘action’,
waits => TRUE,
binds => FALSE,
instance_name => NULL);
- turn off:
exec DBMS_MONITOR.SERV_MOD_TRACE_DISABLE(service_name => ’serv_name’,
module_name => ‘module’,
action_name => ‘action’,
instance_name => NULL)
- check:
SELECT * FROM dba_enabled_traces;
TKPROF
! tkprof czyta pliki do 2GB
jeżeli plik trace jest większy niż 2GB należy utworzyć plik fifo:
mkfifo [plik_fifo]
wywołać komendę tkprof na pliku fifo:
TKPROF [plik_fifo] [output_file] …
przejść do innej konsoli i wywołać:
cat [plik_trace] > [plik_fifo]
TKPROF [trace_file] [output_file] SORT=([option] if option sort is not set, order is similar as tracefile, many options means that TKPROF sums the value of the options) PRINT=[only with sort opition - limit number of SQL in output file] SYS=[no - dont list SQL executed by SYS user]
options:
| PARSE |
EXEC |
FETCH |
|
| PRSCNT |
EXECNT |
FCHCNT |
number of times |
| PRSCPU |
EXECPU |
FCHCPU |
CPU time spending |
| PRSELA |
EXEELA |
FCHELA |
elapsed time spent |
| PRSDSK |
EXEDSK |
FCHDSK |
number of disk physical reads |
| PRSQRY |
EXEQRY |
FCHQRY |
number of buffers for consistent read |
| PRSCU |
EXECU |
FCHCU |
number of buffers for current read |
|
EXEROW |
FCHROW |
number of rows processed, fetched |
| PRSMIS |
EXEMIS |
FCHMIS |
number of library cache misses |
example:
tkprof ../db_ora_10196.trc db_ora_10196-1.txt sys=no sort=prsela,exeela,fchela
dobre wyjaśnienie na blogu
podane za Oracle® Database Performance Tuning Guide
10g Release 2 (10.2) Part Number B14211-03:
AUTOTRACE[oracle_home]/sqlplus/admin/plustrce.sql – skrypt do ustawienia roli PLUSTRACE potrzebnej do korzystania z AUTOTRACE
SET AUTOTRACE TRACEONLY | ON EXPLAIN | ON STATISTICS | ON EXPLAIN STATISTICS #bez wyników zapytań
SET AUTOTRACE ON EXPLAIN | ON STATISTICS | ON EXPLAIN STATISTICS #wraz z wynikami zapytań
SET AUTOTRACE OFF
ZBIERANIE STATYSTYK (przestarzałe)
utlbstat.sql – początek (usuwanie tabel zawierających kopie V$ i ponowne odtworzenie i zebranie tam nowych danych
utlestat.sql – koniec (generacja reportu report.txt
STATSPACK$oracle_home/rdbms/admin/spcreate.sql – uruchamia poniższe skrypty:
$oracle_home/rdbms/admin/spcusr.sql – tworzenie usera PERFSTAT (log w spcusr.lis)
$oracle_home/rdbms/admin/spctab.sql – tworzy tabele (log w spctab.lis)
$oracle_home/rdbms/admin/spckg.sql – tworzy pakiety (log w spcpkg.sql)
EXECUTE STATSPACK.SNAP; – generacja migawki (punktu w którym zbierane są statystyki)
EXECUTE STATSPACEK.STATSPACK_MODIFY_PARAMETERS – zmiana parametrów zbierania migawek
$oracle_home/rdbms/admin/spreport.sql – generuje raport
$oracle_home/rdbms/admin/spauto.sql – generuje joba dla migawek gdzie interwał:
SYSDATE+1 – raz dziennie
SYSDATE+1/48 – raz na 1/2 h
SYSDATE+1/24 – raz na 1 h
$oracle_home/rdbms/admin/sptrunc.sql – usuwanie zawartości wszystkich tabel
$oracle_home/rdbms/admin/sppurge.sql – usuwanie w/g migawek
$oracle_home/rdbms/admin/spdrp.sql – uruchamia poniższe skrypty:
$oracle_home/rdbms/admin/spdtab.sql – usuwa tabele i pakiety
$oracle_home/rdbms/admin/spdusr.sql – usuwa usera PERFSTAT
DBMS_STATSpakiet służy do zbierania statystyk dla optymalizatora kosztowego wyzwalany przez GATHER_STATS_JOB
SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = ‘GATHER_STATS_JOB’; $oracle_home/rdbms/admin/dbmsstat.sql – specyfikacja pakietu
$oracle_home/rdbms/admin/prvtstat.plb – ciało pakietu
select * from dba_hist_sql_plan where options=’FULL SCAN’ and operation=’TABLE’ and object_owner like ‘%[user]%’;
Ostatnie komentarze