Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

簡単!AWRをEXCELピボットグラフで分析しよう♪

5.676 visualizaciones

Publicado el

Jpoug 15min#3 20170117
http://www.jpoug.org/2016/11/17/in15m3

Publicado en: Datos y análisis
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

簡単!AWRをEXCELピボットグラフで分析しよう♪

  1. 1. 簡単! AWRをEXCELピボットグラフで分析しよう 畔勝 洋平 JPOUG in 15 minutes #3 2017.01.17@オラクル青山センター ?
  2. 2. 自己紹介 • 畔勝 洋平(あぜかつ ようへい) • 日本オラクルに2010年中途入社 ネットベンチャー→フリーランス→ドワンゴ→日本オラクル • Webデザイナー(HTML・JSコーダー)としてキャリアをス タート • DBコンサルとしてミッションクリティカルシステムを支援 • トラブルシューティングではOSカーネル(Linux/商用UNIX など)に Deep Dive することも • 好きなパック: Diagnostics Pack、Tuning Pack
  3. 3. 自己紹介 Twitter: @yoheia Blog: http://d.hatena.ne.jp/yohei-a/ 著書(共著):絵で見てわかるITインフラの仕組み JPOUG(Japan Oracle User Group)の運営に関わってます 2013年ジュンク堂池袋本店コンピュータ書 売上冊数ランキング第5位 http://compbook.g.hatena.ne.jp/compbook/20140107/p1 カバーを裏返すとシステム の全貌がわかる解剖図
  4. 4. 目次 • Oracle Database 性能分析の歴史 • ASHとAWRのアーキテクチャ • ASHで取得される情報 • 便利なDBA_HISTビュー • ケーススタディ 1. AWRレポートをEXCELピボットグラフで分析する 2. DBA_HIST_SQLSTAT でSQL性能傾向分析 3. DBA_HIST_ASH でPGA大量消費SQL特定 • SQLHCのススメ
  5. 5. Oracle Database 性能分析の歴史 https://www.ogh.nl/downloads/ogh20080410_graham_wood.pdf 草創期のチューニングメソッド 時間ベースのチューニングメソッド 今回お話する範囲
  6. 6. Oracle Database 性能分析の歴史 https://www.ogh.nl/downloads/ogh20080410_graham_wood.pdf DB Time メソッドは全領域をカバー
  7. 7. Oracle Database 性能分析の歴史 http://www.slideshare.net/khailey/history-of-database-monitoring Kyle Hailey AWRやASHの設計に関わった人
  8. 8. Oracle Database 性能分析の歴史? http http://www.slideshare.net/khailey/history-of-database-monitoring Kyle Hailey
  9. 9. Oracle Database 性能分析の歴史? https://aws.amazon.com/jp/blogs/aws/amazon-aurora-update-postgresql-compatibility/
  10. 10. ASHとAWRのアーキテクチャ http://www.nocoug.org/download/2013-08/NOCOUG_201308_ASH_Architecture_and_Advanced%20Usage.pdf • 1秒間隔のサンプリングをメモリに保持(V$ASH)、10秒間隔のサンプ リングをディスクに永続化(DBA_HIST_ASH) • AWR(R=Repository)にはAWRレポートの元データである DBA_HIST_* ビューは宝の山 1秒間隔 10秒間隔 デフォルト 7日間保持 AWRの”R”はReportで はなくRepositoryの略
  11. 11. ASHで取得される情報 https://sites.google.com/site/embtdbo/wait-event-documentation/ash---active-session-history サンプリング情報から瞬間的な性能問題の調査が可能 11.2からはSQL処理時間と内訳 (CPU時間/待機時間)、PGAや 一時領表域使用量も確認できる
  12. 12. 便利な DBA_HIST ビュー オラクル・コンサルが語る!プロフェッショナルのデータベース性能分析手法 AWR/ASHを活用した分析事例 http://www.oracle.com/webfolder/technetwork/jp/ondemand/ddd2014/A1-4.pdf • AWRのDBA_HISTビューに自動的に履歴が記録されているので、性能 問題が発生した場合、過去の情報を分析することが可能 • デフォルトで1週間分保持されているが、1ヶ月以上がおススメ • 10分間隔などスナップショット取得間隔を短くするとAWRのみで深堀 調査がしやすくなる SQLで抽出して、 EXCELピボットグラ フで分析
  13. 13. DBA_HIST ビュー Oracle® Databaseリファレンス 12cリリース2 (12.2) E72905-01 http://docs.oracle.com/cd/E82638_01/REFRN/index.htm DBA_HIST_ACTIVE_SESS_HISTORY DBA_HIST_APPLY_SUMMARY DBA_HIST_ASH_SNAPSHOT DBA_HIST_BASELINE_DETAILS DBA_HIST_BASELINE_METADATA DBA_HIST_BASELINE_TEMPLATE DBA_HIST_BASELINE DBA_HIST_BG_EVENT_SUMMARY DBA_HIST_BUFFER_POOL_STAT DBA_HIST_BUFFERED_QUEUES DBA_HIST_BUFFERED_SUBSCRIBERS DBA_HIST_CAPTURE DBA_HIST_CHANNEL_WAITS DBA_HIST_CLUSTER_INTERCON DBA_HIST_COLORED_SQL DBA_HIST_COMP_IOSTAT DBA_HIST_CON_SYS_TIME_MODEL DBA_HIST_CON_SYSMETRIC_HIST DBA_HIST_CON_SYSMETRIC_SUMM DBA_HIST_CON_SYSSTAT DBA_HIST_CON_SYSTEM_EVENT DBA_HIST_CR_BLOCK_SERVER DBA_HIST_CURRENT_BLOCK_SERVER DBA_HIST_DATABASE_INSTANCE DBA_HIST_DATAFILE DBA_HIST_DB_CACHE_ADVICE DBA_HIST_DISPATCHER DBA_HIST_DLM_MISC DBA_HIST_DYN_REMASTER_STATS DBA_HIST_ENQUEUE_STAT DBA_HIST_EVENT_HISTOGRAM (以下略) トラブルの種類に応じて製品マニュアルの索引で使えそうなビューを探す
  14. 14. ケーススタディ1 AWRレポートをEXCELピボットグラフで分析
  15. 15. AWRレポートをCSVに変換 • Python スクリプトをダウンロード $ wget https://raw.githubusercontent.com/yasushiyy/awr2csv/master/awrhtml2csv.py • AWRレポートを CSV に変換 $ python awrhtml2csv.py awr/*.html Processing awr/db01-20160705_010019-00041276-00041277.html... Processing awr/db01-20160705_020014-00041277-00041278.html... Processing awr/db01-20160705_030026-00041278-00041279.html... (中略) Processing awr/db02-20160713_130004-00041480-00041481.html... Created: seg_phys_reads.csv Created: sql_reads.csv (中略) Created: load_profile.csv Created: parameters.csv Created: sql_cluster.csv Created: seg_phys_writes.csv 複数のAWRレポートがセクション ごとに1つのCSVファイルに
  16. 16. CSVをEXCELで開いて CSV を EXCEL で開き、 挿入- ピボットテーブル – ピボットグラフ events_topn.csv
  17. 17. EXCELピボットグラフ作成 0 2,000 4,000 6,000 8,000 10,000 12,000 14,000 16,000 18,000 20,000 0 1 2 3 4 5 6 7 8 9 1011121314151617181920212223 0 1 2 3 4 5 6 7 8 9 1011121314151617181920212223 7 7 7 7 2016 2016 1 2 local write wait reliable message read by other session directpath read temp latch row cache objects cell list of blocks physical read cell smart table scan cell multiblock physical read DBCPU cell single block physical read インスタンス番号 年 月 日 秒 時間 events_topn.csv → events_topn.xlsx ピボットグラフの軸トップテンでフィルタ 降順ソート グラフの軸がポイント、ソートやフィルタを活用して分析
  18. 18. 軸を工夫して傾向を比較 横軸を時刻(0~24時)、日ごとに線グラフにして傾向比較 0 20 40 60 80 100 120 140 160 180 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2016 - 7 - 5 - DB Time(s) 2016 - 7 - 6 - DB Time(s) 2016 - 7 - 7 - DB Time(s) 2016 - 7 - 8 - DB Time(s) 2016 - 7 - 9 - DB Time(s) 2016 - 7 - 10 - DB Time(s) 2016 - 7 - 11 - DB Time(s) 2016 - 7 - 12 - DB Time(s) 2016 - 7 - 13 - DB Time(s) 時刻 秒 DB Time の合計 (日別)
  19. 19. (参考)awrcsv.pl by Kyle Hailey https://github.com/khailey/awrcsv awrcsv.pl takes a collection of TEXT BASED (NOT HTML!) AWR / STATSPACK reports and uses meta-data entries stored in a meta-data directory to determine how to extract sections of data from each of the AWR files and produce CSV files for use with a spreadsheet application. The output records are written in descending order of the sum of the field values. In most cases this is desired for "Top N" type analysis.
  20. 20. ケーススタディ2 DBA_HIST_SQLSTATでSQL性能傾向分析
  21. 21. DBA_HIST_SQLSTAT 取得SQL set pagesize 50000 set linesize 32767 set trimout on set trimspool on set termout off set feedback off set colsep '|' alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'; alter session set NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS'; col spool_file_name new_value spool_file_name for a100 select 'dba_hist_sqlstat_'|| to_char(sysdate,'YYYY-MM-DD_HH24MISS')||'.csv' spool_file_name from dual; spool &spool_file_name select b.begin_interval_time, b.end_interval_time, a.* from dba_hist_sqlstat a, dba_hist_snapshot b where a.dbid = b.dbid and a.instance_number = b.instance_number and a.snap_id = b.snap_id and b.begin_interval_time between to_timestamp('2016-11-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and to_timestamp('2016-12-10 00:00:00', 'YYYY-MM-DD HH24:MI:SS'); spool off DBA_HISTビューは基本的に時刻を持ってない ので、DBA_HIST_SNAPSHOTと結合して {BEGIN|END}_INTERVAL_TIMEを取得する https://github.com/yoheia/yoheia/blob/master/oracle/sql/hist_sqlstat.sql
  22. 22. 無駄な空白を除去 $ perl -i.org -pe 's/¥s{2,}//g' dash_2016-11-30_154240.csv $ ls -lh total 46M -rw-r--r-- 1 oracle oinstall 9.1M Jan 17 11:29 dash_2016-11-30_154240.csv -rw-r--r-- 1 oracle oinstall 37M Jan 17 11:27 dash_2016-11-30_154240.csv.org $ head -5 dash_2016-11-30_154240.csv (中略) SNAP_ID| DBID|INSTANCE_NUMBER| SAMPLE_ID|SAMPLE_TIME |SESSION_ID|SESSION_SERIAL#|SESSION_TY| FLAGS| USER_ID|SQL_ID |I|SQL_CHILD_NUMBER|SQL_OPCODE|SQL_OPNAME |FORCE_MATCHING_SIGNATURE|TOP_LEVEL_SQL|TOP_LEVEL_SQL_OPCODE|SQL_PLAN_HASH_VALUE|SQL_PLAN_LINE_ ID|SQL_PLAN_OPERATION |SQL_PLAN_OPTIONS … $ head -5 dash_2016-11-30_154240.csv (中略) SNAP_ID|DBID|INSTANCE_NUMBER|SAMPLE_ID|SAMPLE_TIME|SESSION_ID|SESSION_SERIAL#|SESSION_TY|FLAGS| USER_ID|SQL_ID|I|SQL_CHILD_NUMBER|SQL_OPCODE|SQL_OPNAME|FORCE_MATCHING_SIGNATURE|TOP_LEVEL_SQL| TOP_LEVEL_SQL_OPCODE|SQL_PLAN_HASH_VALUE|SQL_PLAN_LINE_ID|SQL_PLAN_OPERATION … ファイルサイズを小さくし てEXCELでの操作を軽く スペース除去 Perlワンライナー集 http://d.hatena.ne.jp/yohei-a/20150711/1436623390
  23. 23. SQL実行時間とその内訳 0 2,000 4,000 6,000 8,000 10,000 12,000 14,000 16,000 SQL実行時間(1回当り) 平均 / IOWAIT_PER_EXEC 平均 / CPU_TIME_PER_EXEC 平均 / ELAPSED_TIME_PER_EXEC *_DELTA / EXECUTIONS_DELTA で1回当りを算出 DBA_HIST_SQLSTAT SQL実行時間は大きく変動し、 I/O待機が大半を占めている
  24. 24. I/O待機が長い理由はシンプルに… DBA_HIST_SQLSTAT 0.00 10,000.00 20,000.00 30,000.00 40,000.00 50,000.00 60,000.00 0 1 2 3 4 5 6 7 百万 百万 論理・物理読込量(1回当り) 平均 / BUFFER_GETS_PER_EXEC 平均 / IO_INTERCONNECT_BYTES_PER_EXEC 遅い時間帯はディス クI/O量が多い *_DELTA / EXECUTIONS_DELTA で1回当りを算出
  25. 25. ケーススタディ3 DBA_HIST_ASHでPGA大量消費SQL特定
  26. 26. DBA_HIST_ASH 取得SQL set pagesize 50000 set linesize 5000 set trimout on set trimspool on set termout off set feedback off set colsep '|' alter session set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; alter session set NLS_TIMESTAMP_FORMAT='YYYY/MM/DD HH24:MI:SS'; col spool_file_name new_value spool_file_name for a100 select 'dash_'|| to_char(sysdate,'YYYY-MM-DD_HH24MISS') || '.csv' spool_file_name from dual; spool &spool_file_name SELECT * FROM DBA_HIST_ACTIVE_SESS_HISTORY WHERE SAMPLE_TIME BETWEEN TO_TIMESTAMP('2016-11-30 9:00:00', 'YYYY/MM/DD HH24:MI:SS') AND TO_TIMESTAMP('2016-11-30 10:00:00', 'YYYY/MM/DD HH24:MI:SS'); spool off 時刻が秒単位まで表示 されるようにする https://github.com/yoheia/yoheia/blob/master/oracle/sql/dash.sql
  27. 27. 合計PGA使用量を見る 0 20 40 60 80 100 120 140 0 5 10 15 20 25 30 35 2016/11/309:00 2016/11/309:00 2016/11/309:42 2016/11/309:44 2016/11/309:45 2016/11/309:45 2016/11/309:46 2016/11/309:47 2016/11/309:47 2016/11/309:48 2016/11/309:48 2016/11/309:49 2016/11/309:49 2016/11/309:50 2016/11/309:50 2016/11/309:51 2016/11/309:51 2016/11/309:52 2016/11/309:53 2016/11/309:53 2016/11/309:54 2016/11/309:54 2016/11/309:55 2016/11/309:55 2016/11/309:56 2016/11/309:56 2016/11/309:57 2016/11/309:57 2016/11/309:58 2016/11/309:58 2016/11/309:59 1 GB 合計 / PGA_ALLOCATED データの個数 / SESSION_ID 値 INSTANCE_NUMBER SAMPLE_TIME 合計 / PGA_ALLOCATED データの個数 / SESSION_ID • OSのメモリが枯渇してスラッシング(スワップア ウト/スワップイン)が発生 • DBA_HIST_ASH の PGA_ALLOCATED から犯人 を捜す アクティブセッション数が100以上に増 え、PGA使用量が25GB以上に増加 インスタンス番号 時刻 PGA 使用量 セッション数
  28. 28. 0 5 10 15 20 25 30 2016/11/309:00 2016/11/309:00 2016/11/309:00 2016/11/309:00 2016/11/309:42 2016/11/309:42 2016/11/309:42 2016/11/309:42 2016/11/309:42 2016/11/309:44 2016/11/309:44 2016/11/309:44 2016/11/309:45 2016/11/309:45 2016/11/309:45 2016/11/309:45 2016/11/309:45 2016/11/309:45 2016/11/309:46 2016/11/309:46 2016/11/309:46 2016/11/309:47 2016/11/309:47 2016/11/309:47 2016/11/309:47 2016/11/309:47 2016/11/309:47 2016/11/309:48 2016/11/309:48 2016/11/309:48 2016/11/309:48 2016/11/309:48 2016/11/309:49 2016/11/309:49 2016/11/309:49 2016/11/309:49 2016/11/309:49 2016/11/309:49 1 GB 10mkc4tbj5z0m ahmd18cmprt0y 39a27jyxnqy9c fkaymf4znuj3k 3qkr98w37km7s (空白) 78tjqphvwp4rk 5k2b3qsy3b30r 0yu3bnzwjajb9 42j0p0zh49nhd SQL_ID INSTANCE_NUMBER SAMPLE_TIME 合計 / PGA_ALLOCATED PGAを大量消費しているSQLを特定 SQL_ID ごとに集計すると2本のSQLが犯人である ことがわかる インスタンス番号 時刻 PGA 使用量 SQL_ID 20GB 5GB 合計で20GB、5GBのPGAを 使用しているSQLが2本いる
  29. 29. 0 500 1,000 1,500 2,000 2,500 3,000 3,500 4,000 0yu3bnzwjajb9 42j0p0zh49nhd 939 - HASH JOIN 988 - HASH JOIN 951 - INDEX 1000 - INDEX 67 - INDEX 936 - INDEX 70 - INDEX 66 - TABLE ACCESS 62 - TABLE ACCESS 50 - INDEX 932 - WINDOW SQL_PLAN_LINE_ID SQL_PLAN_OPERATION SQL_ID データの個数 / SQL_PLAN_LINE_ID 実行計画のボトルネックを特定 ASH で SQL_PLAN_LINE_ID が頻出しているのが実行計画でボトルネッ ク(時間を要している)になっている箇所 両SQLとも HASH JOIN の 出現回数が多い
  30. 30. SQLHCのススメ
  31. 31. SQLHCのススメ SQL チューニング・ヘルスチェック・スクリプト (SQLHC) (DocID 1542531.1) • SQLチューニング・ヘルス・チェック・スクリプト(SQLHC)は My Oracle Support で提供されているPL/SQLスクリプト • DocID: 1542531.1 から sqlhc.zip をダウンロード・解凍して、sqlplus で SQL_ID を指定して実行 • 指定した SQL_ID の実行計画、実行時間、参照している表・索引定義、 統計情報、実行計画のボトルネック、SQL監視、Optimizer(10053)ト レース などを V$ASH、DBA_HIST_ASH、DBA_HIST_SQLSTAT など からまるっととってくれる便利スクリプト $ unzip sqlhc.zip $ cd sqlhc $ ls sqldx.sql sqlhc.sql sqlhcxec.sql $ sqlplus / as sysdba SQL> @sqlhc.sql T djkbyr8vkc64h SQL> !ls sqlhc_20161209_183330_ djkbyr8vkc64h.zip Tuning Pack有: T Diagnostic Pack有:D 何もなない:N
  32. 32. SQLHCのススメ 1秒間隔のサンプリングで、 110回ヒットしている Plan Line ID 20 で時間を 要している Active Session History by Plan Line や AWR Active Session History by Plan で実行計画のボトルネックの特定が可能(どの操作で時間がかかってい るか) sqlhc_YYYYMMDD_HHMMSS_<SQLID>_2_diagnostics.html
  33. 33. SQLHCのススメ 実行計画の時間がかかっている行を見てみる sqlhc_YYYYMMDD_HHMMSS_<SQLID>_3_execution_plans.html ボトルネックの Plan Line ID 20 はココ
  34. 34. ご清聴ありがとうございました

×