SQL> @?/rdbms/admin/awrrpt
Enter value for report_type: html
System altered.
SQL> select DBID, INSTANCE_NUMBER, SNAP_ID, count(SQL_ID) from WRH$_SQLSTAT group by DBID, INSTANCE_NUMBER, SNAP_ID order by 2, 1, 3 ;
DBID INSTANCE_NUMBER SNAP_ID COUNT(SQL_ID)
---------- --------------- ---------- -------------
3531627254 1 70355 115
3531627254 1 70356 111
3531627254 1 70357 100
・
・
3531627254 1 70583 94
229 rows selected.
【解決】
SQL> ALTER SYSTEM SET CONTROL_MANAGEMENT_PACK_ACCESS='DIAGNOSTIC+TUNING' SCOPE=MEMORY SID=‘sidxxxx’;
SQL> show parameter control_management_pack_access
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_management_pack_access string DIAGNOSTIC+TUNING → Noneになっていた。
Enter value for num_days: 7
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 69752
Begin Snapshot Id specified: 69752
Enter value for end_snap: 69910
End Snapshot Id specified: 69910
Enter value for report_name: return
Using the report name awrrpt_2_69752_69910.html
【diffをとる場合】
SQL> @?/rdbms/admin/awrddrpt
期間1、期間2を入力
【AWRレポートがとれない。】
SQL> show parameter
control_management_pack_access string NONE
timed_statistics boolean TRUE
statistics_level string TYPICAL
_object_statistics boolean TRUE
■ UNUSABLEががないか?
SQL> select index_name,partition_name, status from user_ind_partitions where
status = 'UNUSABLE' order by index_name;
→ 全て、USABLE
■_object_statistics TRUEで無かった場合。
sql> alter system set "_object_statistics"=TRUE scope=both;System altered.
SQL> select DBID, INSTANCE_NUMBER, SNAP_ID, count(SQL_ID) from WRH$_SQLSTAT group by DBID, INSTANCE_NUMBER, SNAP_ID order by 2, 1, 3 ;
DBID INSTANCE_NUMBER SNAP_ID COUNT(SQL_ID)
---------- --------------- ---------- -------------
3531627254 1 70355 115
3531627254 1 70356 111
3531627254 1 70357 100
・
・
3531627254 1 70583 94
229 rows selected.
【解決】
SQL> ALTER SYSTEM SET CONTROL_MANAGEMENT_PACK_ACCESS='DIAGNOSTIC+TUNING' SCOPE=MEMORY SID=‘sidxxxx’;
SQL> show parameter control_management_pack_access
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_management_pack_access string DIAGNOSTIC+TUNING → Noneになっていた。
【複数のAWRレポートを一括取得する。】
$ su - oracle
$ mkdir -p AWR/Tools/logs
$ vi /home/oracle/AWR/Tools/get_awr_base.sql <<__EOF__
set head off
set feed off
col min_snap new_value min_snap
col max_snap new_value max_snap
select max(SNAP_ID) min_snap from dba_hist_snapshot where INSTANCE_NUMBER=(select INSTANCE_NUMBER from v$instance) and
END_INTERVAL_TIME <= to_timestamp('&1'||':59','yyyy/mm/dd_hh24:mi:ss') ;
select max(SNAP_ID) max_snap from dba_hist_snapshot where INSTANCE_NUMBER=(select INSTANCE_NUMBER from v$instance) and
END_INTERVAL_TIME <= to_timestamp('&2'||':59','yyyy/mm/dd_hh24:mi:ss') ;
spool /home/oracle/AWR/Tools/get_awr.sql
select
'define report_type=html' || chr(10) ||
'define num_days=1' || chr(10) ||
'define begin_snap=' || SNAP_ID || chr(10) ||
'define end_snap=' || (SNAP_ID + 1)|| chr(10) ||
'define report_name=/home/oracle/AWR/Tools/logs/awr_' || instance_name || '_' || to_char(END_INTERVAL_TIME,'yyyymmdd_hh24mi') || '.html' || chr(10) ||
'@?/rdbms/admin/awrrpt.sql' || chr(10) ||
'execute DBMS_LOCK.SLEEP(1)' ||chr(10)
from DBA_HIST_SNAPSHOT s,v$instance i
where SNAP_ID between &min_snap and &max_snap -1
and s.INSTANCE_NUMBER = i.INSTANCE_NUMBER
order by SNAP_ID;
spool off
@/home/oracle/AWR/Tools/get_awr.sql
__EOF__
SQL> @get_awr_base.sql 2023/2/17_10:00 2023/2/21_09:00
SQL統計 | 意味と使用方法 |
SQL ordered by Elapsed Time | 経過時間が長いSQL(項目の中の%CPUと%IOで、CPUとI/Oのどちらの割合が大きいか確認できる) 時間が掛っているSQLなので改善の対象になるが、これだけで最も影響が大きいかまでは判断できない(待機の割合が多いSQLを探す必要がある)。 |
SQL ordered by CPU Time | サーバー・プロセスのCPU時間が多いSQL(経過時間に対する比率が%CPU) CPU Timeの割合が多い場合には、これと処理行数が上位のSQLの実行計画を確認する(処理行数を削減することで改善できるかを確認する)。 |
SQL ordered by User I/O Wait Time | サーバー・プロセスのI/O待機時間が長いSQL(経過時間に対する比率が%IO) TEMPのI/O時間の割合が多い場合には、これの上位のSQLを確認する(実行計画のどこでTEMPを使用しているかは、後で説明するDBMS_XPLAN.DISPLAY_CURSOR関数やリアルタイムSQL監視で確認できる)。 |
SQL ordered by Gets | 論理I/O(DBバッファ・キャッシュ経由の論理I/O)が多いSQL バッファ・キャッシュ経由のI/Oが多い場合は、これの値も確認して、キャッシュ・ヒット率の問題で時間が長いのではないことを確認する。 |
SQL ordered by Reads | すべて(フラッシュ・キャッシュ+非フラッシュ・キャッシュ)のDBブロックの読込みが多いSQL DBブロックのI/Oが多い場合は、これとSQL ordered by User I/O Wait Timeが上位のSQLの実行計画を確認する(I/O時間だけでなく読込み数も見ることで、読込み数を削減することで改善できるかを確認する)。 |
SQL ordered by Physical Reads (UnOptimized) | 非フラッシュ・キャッシュからのDBブロックの読込みが多いSQL(Oracle Database 11gR2から) フラッシュ・キャッシュがない場合はSQL ordered by Readsと同じ。 |
SQL ordered by Executions | 実行回数が多いSQL(全体と1回あたりの処理行数が分かる) CPU TimeやダイレクトI/Oが多い場合には、これの処理行数が多いSQLも確認する。 |
SQL ordered by Parse Calls | 解析コール数(ハード及びソフト・パース)が多いSQL cursor: pin Sが多い場合には、ソフト・パースが多いことなので、これの上位のSQLを確認して、同時実行数の削減を検討する。cursor: pin X/cursor: mutex X/library cache: mutex ..が多い場合には、ハード・パースが多いことなので、これとSQL ordered by Versoion Countが上位のSQLを確認して、ハード・パースの数を削減する(共有メモリを増やす、カーソルの共有化などを行う)。 |
SQL ordered by Sharable Memory | 共有メモリ使用量が多いSQL(デフォルトは1Mバイト以上) 複雑なSQLや子カーソルが多いために多く消費しているので、共有メモリが不足するような場合には削減を検討する。 |
SQL ordered by Version Count | 子カーソル(同一SQLで実行計画が異なる)が多いSQL cursor: mutex ../library cache: mutex ..が多い場合は、これの上位のSQLを確認して、子カーソルの削減を検討する。 |
SQL ordered by Cluster Wait Time | クラスタ待機時間が多いSQL(RACキャッシュ・フュージョン関係) DBブロック競合なので、無駄なブロックにアクセスしない、パーティション化などを行う。 |
0 件のコメント:
コメントを投稿