• 実行計画をわざわざ取らなくても、データディクショ ナリを直接見ることによって、実行計画や統計情 報を取得できる。
• EXPLAIN PLAN などでは、実際の実行計画と同 じとは限らない。 ALTER SESSION などで、実行 計画に影響のあるパラメータが変更されている 可能性があるため。
• V$SQLAREA や V$SQL などから、調査する SQL
を絞り込む。
問題のある SQL 文をピックアップする
• バッファ数が多い TOP5
• ディスク読み取りが多い TOP5
SELECT *
FROM (SELECT buffer_gets,address,hash_value sql_text FROM V$SQLAREA
ORDER BY buffer_gets DESC) WHERE ROWNUM < 6;
SELECT *
FROM (SELECT buffer_gets,address,hash_value sql_text FROM V$SQLAREA
ORDER BY buffer_gets DESC) WHERE ROWNUM < 6;
SELECT *
FROM (SELECT buffer_gets,address,hash_value sql_text FROM V$SQLAREA
ORDER BY buffer_gets DESC) WHERE ROWNUM < 6;
SELECT *
FROM (SELECT buffer_gets,address,hash_value sql_text FROM V$SQLAREA
ORDER BY buffer_gets DESC) WHERE ROWNUM < 6;
hash_value と address をもとに検索
column id format 999 newline column operation format a20 column options format a15
column object_name format a22 trunc column optimizer format a3 trunc
SELECT id , lpad (' ', depth) || operation operation, options , object_name, optimizer, cost FROM V$SQL_PLAN
WHERE hash_value = 817628907 AND address = '5765E0DC' START WITH id = 0 CONNECT BY
( prior id = parent_id
AND prior hash_value = hash_value
AND prior child_number = child_number ) ORDER SIBLINGS BY id, position;
column id format 999 newline column operation format a20 column options format a15
column object_name format a22 trunc column optimizer format a3 trunc
SELECT id , lpad (' ', depth) || operation operation, options , object_name, optimizer, cost FROM V$SQL_PLAN
WHERE hash_value = 817628907 AND address = '5765E0DC' START WITH id = 0 CONNECT BY
( prior id = parent_id
AND prior hash_value = hash_value
AND prior child_number = child_number ) ORDER SIBLINGS BY id, position;
出力結果
• これはシンプルな結果だが、 SQL を変更す れば、自分の取りたい情報を表示できる。
ID OPERATION OPTIONS OBJECT_NAME OPT COST ---- --- -- ---
---0 SELECT STATEMENT CHO 1 TABLE ACCESS FULL DEPT
ID OPERATION OPTIONS OBJECT_NAME OPT COST ---- --- -- ---
---0 SELECT STATEMENT CHO 1 TABLE ACCESS FULL DEPT
UNDO 表領域
• UNDO
表領域とは–
ロールバックデータを格納する領域。ロールバックセグメン トの後継。– Oracle9i DB
は、起動時に2
つのモードを選べる。• 2
つのモード(undo_management
パラメータで設定)– 自動UNDO管理モード(auto)
• Undo領域を使用する。
– ロールバックセグメントUNDOモード(manual)
• ロールバックセグメントを使用する。
• undo_retention
パラメータで保存期間を制御可能。• UNDO
表領域の作成– CREATE DATABASE文、CREATE UNDO TABLESPACE文
• UNDO
表領域の設定– UNDO_TABLESPACE
Undo 領域の使用状況
• Undo の使用状況
• V$UNDOSTAT ビュー
–
ロールバックセグメント の統計情報を格納–
使用したUNDO
表領域、UNDO
ブロック数、トラ ンザクション数など–
統計情報から最適なUNDO
表領域を設定統計情報の収集
〜
ANALYZE
は古い〜•
完全に計算– DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP')
• 10%
サンプル– DBMS_STATS.GATHER_TABLE_STATS('SCOTT','EMP',esti mate_percent=>10)
• SCOTT
スキーマのオブジェクトを10%
サンプル– DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT',10,option s=>'GATHER')
•
統計情報を削除– DBMS_STATS.DELETE_TABLE_STATS('SCOTT','EMP')
効率的な統計情報収集
〜
Oracle8i
からの機能〜1. Monitoring
開始2.
変更を加えたオブジェクトは、user_tab_modifications
にリ ストされる3.
「GATHER STALE
」を指定すると、前回から変更された オブジェクトだけの統計情報を更新するALTER TABLE emp MONITORING;
ALTER TABLE emp MONITORING;
SELECT * FROM user_tab_modifications;
SELECT * FROM user_tab_modifications;
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT', options=>'GATHER STALE');
END;
/
BEGIN
DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT', options=>'GATHER STALE');
END;
/
データベース・データ収集ツール
~
これからはStatspack
がお勧め~
• BSTAT/ESTAT
スクリプト– $ORACLE_HOME/rdbms/admin/UTLBSTAT.SQL,UTLESTAT.SQL
• Statspack
– BSTAT/ESTATの基いているが、データベース内のすべての統計情報
を格納するようにデータ獲得が拡張
– BSTAT/ESTATよりも詳細な情報が取得できる
– 使用するためには、Statspackをインストールする必要がある SQL> connect / as sysdba
SQL> @?/rdbms/admin/spcreate – スナップショットの作成
SQL> connect perfstat/perfstat SQL> execute statspack.snap:
– レポートの出力
SQL> connect / as sysdba
SQL> @?/rdbms/admin/spreport