oracle sql trace - ghdrako/doc_snipets GitHub Wiki
SQL Trace to narzędzie diagnostyczne w Oracle Database, które umożliwia śledzenie wykonania zapytań SQL na poziomie sesji. Działa poprzez rejestrowanie szczegółowych informacji o wykonaniu zapytań, takich jak:
- Czas wykonania zapytań.
- Ilość operacji wejścia/wyjścia (I/O).
- Liczba przeczytanych, zapisanych i zmodyfikowanych bloków.
- Wykorzystanie pamięci PGA/SGA.
- Sposób wykonania zapytań (czy używa indeksów, czy pełnego skanowania tabel).
Pliki śledzenia SQL Trace można później analizować przy użyciu narzędzia TKPROF lub innych metod.
Włączenie SQL Trace dla sesji
Włączenie SQL Trace dla bieżącej sesji
ALTER SESSION SET sql_trace = TRUE;
...
ALTER SESSION SET sql_trace = FALSE;
Włączenie SQL Trace dla innej sesji (DBA)
SELECT sid, serial#, username, program
FROM v$session
WHERE username = 'HR';
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, TRUE);
...
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(123, 456, FALSE);
Włączenie SQL Trace dla całej bazy danych (uważnie!)
ALTER SYSTEM SET sql_trace = TRUE;
ALTER SYSTEM SET sql_trace = FALSE;
Lokalizacja plikow SQL Trace
SHOW PARAMETER user_dump_dest;
Przykładowa ścieżka do pliku:
/u01/app/oracle/diag/rdbms/orcl/trace/orcl_ora_12345.trc
Analiza wyników SQL Trace za pomocą TKPROF
Przetworzenie pliku .trc za pomocą TKPROF
W terminalu lub SQL*Plus wykonujemy:
tkprof orcl_ora_12345.trc output_file.txt sort=execpu
Opcja sort=execpu
oznacza, że wyniki zostaną posortowane według użycia CPU.
Struktura raportu TKPROF
Po przetworzeniu pliku .trc otrzymujemy raport zawierający m.in.:
Czas wykonania SQL (elapsed time, CPU time).
Liczbę odczytanych bloków (consistent gets, physical reads).
Plan wykonania (Execution Plan).
Przykładowy fragment raportu:
SELECT emp_name FROM employees WHERE emp_id = :1;
call count cpu elapsed disk query current rows
------- ------ -------- ---------- -------- ---------- ---------- -------
Parse 1 0.01 0.02 0 1 0 0
Execute 1 0.00 0.01 0 0 1 1
Fetch 1 0.02 0.03 2 10 0 1
------- ------ -------- ---------- -------- ---------- ---------- -------
total 3 0.03 0.06 2 11 1 1
- Interpretacja raportu TKPROF
Podstawowe wskaźniki do analizy:
Parametr | Znaczenie |
---|---|
cpu | Czas CPU zużyty przez zapytanie. |
elapsed | Całkowity czas wykonania zapytania. |
disk | Liczba operacji odczytu z dysku (duża wartość = problem). |
query | Liczba logicznych odczytów bloków (wysokie wartości mogą wskazywać na potrzebę indeksów). |
current | Liczba aktualizacji i blokad (wysoka wartość może sugerować konflikt współbieżności). |
rows | Liczba zwróconych wierszy (jeśli niski wynik przy dużym query, zapytanie jest nieefektywne). |
Przykładowe interpretacje:
- Jeśli disk jest wysoki → zapytanie powoduje dużo operacji I/O → można dodać indeksy lub poprawić struktury tabel.
- Jeśli cpu jest wysoki, a elapsed niski → problemem jest złożoność obliczeniowa zapytania.
- Jeśli rows jest niski, a query wysoki → zapytanie skanuje zbyt wiele danych bez potrzeby.