Problemstellung V$ENQUEUE_STAT

Werbung
Betrifft
Enqueue-Waits identifizieren mit Oracle9i
Autor
Andri Kisseleff ([email protected])
Art der Info
Technische Background Info und Trivadis Scripts (Februar 2003)
Quelle
Aus dem TUN-Kurs der Trivadis
Problemstellung
Habe ich Lock-Waits oder interne Enqueue-Waits auf meinem Datenbank-System? Wie
lange haben diese gedauert?
Diese Fragen versuchen wir in diesem Artikel zu beantworten.
V$ENQUEUE_STAT
Seit Oracle9i kann man dies relativ einfach in V$ENQUEUE_STAT identifizieren. Die
Information, wie lange diese Lock-Waits/Enqueue-Waits gedauert haben kriegt man
selbstverständlich nur, wenn TIMED_STATISTICS auf TRUE gesetzt ist.
Ob der 9.2-Parameter STATISTICS_LEVEL auf BASIC, TYPICAL oder ALL gesetzt ist
spielt für diese Auswertung übrigens keine Rolle.
Verwenden Sie das Freeware-Trivadis-Script lsenqsta.sql ab unserer Download-Sektion
bei www.trivadis.com.
Beispiel:
SQL> connect sys as sysdba
Enter password: *******
Connected.
SQL> @lsenqsta
Wrote file dummy.tmp
Only enqueues with wait time Y/<N> ?
Enqueue requests/waits sorted by wait time and nbr. requests
DB1.TRIVADIS.COM
17.02.2003 18:03 - 20.02.2003 10:09 (64.1 h)
ENQ_NAME
Nbr. Requests Nbr. Waits Nbr. Fail.
Wait Time
------------------------------ ------------- ---------- ---------- -----------TX Transaction
334,836
10
5
4,498.422
UL User-defined Locks
2
1
0
46.016
TM DML Enqueue
691,425
2
0
6.531
TC TC
10
2
0
0.093
CF Controlfile Transaction
89,455
0
2
0.000
JD JD
45,023
0
0
0.000
HW Space management operations
TT Temporary Table
US Undo Segment, Serialization
etc.
etc.
14,692
8,850
8,500
0
0
0
0
0
0
0.000
0.000
0.000
33 rows selected.
lsenqsta.lis has been spooled...
Most important for you are the locks of type TX, TM and UL
Wait time is in seconds (27.123 = 27 seconds and 123 milliseconds)
Please note that statistics are only inserted into v$enqueue_stat
at the moment a locking problem is solved or raises an error.
As long as a user waits for a lock, no insert is done.
Please also note, that a deadlock (ORA-00060) does not appear in "Nbr. Failures"
Wir können hier erkennen:
-
Die Anzahl Locks/Enqueue-Requests (ENQ_NAME, Nbr. Requests) seit dem
letzten Startup
Wie häufig ein User das Lock nicht umgehend erhalten hat (Nbr. Waits)
Wie häufig ein User einen Fehler bei einem Lock-Request erhalten hat (Nbr. Fail.)
(z.B. ein Timeout, oder ein "Resource busy and acquire with nowait specified",
etc.)
Wie lange diese Waits zusammengerechnet gedauert haben (Wait Time). Dies
nur falls TIMED_STATISTICS = TRUE
Auf dieser Instanz/Datenbank hatten wir sehr lange (über 4'000 Sekunden) TX-Waits.
Bei TX-Waits werden die Row-Level-Lock-Waits und ITL-Waits verbucht (Was ist ein
ITL-Wait? Siehe hierzu auch unseren Artikel über ITL-Waits. Interested Transaction
List).
Zweitens hatten wir ca. 46 Sekunden UL-Waits. Dies sind Waits, wo sich User unter
Verwendung von DBMS_LOCK in die Quere gekommen sind, also warten mussten.
(Beruhigend ist hier zu wissen, dass ein DBMS_LOCK.SLEEP(n) nicht hier verbucht
wird. Es handelt sich also um "echte" DBMS_LOCK-Waits)
TM-Lock-Waits (6.5 Sekunden) sind Lock-Waits auf Tabellenebene (LOCK TABLE...).
Auf Oracle internen Locks und Enqueues (Oracle-Prozesse, Background-Prozesse)
hatten wir keine Probleme.
Oracle9i und Oracle8i
V$ENQUEUE_STAT steht erst ab Oracle9i Release 1 (9.0) zur Verfügung. Falls Sie
ähnliche Auswertungen mit früheren Versionen machen möchten, so müssen Sie das
Script anpassen, so dass es auf X$KSQST zugreifft. Die Struktur und die Attribute
dieser X$ unterscheiden sich allerdings ziemlich im Vergleich zu V$ENQUEUE_STAT.
Fazit
Wo es sich lohnt im Bereich Locking-Probleme weitere Abklärungen zu starten ist mit
Oracle relativ einfach zu identifizieren.
Ab Oracle9i Release 2 (9.2) ist es dann recht einfach in V$SEGMENT_STATISTICS zu
identifizieren auf welchen Tabellen wir Row-Lock-Waits und ITL-Waits hatten.
Unter Verwendung der Trivadis-Scripts und unserer Software TVD$TUN und der
Ausbildung z.B. in unserem TUN-Kurs ist es noch einfacher ☺
Viel Erfolg und wenig Lock-Waits wünscht Ihnen...
Andri Kisseleff
Trivadis AG
Andri Kisseleff
Kanalstrasse 5
8152 Glattbrugg
Internet: http://www.trivadis.com
Mail:
[email protected]
Tel:
Fax:
+41 1 808 70 20
+41 1 808 70 21
Herunterladen