DBチューニングのための指標を整理してみた
以下、考えたり調べたりしたけど、やはりDBのチューニングは、インデックス、メモリ、統計情報、待機回避、ソート回避、解析再利用、そして負荷分散、という観点に落ち着きそうだ。
(※以下、基本的にOracleについての情報です)
ブレスト的に考えみた指標
- 事前設定
- メモリ(バッファキャッシュ、共有プールなど)の容量(物理読み込みの頻度が高くないか)
- ファイル分割
- 状態
- 統計情報は古くなっていないか
- テーブル統計情報
- 列統計情報
- 索引統計情報
- システム統計情報
- 統計情報は古くなっていないか
※ANALYZE文で取得
※DBMS_STATSパッケージが便利
- 定義
- テーブル
- 非正規化
- マテリアライズドビュー
- インデックス
- 対象列
- 種類(B*Tree索引、ビットマップ索引、ファンクション索引、逆キー索引)
- テーブル
- アクセス方法
- SQL
- アクセス方法は適切か
- テーブル結合方法は適切か
- ハードパース率が高すぎないか
- 競合ロックが発生しすぎていないか
- ネットワーク構成
- 負荷分散構成
- SQL
Oracleパフォーマンス指標(※ツール軸)
- AUTOTRACE
- db block gets: CURRENTブロック(DML やSELECT FOR UPDATE の際)要求回数
- consistent gets: 読み取り一貫性ブロック要求回数
- pyhsical reads: 物理読み込みのブロック数
- sorts(memory): メモリ内でのソート回数
- sorts(disk): 一時表領域でのソート回数
- SQLトレース
- SQLの解析、実行、およびフェッチのカウント
- CPU時間と経過時間
- 物理読み込みと論理読み込み
- ライブラリ・キャッシュ・ミスの回数
- 実行計画情報
- cr: その行について、バッファから読み取ったブロック総数
- pr: その行について、物理読み込みブロック総数
- pw: その行について、物理書き込みブロック総数
- time: 処理にかかった時間(マイクロ秒)
- STATSPACK
Oracleパフォーマンス関連ツール(CUIベース)
- EXPLAIN PLAN: 実行計画の取得
- PLAN_TABLEテーブルが必要
- AUTOTRACE: 実行計画、CPU使用時間、物理読み込み・論理読み込み、などの取得
- PLAN_TABLE, plustraceロール が必要
- SET AUTOTRACE ON で開始
- SET AUTOTRACE OFF で終了
- SQLトレース: セッション単位、インスタンス単位で発行されたSQLのパフォーマンス情報の取得(※インスタンス単位のトレースを取得するには、Oracleの再起動が必要)
- TKPROF: SQLトレースの出力ファイルの整形
- STATSPACK: 任意の瞬間でパフォーマンス統計のスナップショットを取得し、任意の2時点間の差分をレポート
- ライブラリキャッシュ内のSQL
参考文献
- 作者: 福田武志
- 出版社/メーカー: ソフトバンク クリエイティブ
- 発売日: 2007/03/28
- メディア: 単行本
- 購入: 4人 クリック: 108回
- この商品を含むブログ (18件) を見る