Oracle 10 gデータベースでのレスポンス時間の分析方法(2)
Oracle 10 gデータベースでのレスポンス時間の分析方法(2)
上記のクエリには、より詳細なレスポンス時間データが含まれています.DBAはまた、システムレベルでのユーザ通信の平均応答時間を収集する必要があり、上記のクエリは必要な結果を示している.ユーザーがレスポンス時間が遅いと文句を言う場合は、DBAはResponse Time Per TxnとSQL Service Response Timeデータにデータベースの問題があるかどうかを確認する必要があります.
応答時間がそれほど求められていない場合、DBAはどのようなタイプのユーザー・アクティビティがデータベースの応答をこんなに遅くしたのかを知りたいと思っています.Oracle 10 gデータベースの前では、これらの情報は取得しにくいですが、次のようなクエリーを実行するのは簡単になりました.
DBAはイベント時間以外にも全体の待ち時間が知りたいです.DBAは、Oracle 10 gデータベースの前に個別の待機イベントを表示して待機とボトルネックを特定する必要があります.これで、Oracle 10 gデータベースに待機の概要メカニズムが提供されます.
上記のクエリには、より詳細なレスポンス時間データが含まれています.DBAはまた、システムレベルでのユーザ通信の平均応答時間を収集する必要があり、上記のクエリは必要な結果を示している.ユーザーがレスポンス時間が遅いと文句を言う場合は、DBAはResponse Time Per TxnとSQL Service Response Timeデータにデータベースの問題があるかどうかを確認する必要があります.
応答時間がそれほど求められていない場合、DBAはどのようなタイプのユーザー・アクティビティがデータベースの応答をこんなに遅くしたのかを知りたいと思っています.Oracle 10 gデータベースの前では、これらの情報は取得しにくいですが、次のようなクエリーを実行するのは簡単になりました.
select case db_stat_name
when 'parse time elapsed' then
'soft parse time'
else db_stat_name
end db_stat_name,
case db_stat_name
when 'sql execute elapsed time' then
time_secs - plsql_time
when 'parse time elapsed' then
time_secs - hard_parse_time
else time_secs
end time_secs,
case db_stat_name
when 'sql execute elapsed time' then
round(100 * (time_secs - plsql_time) / db_time,2)
when 'parse time elapsed' then
round(100 * (time_secs - hard_parse_time) / db_time,2)
else round(100 * time_secs / db_time,2)
end pct_time
from
(select stat_name db_stat_name,
round((value / 1000000),3) time_secs
from sys.v_$sys_time_model
where stat_name not in('DB time','background elapsed time',
'background cpu time','DB CPU')),
(select round((value / 1000000),3) db_time
from sys.v_$sys_time_model
where stat_name = 'DB time'),
(select round((value / 1000000),3) plsql_time
from sys.v_$sys_time_model
where stat_name = 'PL/SQL execution elapsed time'),
(select round((value / 1000000),3) hard_parse_time
from sys.v_$sys_time_model
where stat_name = 'hard parse elapsed time')
order by 2 desc;
DB_STAT_NAME TIME_SECS PCT_TIME
sql execute elapsed time 65.644 89.7
hard parse elapsed time 26.661 36.43
PL/SQL execution elapsed time 12.766 17.44
PL/SQL compilation elapsed time 6.353 8.68
soft parse time 2.15 2.94
connection management call elapsed time 1.084 1.48
hard parse (sharing criteria) elapsed time 0.448 0.61
repeated bind elapsed time 0.026 0.04
failed parse elapsed time 0.009 0.01
hard parse (bind mismatch) elapsed time 0.002 0
RMAN cpu time (backup/restore) 0 0
inbound PL/SQL rpc elapsed time 0 0
sequence load elapsed time 0 0
Java execution elapsed time 0 0
failed parse (out of shared memory) elapsed time 0 0
V$SYS_TIME_MODELビューでは、対応する主な時間処理の部分が見つかり、それに基づいてデータベースを調整できます.DBAはイベント時間以外にも全体の待ち時間が知りたいです.DBAは、Oracle 10 gデータベースの前に個別の待機イベントを表示して待機とボトルネックを特定する必要があります.これで、Oracle 10 gデータベースに待機の概要メカニズムが提供されます.
select WAIT_CLASS,
TOTAL_WAITS,
round(100 * (TOTAL_WAITS / SUM_WAITS),2) PCT_WAITS,
ROUND((TIME_WAITED / 100),2) TIME_WAITED_SECS,
round(100 * (TIME_WAITED / SUM_TIME),2) PCT_TIME
from
(select WAIT_CLASS,
TOTAL_WAITS,
TIME_WAITED
from V$SYSTEM_WAIT_CLASS
where WAIT_CLASS != 'Idle'),
(select sum(TOTAL_WAITS) SUM_WAITS,
sum(TIME_WAITED) SUM_TIME
from V$SYSTEM_WAIT_CLASS
where WAIT_CLASS != 'Idle')
order by 5 desc;
WAIT_CLASS TOTAL_WAITS PCT_WAITS TIME_WAITED_SECS PCT_TIME
User I/O 5748 61.71 67.57 65.79
Other 182 1.95 16.85 16.41
System I/O 2975 31.94 11.27 10.97
Concurrency 114 1.22 6.76 6.58
Commit 61 0.65 0.22 0.21
Network 233 2.5 0.03 0.03
Application 2 0.02 0 0
これにより、全体的な待ち時間の大部分を簡単に見つけることができます.応答時間データと同様に、次のクエリを使用して、最新の1時間待機タイプをタイムリーにレビューできます.select a.sid,
b.username,
a.wait_class,
a.total_waits,
round((a.time_waited / 100),2) time_waited_secs
from sys.v_$session_wait_class a,
sys.v_$session b
where b.sid = a.sid and
b.username is not null and
a.wait_class != 'Idle'
order by 5 desc;
SID USERNAME WAIT_CLASS TOTAL_WAITS TIME_WAITED_SECS
38 SYS User I/O 22 0.19
48 SYS User I/O 15 0.12
38 SYS Network 21 0.01
48 SYS Network 24 0
38 SYS Application 2 0
このとき、以前のバージョンのOracleデータベースでV$SESSION_を問い合わせるように、標準の個別待機イベントをチェックできます.WAITとV$SESSION_EVENTビュー.DBAはまた、Oracle 10 gデータベースでは、この2つのビューで新しい待機タイプを見つけることができます.以前のセッションにログインしてリソースの大部分を消費したセッションを特定する必要がある場合は、次のクエリを使用します.次の例は、真夜中の12時から5時までのデータベース・アクティビティを検索し、ユーザーのI/O待機を含むものです.select sess_id,
username,
program,
wait_event,
sess_time,
round(100 * (sess_time / total_time),2) pct_time_waited
from
(select a.session_id sess_id,
decode(session_type,'background',session_type,c.username) username,
a.program program,
b.name wait_event,
sum(a.time_waited) sess_time
from sys.v_$active_session_history a,
sys.v_$event_name b,
sys.dba_users c
where a.event# = b.event# and
a.user_id = c.user_id and
sample_time > '22-JAN-07 12:00:00 AM' and
sample_time < '22-JAN-07 05:00:00 AM' and
b.wait_class = 'User I/O'
group by a.session_id,
decode(session_type,'background',session_type,c.username),
a.program,
b.name),