私は(Java)Webアプリケーションを持っています。もちろん、それはOracleデータベースに対して多くのクエリ(選択、挿入、更新、削除)を実行します。
過去7日間について次のことを調べたい:
SQLQuery Times-Executed Average-Resp-Time Average-Rows-Returned
====================================================================================
SELECT whatever 981 330ms 1201
UPDATE whatever 45 99ms 0
これはオラクルが私に与えることができるものですか?もしそうなら、どうすれば入手できますか? Oracleでない場合、JDBCドライバーを確認する必要がありますか?
注:AWRデータの使用必須Diagnostics Pack ライセンスオプションを購入する必要があります。以下のクエリを実行することは可能かもしれません必要なライセンスがなくても。これらを使用する前に、必ずDBA /ライセンスマネージャーに確認してください。
自動ワークロードリポジトリ(AWR)には、データベースでのアクティビティの詳細が含まれています。これらは、さまざまなdba_hist*
ビューに格納されます。
お探しの種類の情報は、主にdba_hist_sqlstat
ビューで利用できます。これをdba_hist_snapshot
に参加させると、特定の期間に利用可能な情報を取得できます。
select *
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
このビューには、特定のスナップ(期間)の増加を示すさまざまな*_elapsed
列が保持されます。例えば。:
時間はマイクロ秒単位です。これらを組み合わせて、平均時間/実行統計などを取得できます。たとえば、これは特定のSQLステートメントの平均時間/実行を示します。
select sql_id, sum(t.elapsed_time_delta/1000000)/sum(t.executions_delta)
from dba_hist_sqlstat t, dba_hist_snapshot s
where t.snap_id = s.snap_id
and t.dbid = s.dbid
and t.instance_number = s.instance_number
and s.begin_interval_time between trunc(sysdate)-1 and trunc(sysdate) -- yesterday's stats
group by sql_id
sql_id
は、SQL自体のテキストのハッシュです。実際のステートメントは次の場所から見つけることができます。
select * from dba_hist_sqltext where sql_id = :sqlid
「最大消費」ステートメントのみがAWRに保持されることに注意してください。したがって、関心のあるクエリが最も遅く、ほとんど実行されず、ほとんどのディスクアクセスなどでない場合、AWRデータに含まれていない可能性があります。目的のsql_idを「カラーリング」することで、これを回避できます。これにより、保持期間が設定されている限り、AWRにとどまります。これを実行するには、次のコマンドを実行します。
exec DBMS_WORKLOAD_REPOSITORY.ADD_COLORED_SQL(:sqlid);
ある期間内のシステムの概要(「最も重い」SQLステートメントを含む)だけが必要な場合は、AWRレポート自体がこれを提供します。 Oracle-base でこれの紹介を見つけることができます。