sql >> データベース >  >> RDS >> Oracle

R12.2/R12.1アップグレードのためのトップAWR有用なクエリ

    R12.1 / R12.2はかなり大きく、時間のかかるアップグレードです。 R12.2アップグレードのパフォーマンスの問題を解決するには、長時間実行されているSQLをすべて見つける必要があります。各反復には多くの時間がかかるため、重要です。より少ない反復でパフォーマンスの問題を見つけ、それに応じて修正しようとしました

    R12.2アップグレードのパフォーマンスの問題を解決するためのAWRに役立つ上位のクエリは次のとおりです

    SQLがまだメモリ(カーソルキャッシュ)にある場合は、以下を使用して、AWRにまだ書き込まれていない可能性のある長時間実行されているSQLを特定できます(最後のスナップショット)

     SELECT * FROM(SELECT ss.sql_id、ROUND(SUM(ss.elapsed_time / 100000)、0)経過時間_秒、ROUND(SUM(ss.cpu_time / 100000)、0)cpu_time_secs、SUM(ss.disk_reads)disk_reads、 SUM(ss.direct_writes)direct_writes、SUM(ss.buffer_gets)buffer_gets、SUM(ss.px_servers_executions)px_server_execs、SUM(ss.rows_processed)rows_processed、SUM(ss.executions)executions、SUM(ss.application_wait_time) ss.sharable_mem)sharable_mem、SUM(ss.total_sharable_mem)total_sharable_mem FROM v $ sqlstats ss GROUP BY ss.sql_id ORDER BY 2 DESC)WHERE ROWNUM <=100; 

    次のSQLスクリプトは、2つのAWRスナップショット間で最も長く実行されているSQLを報告します

     SELECT * FROM(SELECT dhs.sql_id、ROUND(SUM(dhs.elapsed_time_delta / 100000)、0)lapsed_time_secs、ROUND(SUM(dhs.cpu_time_delta / 1000000)、0)cpu_time_secs、SUM(dhs.disk_reads_delta)disk_reads、 SUM(dhs.buffer_gets_delta)buffer_gets、SUM(dhs.px_servers_execs_delta)px_server_execs、SUM(dhs.rows_processed_delta)rows_processed、SUM(dhs.executions_delta)executions、ROUND(SUM(dhs.iowait_delta / 100000_)、0 (dhs.clwait_delta / 100000)、0)clwait_secs、ROUND(SUM(dhs.ccwait_delta / 100000)、0)ccwait_secs、ROUND(SUM(dhs.apwait_delta / 1000000)、0)apwait_secs FROM dba_hist_sqlstat dhs、v $ database d WHERE dhs.dbid =d.dbid AND snap_id>&begin_snap and snap_id <=&end_snap GROUP BY dhs.sql_id ORDER BY 2 DESC)WHERE ROWNUM <=100; 

    ここで、&begin_snapと&end_snapは開始スナップショットIDと終了スナップショットIDです。
    このステートメントの出力は次のようになります。

     SQL_ID ELAPSED_TIME_SECS CPU_TIME_SECSDISK_READSBUFFER_GETS…。 ------------- ----------------- --------------- ----- ---------------…。 5vaxut40xbrmr 367440 42999348382443795838289…。 943ra4b7zg28x 264369 170788441127562033013…。 fkkrk9frwqfdr 70370 64483599284469639133…。 4847s6dt6sds9 68298 3889671255713327384554…。 2k3uw8n473r30 63600 2740220043712587615960…。

    注:経過時間は、ジョブのすべてのワーカーの最大経過時間です。

    Enterprise Managerを使用して、発生した高価なSQLを特定することもできます。

    長時間実行SQLの表示カーソルレポートを取得する

    この場合、STATISTICS_LEVEL=ALLおよび_rowsource_execution_statistics=TRUEです。すべての情報を取得するには、遅延なしで実行する必要があります。そうしないと、これらの情報がSGAからフラッシュされます

    SETページ0SET行300SETLONG 10000SET LONGCHUNKSIZE 10000 SPOOL  .txt SELECT * FROM TABLE(dbms_xplan.display_cursor(''、NULL、'ALL + ALLSTATS'));スプーリングオフ; 

    SQLがメモリに存在しないが、AWRに存在する場合は、代わりにDisplayAWRレポートを使用してください。

    SETページ0SET行300SETLONG 10000 SET LONGCHUNKSIZE 10000 SPOOL .txt SELECT * FROM TABLE(dbms_xplan.display_awr(''、NULL、NULL、'ALL'));スプーリングオフ; 

    注:AWRの表示レポート(DBMS_XPLAN.DISPLAY_AWR)は、実績をレポートしないことに注意してください。+ ALLSTATSオプションがなく、AWRに格納されている実行プランステップの実際の統計はありません。

    重要な注意:表示カーソルとAWRレポートには、sql_text(最初の1000文字)のみが表示され、sql_fulltextは表示されません。したがって、必要に応じて、次のSQLスクリプトを実行して、完全なSQLテキストを取得します

    SETページ0SET行300SETLONG 10000 SET LONGCHUNKSIZE 10000 SPOOL  .txt SELECT sql_id、sql_text、sql_fulltext FROM v $ SQL WHERE sql_id ='';スプーリングオフ; 

    並列クエリ/DMLを使用してSQLのSQLモニターレポートを取得する

    これの主な利点は、並列SQL/DMLが計画の各段階と並列スレーブでどのように実行されるかをよく理解できることです。

     set Trimspool on Set Trim on Set Pages 0 set long 10000000 set longchunksize 10000000 set linesize 200 set termout off spool sql_monitor_for_  .htm variable my_rept CLOB; BEGIN:my_rept:=dbms_sqltune.report_sql_monitor(sql_id =>''、report_level =>'ALL'、type =>'HTML');終わり; / print:my_reptスプールオフ; 
    にタームアウトを設定します

    ここで、&begin_snapと&end_snapは、開始スナップショットIDと終了スナップショットIDです。

    特定のSQLがいつ実行されたかを確認する方法

     SELECT dhs.sql_id、dsn.snap_id、dsn.begin_interval_time、dsn.end_interval_time、ROUND(SUM(dhs.elapsed_time_delta / 1000000)、0)elapsed_time_secs FROM dba_hist_sqlstat dhs、v $ database d、dba_hist_snap d.dbid AND dsn.snap_id =dhs.snap_id AND dsn.dbid =dhs.dbid AND dsn.instance_number =dhs.instance_number AND dhs.sql_id ='' AND dsn.snap_id>&begin_snap and dsn.snap_id <=&end_snap GROUP BY dhs.sql_id、dsn.snap_id、dsn.begin_interval_time、dsn.end_interval_time ORDER BY dsn.snap_id; 

    ここで、&begin_snapと&end_snapは開始スナップショットIDと終了スナップショットIDです。
    このステートメントの出力は次のようになります。

     SQL_ID SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ELAPSED_TIME_SECS 2k3uw8n473r30 8278 04-JAN-13 23.00.25.5560 05-JAN-13 00.00.21.1620 23123 2k3uw8n473r30 8279 05-JAN-13 00.00.21.1620 05-JAN-13 01.00.3 

    Ebiz環境でCBO統計を見つける方法

     SELECT owner、table_name、num_rows、TO_CHAR(last_analyzed、'DD-MON-YYYY HH24:MI:SS')last_analyzed FROM all_tables WHERE owner IN(SELECT upper(oracle_username)sname FROM fnd_oracle_userid WHERE oracle_id BETWEEN 900 AND 999 AND read_only_flag ='U' UNION ALL SELECT DISTINCT upper(oracle_username)sname FROM fnd_oracle_userid a、fnd_product_installations b WHERE a.oracle_id =b.oracle_id)ORDER BY owner、table_name; 

    このステートメントの出力は、次のようになります。

     OWNER TABLE_NAME NUM_ROWS LAST_ANALYZED --- --------- ---------- --------------------- --- ABM ABM_ACC_MAP_SUM_REP 0 06-DEC-2016 08:46:33 ABM ABM_ACT_ACC_RU_DAT 0 06-DEC-2016 08:46:35 ABM ABM_ACT_STA_RU_DAT 0 06-DEC-2016 08:46:36 

    アップグレード後にAWRレポートを取得する方法

    AWRレポートは、
    •アップグレードが実行されている全期間にわたって取得できます。
    •長時間実行されているジョブの期間中(つまり、ジョブの開始直前と終了直後に取得されたスナップショットの間) 。
    •個々のスナップショット。

    AWRレポートの生成方法
    (1)$ ORACLE_HOME / rdbms / adminに移動します
    (2)awrrpt.sqlを実行してAWRレポートを生成します。
    (3)常にHTMLレポートタイプを選択します。
    (4)Oracle RACインスタンスでは、アップグレードは1つのOracle RACノードでのみ実行されるため、通常はawrrpti.sqlで十分です。
    AWRレポートは自動化できます。これは、特に連続するスナップショットの場合に、多数のAWRレポートを作成する場合に役立ちます。 My Oracleサポートドキュメント「自動ワークロードリポジトリを使用したパフォーマンス診断(ドキュメント1674086.1)」の「AWRレポートの自動化」セクションを参照してください。
    一部の固定オブジェクトとディクショナリオブジェクト(特に、特に統計レベル=ALLの場合、WRH $ _LATCH_CHILDREN)または、保持期間が長いか、スナップショット間隔が短い)は、アップグレード中に大幅に増加します。そのため、AWRを実行する前に、固定オブジェクトと辞書の統計を収集する必要がある場合があります。

    関連記事

    自動ワークロードリポジトリ
    OracleASH(アクティブセッション履歴)
    Oracleパフォーマンスチューニング
    ADDMタスクを作成してそのレポートを確認する方法
    Oracleデータベースでセッションの詳細を検索する方法


    1. 高可用性のためにChamiloMariaDBデータベースをデプロイする方法

    2. 論理レプリケーションソリューションのパフォーマンス制限

    3. MariaDB SUBSTR()の説明

    4. MYSQLDBにBLOBとして保存されている画像を取得します