web-dev-qa-db-ja.com

DBA_HIST_SQLSTATに行が追加されるのはいつですか。

dba_hist_sqlstatビューに追加のレコードが必要な基準がわかりません。 sql_idおよびsnap_idごとに最大で1つのエントリがあると予想しました。つまり、レコードを返さない次のステートメントです。

select 
  count(*),
  snap_id,
  sql_id
from
  dba_hist_sqlstat
group by
  snap_id,
  sql_id
having
  count(*) > 1
order by
  count(*) desc;

まだ、それは不可能であることを示す多くのレコードを返しますが、通常は、同じsqlステートメントがsnap_idごとに複数回キャプチャされます。

さらに、SQLとスナップ期間ごとに複数のレコードがある場合、このビュー内のdelta列をどのように解釈しますか?ドキュメントには次のように書かれています。

デルタ値は、DBA_HIST_SNAPSHOTビューのBEGIN_INTERVAL_TIMEからEND_INTERVAL_TIMEまでの統計の値です。

これは私にはあまり意味がありません。

更新Justinのコメントによる:これはRAC環境ではないため、group by snap_id, sql_id, dbid, instance_numberであっても、クエリは複数のレコードを返しますsnap_idおよびsql_idごと。

2

Oracleは、SQL実行プラン/ sql_idごとにSQL統計を収集します(plan_hash_value)、特定のsql_id

これが実際に当てはまることを確認するには、このクエリは0行を返す必要があります。

select 
  count(*),
  snap_id,
  sql_id,
  plan_hash_value
from
  dba_hist_sqlstat
group by
  snap_id,
  sql_id,
  plan_hash_value
having
  count(*) > 1
order by
  count(*) desc;
4
Philᵀᴹ