web-dev-qa-db-ja.com

Oracleが実行しているクエリ、頻度、時間はどれくらいですか?

私は(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ドライバーを確認する必要がありますか?

5
Jasper

: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列が保持されます。例えば。:

  • ELAPSED_TIME_DELTA
  • CPU_TIME_DELTA
  • ROWS_PROCESSED_DELTA
  • BUFFER_GETS_DELTA
  • DISK_READS_DELTA
  • PARSE_CALLS_DELTA
  • EXECUTIONS_DELTA

時間はマイクロ秒単位です。これらを組み合わせて、平均時間/実行統計などを取得できます。たとえば、これは特定の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 でこれの紹介を見つけることができます。

10
Chris Saxon