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

  1. 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. Funkcja ROUND zaokrągla czas do pełnych minut, a MOD 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, a sl.totalwork to całkowita ilość pracy do wykonania.
  2. FROM Clause (Źródła Danych):
    • v$session s: Widok dynamiczny v$session zawiera informacje o bieżących sesjach w bazie danych. Alias s jest używany do odniesienia się do tego widoku.
    • v$session_longops sl: Widok dynamiczny v$session_longops dostarcza informacji o długotrwałych operacjach wykonywanych przez sesje. Alias sl jest używany do odniesienia się do tego widoku.
  3. WHERE Clause (Warunki Filtracji):
    • s.sid = sl.sid AND s.serial# = sl.serial#: Łączy dane z widoków v$session i v$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.