MENU
OS
データベース
プログラミング
フリーウェア
SEの為の業務知識





 SQL  

パフォーマンス

パフォーマンス

   インデックスの状況調査 ORACLE

  • 索引の一覧

    SELECT index_name,table_name FROM user_indexes

  • 索引が設定されているテーブルと列

    SELECT index_name,table_name,column_name FROM user_ind_columns

  • 索引の作成

    CREATE INDEX index1 ON [テーブル名](カラム名) TABLESPACE indx

  • 索引の表領域移動

    ALTER INDEX index1 REBUILDTABLESPACE tablespace1

  • 索引の削除

    DROP INDEX idx_test1

   セッション情報の確認 ORACLE

    SELECT * FROM v$session

   セッション待機情報の確認 ORACLE

    SELECT * FROM v$session_wait

    ・取得したハッシュ値 (SQL_HASH_VALUE) とアドレス (SQL_ADDRESS) から処理されているSQL文を表示

    SELECT sql_text FROM v$sqltext
            WHERE
    hash_value = 取得したハッシュ値 AND address = 取得したアドレス order by piece

    ・取得したハッシュ値 (SQL_HASH_VALUE) とアドレス (SQL_ADDRESS) から該当のSQL文の実行時間、
    CPU時間、読込ブロック数を表示

    SELECT rows_processed,cpu_time,elapsed_time FROM v$sqlarea
            WHERE
    hash_value = 取得したハッシュ値 AND address = 取得したアドレス

   ロールバックセグメントの確認 ORACLE

    SELECT * FROM dba_rollback_segs

   SQL*PLUS のAUTO TRACE機能 ORACLE

  1. SQL*Plusで対象DBへログイン

  2. AUTO TRACE機能の使用

    ・検索処理の実行と実行計画の表示

    SET AUTOTRACE ON;

    ・実行計画のみ表示

    SET AUTOTRACE TRACEONLY;

  3. 対象のSQLを実行すると実行計画が表示される

   SQLの実行時間を計測 ORACLE

  1. SQL*Plusで対象DBへログイン

  2. ALTER SESSION SET TIMED_STATISTICS=TRUE;を実行

    ALTER SESSION SET TIMED_STATISTICS=TRUE;

  3. ALTER SESSION SET SQL_TRACE=TRUE;を実行

    ALTER SESSION SET SQL_TRACE=TRUE;

  4. 対象のSQL実行

  5. ALTER SESSION SET SQL_TRACE=FALSE;を実行

    ALTER SESSION SET SQL_TRACE=FALSE;

  6. SQL*Plusログアウト

  7. コマンドプロンプトから以下を実行

    C:\> tkprof %ORACLE_HOME%\admin\[DB名]\udump\ORAXXXXX.TRC c:\trace.prf
        explain=[user名]/[password] aggregate=no sys=no sort=fchela

   コストベースへの切り換え ORACLE

  1. 初期パラメータ・ファイルに、optimaize_mode=chooseを宣言(初期状態)

  2. ANALYZEコマンドを実行

    ・ANALYZEコマンドを実行すると、実行した時点のデータを分析し、統計情報を作成する(コストベース)
     ※コストベースはデータ量が大幅に変動した場合、常に手動でメンテナンスしなければならない

    • 現在のデータを完全に分析し統計情報を作成(件数が多いと分析に時間がかかる)

      ANALYZE TABLE table名 COMPUTE STATISTICS;

    • 現在のデータを n% だけサンプリングして分析し統計情報を作成する(通常20%くらい)

      ANALYZE TABLE table名 ESTIMATE STATISTICS SAMPLE 20 PERCENT;

    • 分析した統計情報を削除(ルールベースへの切り換え)

      ANALYZE TABLE table名 DELETE STATISTICS;

    • コストベース、ルールベースの確認

      SELECT table_name,num_rows,avg_row_len,blocks FROM user_tables;

      ※情報が空のテーブルはルールベース

   ディスクアクセスの多いSQL文を調べる方法 ORACLE

  1. SQL PLUSにて以下のSQL文を実行

    SELECT
     DECODE(COMMAND_TYPE,2,'INS',3,'SEL',6,'UPD',7,''DEL','?') SQLTYPE,
     SUBSTR(SQL_TEXT,1,1024) LONG_TEXT,
     FIRST_LOAD_TIME,
     EXECUTIONS,
     DISK_READS,
     BUFFER_GETS
    FROM
     V$SQLAREA
    WHERE
     DISK_READS >
     ( SELECT AVG(DISK_READS) FROM
       ( SELECT DISK_READS FROM V$SQLAREA WHERE DISK_READS >
         ( SELECT AVG(DISK_READS) FROM V$SQLAREA)
       )
     )
    ORDER BY DISK_READS DESC,BUFFER_GETS;


   ヒント句の使用 ORACLE

  1. 記述例 1

    SELECT /*+ FULL(table名) */ * FROM table名 WHERE Key1 = 10;

  2. 記述例 2

    SELECT /*+ INDEX(ta インデックス名) */ * FROM table名 ta WHERE Key1 = 10;

  3. ヒント句一覧

    FULL(表名)
    INDEX(表名 索引名)
    ORDERED
    USE_NL
    USE_MERGE
    USE_HASH
    RULE
    ・・・ 指定した表に対して全表スキャンを使用する
    ・・・ 指定した表に対して索引スキャンを使用する
    ・・・ 表を結合するとき、FROM句で指定された順序で結合する
    ・・・ 結合方法にネストされたループ結合を使用する
    ・・・ 結合方法にソート/マージ結合を使用する
    ・・・ 結合方法にハッシュ結合を使用する
    ・・・ ルールベースを使用する
[トップページへ] [戻る]

Copyright(c)2007-2008 Freedom.Net Co., Ltd. All rights reserved.