Co się dzieje w bazie ?
Skrypt do pobierania informacji o długo trwających sesjach.
Czasami warto wiedzieć co się dzieje w bazie danych szczególnie kiedy coś co wydaje nam się wykonywać szybko idzie bardzo powoli. W tym miejscu warto sięgnąć po skrypt, którzy będzie pobierał informację informację o tym .
Skrypt ten jest używany w bazie danych Oracle do monitorowania długotrwałych operacji wykonywanych przez sesje użytkowników. Poniżej znajduje się szczegółowe wyjaśnienie poszczególnych części skryptu:
Struktura Skryptu
SELECT
s.sid,
s.serial#,
s.machine,
ROUND(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed,
ROUND(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining,
ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct
FROM
v$session s,
v$session_longops sl
WHERE
s.sid = sl.sid
AND s.serial# = sl.serial#
AND time_remaining > 0;
Szczegółowe Wyjaśnienie
- SELECT Clause (Wybranie Kolumn):
s.sid
: Session ID – Unikalny identyfikator sesji w bazie danych.s.serial#
: Numer Seryjny – Numer seryjny sesji, który jest używany razem z SID do unikalnego identyfikowania sesji.s.machine
: Nazwa Maszyny – Nazwa komputera lub serwera, z którego pochodzi sesja.ROUND(sl.elapsed_seconds/60) || ':' || MOD(sl.elapsed_seconds,60) elapsed
: Czas Elapsowany – Czas, który upłynął od rozpoczęcia operacji, sformatowany w minutach i sekundach. FunkcjaROUND
zaokrągla czas do pełnych minut, aMOD
zwraca resztę sekund.ROUND(sl.time_remaining/60) || ':' || MOD(sl.time_remaining,60) remaining
: Pozostały Czas – Szacowany czas pozostały do zakończenia operacji, również sformatowany w minutach i sekundach.ROUND(sl.sofar/sl.totalwork*100, 2) progress_pct
: Procent Postępu – Oblicza procentowy postęp operacji, zaokrąglony do dwóch miejsc po przecinku.sl.sofar
to ilość wykonanej pracy, asl.totalwork
to całkowita ilość pracy do wykonania.
- FROM Clause (Źródła Danych):
v$session s
: Widok dynamicznyv$session
zawiera informacje o bieżących sesjach w bazie danych. Aliass
jest używany do odniesienia się do tego widoku.v$session_longops sl
: Widok dynamicznyv$session_longops
dostarcza informacji o długotrwałych operacjach wykonywanych przez sesje. Aliassl
jest używany do odniesienia się do tego widoku.
- WHERE Clause (Warunki Filtracji):
s.sid = sl.sid AND s.serial# = sl.serial#
: Łączy dane z widokówv$session
iv$session_longops
na podstawie identyfikatora sesji (sid
) oraz numeru seryjnego (serial#
). Dzięki temu informacje o długotrwałych operacjach są powiązane z odpowiednimi sesjami.time_remaining > 0
: Filtruje tylko te operacje, które mają jeszcze czas pozostały do zakończenia, czyli operacje, które są w toku.
Przykładowe Zastosowanie
Ten skrypt jest przydatny administratorom baz danych Oracle, którzy chcą monitorować i zarządzać długotrwałymi operacjami wykonywanymi przez użytkowników. Dzięki niemu można:
- Identyfikować Sesje: Zobaczyć, które sesje są aktywne i jakie operacje wykonują.
- Monitorować Postęp: Śledzić, jak daleko posunięła się dana operacja i ile czasu jeszcze może zająć jej zakończenie.
- Zarządzać Zasobami: Decydować o ewentualnym interweniowaniu w przypadku operacji, które trwają zbyt długo i mogą wpływać na wydajność bazy danych.
Podsumowanie
Skrypt ten łączy informacje z dwóch widoków dynamicznych Oracle (v$session
i v$session_longops
) w celu uzyskania szczegółowych danych na temat długotrwałych operacji w bazie danych. Wyświetla on identyfikatory sesji, nazwę maszyny, czas trwania operacji, szacowany czas pozostały oraz procentowy postęp, co pozwala na efektywne monitorowanie i zarządzanie działaniami użytkowników w systemie.