|
实例级别的监控,一直开启并且低开销:
建立基础表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| create table sys.sesstat_history tablespace EOL as
SELECT c.username,
c.osuser,
a.sid,
c.serial#,
c.paddr,
c.process,
c.logon_time,
a.statistic#,
b.name,
a.value,
SYSDATE AS logoff_timestamp
FROM v$sesstat a, v$statname b, v$session c
WHERE 1 = 2
create table sys.session_event_history tablespace EOL
as SELECT b.sid,
b.SERIAL#,
b.username,
b.osuser,
b.paddr,
b.process,
b.logon_time,
b.type,
a.event,
a.total_waits,
a.total_timeouts,
a.time_waited,
a.average_wait,
a.max_wait,
SYSDATE AS logoff_timestamp
FROM v$session_event a, v$session b
WHERE 1 = 2
|
创建触发器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
| CREATE OR REPLACE TRIGGER sys.logoff_trig
BEFORE logoff ON DATABASE
DECLARE
logoff_sid PLS_INTEGER;
logoff_time DATE := SYSDATE;
BEGIN
SELECT sid INTO logoff_sid FROM v$mystat WHERE rownum < 2;
INSERT INTO sys.session_event_history
(sid,
serial#,
username,
osuser,
paddr,
process,
logon_time,
TYPE,
event,
total_waits,
total_timeouts,
time_waited,
average_wait,
max_wait,
logoff_timestamp)
SELECT b.sid,
b.serial#,
b.username,
b.osuser,
b.paddr,
b.process,
b.logon_time,
b.type,
a.event,
a.total_waits,
a.total_timeouts,
a.time_waited,
a.average_wait,
a.max_wait,
SYSDATE AS logoff_timestamp
FROM v$session_event a, v$session b
WHERE a.sid = b.sid
AND b.username = login_user
AND b.sid = logoff_sid;
INSERT INTO sys.sesstat_history
(username,
osuser,
sid,
serial#,
paddr,
process,
logon_time,
statistic#,
NAME,
VALUE,
logoff_timestamp)
SELECT c.username,
c.osuser,
a.sid,
c.serial#,
c.paddr,
c.process,
c.logon_time,
a.statistic#,
b.name,
a.value,
logoff_time
FROM v$sesstat a, v$statname b, v$session c
WHERE a.statistic# = b.statistic#
AND a.sid = c.sid
AND b.name IN ('CPU used where call started',
'CPU used by this session',
'recursive cpu usage',
'parse time cpu')
AND c.sid = logoff_sid
AND c.username = login_user;
END;
|
查询消耗CPU的等待事件排名:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| SQL> SELECT *
FROM (SELECT a.sid, a.serial#, a.event, a.total_waits
FROM session_event_history a
ORDER BY a.time_waited DESC)
WHERE rownum < 100;
2 3 4 5
SID SERIAL# EVENT TOTAL_WAITS
---------- ---------- ------------------------------------------------------------ -----------
1858 8391 SQL*Net message from client 147692
1437 52565 SQL*Net message from client 34305
584 52801 SQL*Net message from client 85105
585 40229 SQL*Net message from client 163331
874 3263 SQL*Net message from client 77519
1285 21797 SQL*Net message from client 19041
861 25015 SQL*Net message from client 194
726 9275 SQL*Net message from client 66724
1717 1935 SQL*Net message from client 92394
1014 883 SQL*Net message from client 34455
21 10841 SQL*Net message from client 28685
|
|
|