Skip to Main Content

Breadcrumb

Wait Event Dauer

Wait Event Time Distribution

Oft ist es interessant wie viele Wait Events wie lange warten (in ms). Die Abfrage ist wie üblich RAC tauglich und funktioniert selbstverständlich auch bei einer Single Instance. Alle Wait Events, die kein einziges Wait aufweisen, werden automatisch unterdrückt.

Auf die Frage: "Enter value for event_name:" kann man einfach ENTER drücken um alle zu bekommen, oder Teile vom Event Namen - Beispielsweise "log" um die Events rund um die Online Logfiles anzuzeigen.

column event format a60
column wait_class format a16

with myevents as
(select /*+ MATERIALIZE */ eh.inst_id, eh.event, wait_class, eh.wait_time_milli, sum(eh.wait_count) wait_count
   from gv$event_histogram eh join v$event_name en on (eh.event# = en.event#)
  where wait_time_milli != -1
    /* Wenn man keine Frage haben moechte, die naechste Zeile loeschen */
    and event like '%&event_name%'
  group by   inst_id, event, wait_class, wait_time_milli
)
, subq as
(select inst_id, event, wait_class,  wait_time_milli, wait_count
   from (select inst_id, event, wait_class, to_char(wait_time_milli) wait_time_milli, wait_count
           from myevents where wait_time_milli <= 4096
         union all
         select inst_id, event, wait_class, '> 4096ms', sum(wait_count)
           from myevents where wait_time_milli > 4096
         group by inst_id, event, wait_class, '> 4096ms'
        )
)
select
        *
from
        subq
        pivot (
               max(wait_count)
               for wait_time_milli in ('1','2','4','8','16','32','64','128','256','512','1024','2048','4096','> 4096ms')
        )
order by
        wait_class, event, inst_id;

Spalten und Ihre Bedeutung

Die Spalten haben folgende Bedeutung:

  • INST_ID ... Welche Instanz - im Fall von Single Instance immer 1.
  • EVENT ... Name des Wait Events
  • WAIT_CLASS ... Zu welcher Art von Waits zählt dieser Event. Die Wait Class wird beispielsweise im Oracle Enterprise Manager auf der Performance Seite als Unterteilung/Groupierung der einzelnen Waits genutzt.
  • von 1 bis 4096 ... die Anzahl der Waits, die entsprechend viele Millisekunden gewartet haben. Dabei ist es so zu verstehen, dass bei "4" die Anzahl der Waits zwischen größer 2ms bis inklusive 4ms gemeint sind. Bei "> 4096ms sind alle Waits, die länger als 4096ms gedauert haben, gezählt.

Wichtiger Hinweis zu den Events

Nicht alle Wait Events bedeuten auch wirklich warten - hier sind die wichtigsten Ausnahmen (Liste möglicherweise nicht Vollständig, da immer wieder neue Wait Events dazu kommen können).

  • SQL*NET message from client - hier wartet der Datenbank Benutzer Server Prozess, dass der Client endlich mal wieder was will.
  • SQL*Net more data from client - hier wartet der Datenbank Benutzer Server Prozess, dass der Client die nächsten Daten schickt.
  • Die "idle" Events - Beispielsweise: "shared server idle wait", hier warten Hintergrundprozesse darauf, dass es etwas zu tun gibt - das ist OK und soll so sein.
  • Die "timer" Events - Beispielsweise: "smon timer", hier warten Hintergrundprozesse darauf, dass Sie mal wieder einen Routinecheck machen sollen. Wenn etwas akut zu tun wäre, würden sie von anderen Prozessen aufgeweckt werden.
  • Die "slave" Events - Beispielsweise: "jobq slave wait", hier warten Hintergrund-Slaveprozesse darauf, von seinem Manager Aufgaben übertragen zu bekommen.
  • Die "Data Guard" Events - Beispielsweise: "Data Guard: Gap Manager", abhängig davon ob (und wie) Data Guard überhaupt genutzt wird, hat der Prozess mehr oder weniger viel zu tun.

Beispielergebnis

Hier ein Beispielergebnis, wenn man auf die Frage nach dem Event Namen "log" eingibt. Aus Platzgründen ist das Ergebnis zwischen 8ms und 4096ms hier mit "..." dargestellt.

INST_ID EVENT                     WAIT_CLASS      '1'   '2'   '4'   '8' ... '4096' '> 4096ms'
------- ------------------------- ------------- ----- ----- ----- ----- ... ------ ----------
      1 log file sync             Commit            1     0     8   546 ...      1
      1 log buffer space          Configuration     0     0     0     1 ...
      1 log file parallel write   System I/O        0   372  4710 28544 ...      6          4
      1 log file sequential read  System I/O     2431   101    73    78 ...     12          1
      1 log file single write     System I/O        0     4     7    12 ...