お気に入りに登録
パフォーマンス
インデックスの状況調査
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
索引の削除
セッション情報の確認
ORACLE
セッション待機情報の確認
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
SQL*Plusで対象DBへログイン
AUTO TRACE機能の使用
・検索処理の実行と実行計画の表示
・実行計画のみ表示
対象のSQLを実行すると実行計画が表示される
SQLの実行時間を計測
ORACLE
SQL*Plusで対象DBへログイン
ALTER SESSION SET TIMED_STATISTICS=TRUE;を実行
ALTER SESSION SET TIMED_STATISTICS=TRUE;
ALTER SESSION SET SQL_TRACE=TRUE;を実行
ALTER SESSION SET SQL_TRACE=TRUE;
対象のSQL実行
ALTER SESSION SET SQL_TRACE=FALSE;を実行
ALTER SESSION SET SQL_TRACE=FALSE;
SQL*Plusログアウト
コマンドプロンプトから以下を実行
C:\> tkprof %ORACLE_HOME%\admin\[DB名]\udump\ORAXXXXX.TRC c:\trace.prf
explain=[user名]/[password] aggregate=no sys=no sort=fchela
コストベースへの切り換え
ORACLE
初期パラメータ・ファイルに、optimaize_mode=chooseを宣言(初期状態)
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
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
SELECT /*+ FULL(table名) */ *
FROM table名
WHERE Key1 = 10;
記述例 2
SELECT /*+ INDEX(ta インデックス名) */ *
FROM table名 ta
WHERE Key1 = 10;
ヒント句一覧
FULL(表名)
INDEX(表名 索引名)
ORDERED
USE_NL
USE_MERGE
USE_HASH
RULE
・・・ 指定した表に対して全表スキャンを使用する
・・・ 指定した表に対して索引スキャンを使用する
・・・ 表を結合するとき、FROM句で指定された順序で結合する
・・・ 結合方法にネストされたループ結合を使用する
・・・ 結合方法にソート/マージ結合を使用する
・・・ 結合方法にハッシュ結合を使用する
・・・ ルールベースを使用する