2006-07-01から1ヶ月間の記事一覧

SQLチューニング(3) --- ストアドアウトライン

ストアドアウトラインを使用する目的 プランスタビリティ(実行計画の安定化) 次のような環境変化があっても、CBOが算出する実行計画を変えないようにする Oracleバージョン 統計再収集 初期化パラメータの変更 データベース再編成 スキーマの変更 アプリケ…

SQLチューニング(2) --- オプティマイザ&統計

RBOとCBO ルールベースオプティマイザ あらかじめOracleサーバで持っているルール情報に基づいてアクセスパスを決定する 10gからは非サポート コストベースオプティマイザ アクセスパスのコストを見積り、コストが低いものを選択する 定期的に統計情報を取得…

SQLチューニング(1) --- 診断ユーティリティ

診断ユーティリティ STATSPACKのSQLレポートで怪しいSQLを確認 取得順(SQL ordered by Gets) 物理読み込み順(SQL ordered by Reads) 実行順(SQL ordered by Executions) 解析コール順(SQL ordered by Parse) EXPLAIN PLANコマンドで怪しいSQL文の実…

ロック競合の診断

ロックのメカニズム Oracleでは行レベルロックを採用しているためデッドロックが起こりにくい DML文では 排他行ロック 共有表ロック を取得する Oracleにおいて、ロックはエンキュー・メカニズムによって管理される エンキュー・メカニズムが追跡、記録して…

ロールバックセグメントのチューニング(あまり出ない)

ロールバックセグメントのサイズ 1つのトランザクションでは1つのセグメントのみ使う エクステントは循環利用 delete > update(索引つき) > update > insert の順でロールバックセグメントを消費する truncateはロールバックセグメントを消費しない ロールバ…

ソート領域のチューニング

ソート処理を必要とするSQL 索引の作成(通常) ANALYZEコマンド order by group by distinct UNION、INTERSECT、MINUS演算子 ソートマージ結合 ※どのタイプのjoin(ハッシュマップ、ソートマージ、ネストループ)が使われるかは実行計画で決まる ソート処理…

もえたん でるたん(前半のみ)

2章 診断およびチューニング用のユーティリティ STATSPACKのコマンド statspack.snap PERFSTATユーザでspreport.sql 3章 共有プールのチューニング 動的SGAは? データベース・バッファ・キャッシュ 共有プール ライブラリ・キャッシュで再ロード多発の原因 …

データブロックの効率的な使用(3) --- 索引のチューニング(索引走査)

索引の診断 変更が多く行われる表では、表のセグメントだけでなく、索引のセグメントも断片化を起こす 索引は完全に空となった索引ブロックのみ空きリストに登録され、再利用可能となる(表のように”PCTUSEDを下回ったら”ではない) 診断方法 ANALYZE INDEX …

データブロックの効率的な使用(2) --- エクステントのチューニング(全表走査)

エクステントのサイズ エクステントのサイズは主に全表走査のパフォーマンスに影響する 索引走査の場合は関係ない 大きくするメリット 動的拡張が起こりにくい(動的拡張はコスト大) マルチブロック・リードを減らすことができる(どんなにマルチにしても、…

Frickrのタグを一括削除する便利機能

http://www.lifehacker.com/software/top/mass-delete-your-flickr-tags-191094.php Login into Flickr. Type in this link into the address bar of your browser: http://flickr.com/photos/me/tags/tagtodelete/delete (Of course, change tagtodelete to…

データブロックの効率的な使用(1) --- データブロックのチューニング

データブロックのサイズ大小 小さいデータブロックサイズは一行のデータ量が少なくランダムアクセスが多いOLTP系向き 大きいデータブロックサイズは大量のデータに順次アクセスするDSS向き 小 大 説明 ブロック競合 ○少 ×大 データブロックあたりの行数が多…

データベースファイルの構成とI/Oの診断(3) --- チェックポイントのチューニング

チェックポイントの処理 DBWn:使用済みバッファをデータファイルに書き込む CKPT:データファイルヘッダと制御ファイルのSCNを更新する チェックポイント(リカバリ)状況を調べるには、V$INSTANCE_RECOVERY チェックポイント頻度を高めればリカバリ時間は…

データベースファイルの構成とI/Oの診断(2) --- 表アクセス、ディスクI/Oに関する統計

全表走査の関する統計 フルスキャンはディスクI/O増加に直結するので、不必要に行わないよう調整 索引やSQLチューニングで解決されることも多々ある 全表走査がメインのバッチなどのセッションは、DB_FILE_MULTIBLOCK_READ_COUNTを一時的に大きくするのも効…

データベースファイルの構成とI/Oの診断(1) --- ファイル分散

表領域の使用方法 Oracleの構造上はSYSTEM表領域だけでDBは構成できるが、通常は最低下図のレベルに表領域を分けることを検討する。 表領域のタイプは、ローカル管理表領域を検討する。エクステント割当のパフォーマンスも良く、断片化の解消も必要ない。 デ…

SGAその他のチューニング(2) --- Javaプール

初期化パラメータ JAVA_POOL_SIZE(デフォルト20MB):OracleJVMを使用しない場合は無駄なので0に変更しておく JAVA_SOFT_SESSIONSPACE_LIMIT:Java使用メモリがこのサイズを超えるとアラーとファイルに警告される。アプリケーションは続行可能。 JAVA_MAX_S…

SGAその他のチューニング(1) --- ラッチ

ラッチ概要 メモリ構造を保護する機構(メモリの割当・開放) 低レベルなロック(早い者勝ち) SGA ラッチ名 効能 要求モード 共有プール shared pool 共有プール内のメモリ管理 Willing-to-wait library cache 共有プール内でSQL検索の管理 Willing-to-wait…

REDOログバッファのチューニング

バッファサイズの設定 LOG_BUFFER初期化パラメータ(最小64KB、デフォルト512KB) LGWR書込みタイミング COMMIT バッファの1/3に達したとき タイムアウト(3秒) DBWnの書込み時 REDOログバッファの診断 待機イベント(v$session_wait) log buffer space RE…

データベースバッファキャッシュのチューニング(2) --- チューニング目標、診断方法

チューニング目標 ディスクI/Oは負荷が高いのでなるべく減らすことが重要 OLTP系システム:バッファヒット率90%以上 DSS系システム:ディスクから読み込むことがほとんどなので、メモリよりもI/Oチューニング重視する 他のプロセスのためのメモリも必要なの…

データベースバッファキャッシュのチューニング(3) --- 表のキャッシュ

表のキャッシュ フルスキャンされる小さな参照表が対象 フルスキャンはLRUリストの末尾に置かれるため、すぐなくなってしまいI/Oが増える。それを防止するのが目的 キャッシュ方法はcreate table ... cache|alter table ... cache|select /*+cache*/ どの…

データベースバッファキャッシュのチューニング(4) --- 複数バッファプール

複数バッファプールの概要 オブジェクトごとにデータブロックが読み込まれるキャッシュを使い分ける アプリケーションのアクセス特性が分散している場合に検討 LRUリストもそれぞれに用意される メモリ側の設定とセグメント側の設定が必要 複数バッファプー…

データベースバッファキャッシュのチューニング(5) --- その他

空きリスト競合の解決 空きリストの数を設定した表を再作成して、データを移動する ALTER TABLEコマンドで空きリストの数を変更する 複数I/Oスレーブ DBWR_IO_SLAVESパラメータ:DBW0に対するスレーブプロセス数(default:0) BACKUP_TAPE_IO_SLAVES:RMANで…

データベースバッファキャッシュのチューニング(1) --- アーキテクチャ

バッファ管理方法 LRUリスト:最近使用されたブロックを管理する 使用済みリスト:データブロックの内容は変更されたが、まだディスクに書き出してないブロックを管理する データブロックの状態 空きバッファ:ディスク=メモリ(再利用可) 使用済みバッフ…

共有プールのチューニング(5) --- UGA、ラージプール

共有サーバとUGA UGA=カーソル情報+セッションデータ(ソート領域、プライベートSQL領域) 専用サーバ接続のときはPGAにUGAが格納される 共有サーバ接続のときは、共有プールまたはラージプールにUGAが格納される ラージプール LARGE_POOL_SIZE初期化パラ…

共有プールのチューニング(4) --- ディクショナリキャッシュのチューニング

チューニングの目標 Oracleはライブラリキャッシュよりもディクショナリキャッシュを優先して格納する なのでディクショナリキャッシュのチューニングはあまり行わなくて良い キャッシュミス率はV$ROWCACHEで確認。ミス率SUM(GETMISSES)/SUM(GETS)が15%未満…

共有プールのチューニング(3) --- 予約領域のチューニング

予約領域の確認方法 現在の設定:SHARED_POOL_RESERVED_SIZE初期化パラメータ デフォルトはSHARED_POOL_SIZEの5% 十分であるかどうかはV$SHARED_POOL_RESERVEDビューで確認 チューニングの目標はrequest_missesとrequest_failuresが0(または増えないこと)…

共有プールのチューニング(2) --- ライブラリキャッシュのチューニング

SQLの共有 バインド変数の使用 CURSOR_SHARINGパラメータをFORCEかSIMILARにする(アプリ側でバインド変数が使用できない場合) V$LIBRARYCACHEのGETHITRATIO(GETHITS/GETS)が90%以上を目標 V$SQLAREA:SQL毎の情報(ロード、解析、実行回数など) V$SQLTEXT…

共有プールのチューニング(1) --- 共有プールの概要

ライブラリキャッシュ 解析済みコード 実行計画 共有SQL領域 PL/SQL領域 キャッシュの管理はLRUアルゴリズム(再利用されるほど有利) データディクショナリキャッシュ 表・列定義 権限 ユーザーグローバル領域 共有サーバ接続時のセッション情報・カーソル…

STATSPACKユーティリティを使ってみる

(1)スナップショットの取得 perfstatユーザでstatspack.snapプロシージャを実行 SQL> connect perfstat/perfstat 接続されました。 SQL> execute statspack.snap PL/SQLプロシージャが正常に完了しました。 上記のプロシージャを実行してスナップショットを…

STATSPACKユーティリティをインストールしてみる

(1)表領域の作成 STATSPACKは専用の表領域は必要ないので、作らなくても良い SQL> create tablespace PERFSTAT datafile '/oracle/data/perfstat01.dbf' size 100M extent management local ; 表領域が作成されました。 (2)spcreate.sqlを実行 このスクリプ…

システム統計に関する動的ビュー

V$STATNAME(統計名) V$SYSSTAT(システム統計) V$SESSTAT(セッション毎の統計) V$EVENT_NAME(待機イベント名) V$SYSTEM_EVENT(待機イベント) V$SESSION_EVENT(セッション毎の待機イベント)