2023年1月19日木曜日

ORACLE AWRレポート 取得

$ sqlplus / as sysdba
SQL> @?/rdbms/admin/awrrpt
Enter value for report_type: html
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 件のコメント:

コメントを投稿

zabbix7 amazon linux2023 インストール postgres15

【postgres】 dnf -y install postgresql15-server postgresql15-server-devel postgresql-setup initdb passwd postgres vi `find / -name pg_hba.con...