Upload
devsumi2009
View
6.805
Download
0
Embed Size (px)
Citation preview
渡部渡部 亮太亮太
株式会社コーソル株式会社コーソル
13-D-3
プロとしてのプロとしてのOracleOracleアーキテクアーキテク チャ入門チャ入門 ~番外編~~番外編~
““OOOO厨”転じて“厨”転じて“RDBRDB厨”厨”
2008/82008/8に「プロとしてのに「プロとしてのOracleOracleアーキテクチャ入門」を上梓しまアーキテクチャ入門」を上梓しましたした
所有資格所有資格: Oracle Master : Oracle Master 10g Platinum10g Platinum他他
株式会社コーソル所属株式会社コーソル所属エンジニアのエンジニアのOracle Master Oracle Master 所有所有率(率(96%)96%)社員社員7979名名(2009/1/20(2009/1/20時点時点))
渡部渡部 亮太亮太 –– ((株株))コーソルコーソル
本日の目標本日の目標
以下について理解していただくことを目標と以下について理解していただくことを目標としていますしています
1)1)SQLSQL実行実行//チューニングに関連するチューニングに関連するOracleOracleアーキテクチャの概要アーキテクチャの概要
2)2)CBOCBOと関連する構成要素と関連する構成要素
3)3)SQLSQL開発において注意すべき点開発において注意すべき点
DBDB運用ではなく、運用ではなく、SQLSQL開発を想定した説明開発を想定した説明となっています。となっています。
SGA共有プール
SQLSQL実行と実行とOracleOracleアーキテクチャアーキテクチャ
クライアント・アプリケーション
サーバプロセス
データベース・バッファキャッシュ
データファイル
(永続表領域)
SELECT
メモリ
ディスク
解析済み
SQL情報
一時ファイル
(一時表領域)
検証・解析
実行・フェッチ
PGA
行
SQLSQL発行と発行とSQLSQL解析解析SGA
共有プールクライアント・
アプリケーション
サーバプロセス①
SELECT
解析済み
SQL情報
②検証・解析
(ハードパース)
「検証・解析」で実施する処理「検証・解析」で実施する処理SQLSQL構文チェック構文チェック
アクセス対象オブジェクトのチェックアクセス対象オブジェクトのチェック
SQLSQLの最適化の最適化
実行計画の立案実行計画の立案
解析結果は共有プールにキャッシュ解析結果は共有プールにキャッシュ
③
キャッシュ
SQLSQLの実行と実行計画の実行と実行計画解析済みSQL情報
実行計画
アクセスパス
テーブルスキャン
索引スキャン+ A
Z
A
Z+
f(x)f(x)
ネステッドループ
ソートマージ
ハッシュ
結合方式+結合の順序
実行計画の立案と実行計画の立案とCBOCBO ((Cost Based OptimizerCost Based Optimizer))
SELECT * FROM EMPWHERE EMP_NO = :emp_no; CBO
オプティマイザ統計
・・・
収集
SQL 実行計画
初期化パラメータ初期化パラメータ
システム統計
テーブル・索引
環境的な要因環境的な要因!!!!
テーブルと索引へのアクセステーブルと索引へのアクセス
・・・
・・・
選択率と最適なアクセス選択率と最適なアクセス
: :?
? ?
:
?
ヒストグラムヒストグラム
: 収集
or
オプティマイザ統計 ・・・
高さベースのヒストグラム
値ベースのヒストグラム
高さ=頻度
幅=頻度
CBOCBOの欠点と対応策の欠点と対応策
利点:データ状態(の変化) に応じた実行計画を
立案できる
欠点:実行計画が変化して、突然パフォーマンスが変動する可能性がある
ヒント句の使用ヒント句の使用例例: SELECT /*+ : SELECT /*+ USE_NL(empUSE_NL(emp, dept) */ , dept) */ ……
アウトラインの使用アウトラインの使用例例: ALTER SESSION SET : ALTER SESSION SET use_stored_outlineuse_stored_outline = = <<outline_nameoutline_name>;>;
安定性を優先する場合
オプティマイザ統計
・・・
実行計画
影響
解析済み解析済みSQLSQL情報のキャッシュ情報のキャッシュ
クライアント・アプリケーション
④
SELECT
SGA共有プール
クライアント・アプリケーション
サーバプロセス①
SELECT
解析済み
SQL情報
②検証・解析
(ハードパース)③
キャッシュ
サーバプロセス
⑤検証・解析
(ソフトパース)
⑥再利用
一度実行された一度実行されたSQLSQLの解析結果は再利用されるの解析結果は再利用される⇒⇒ SQLSQL実行に伴う負荷を軽減実行に伴う負荷を軽減
実行実行//フェッチフェッチ
クライアント・アプリケーション
サーバプロセス
データファイル
(永続表領域)
③ 行
メモリ
ディスク
実行・フェッチ
SGAデータベース・
バッファキャッシュ
consistent gets
physical reads
①ファイルI/O
②メモリ
アクセス
DBDBバッファキャッシュのキャッシュ効果バッファキャッシュのキャッシュ効果
クライアント・アプリケーション
サーバプロセス
データファイル
(永続表領域)
③ 行
メモリ
ディスク
実行・フェッチ
SGAデータベース・
バッファキャッシュ
クライアント・アプリケーション
サーバプロセス
⑤ 行
実行・フェッチ①ファイルI/O
②メモリ
アクセス
④メモリ
アクセス
ディスクアクセス→低速
メモリアクセス→高速
パフォーマンス測定とキャッシュパフォーマンス測定とキャッシュ
シビアなパフォーマンス測定の場合は、シビアなパフォーマンス測定の場合は、キャッシュキャッシュを意識する必要がありますを意識する必要があります
明示的な明示的なDBDBバッファキャッシュのバッファキャッシュのflushflushが有効でが有効です(す(10g10g~)~)
ALTER SYSTEM FLUSH BUFFER_CACHE;ALTER SYSTEM FLUSH BUFFER_CACHE;
通常、通常、OSOS//ファイルシステムのバッファキャッファイルシステムのバッファキャッ
シュの影響はありませんシュの影響はありません大部分のプラットフォームで、大部分のプラットフォームで、OracleOracleははOSOS//ファイルファイル
システムのバッファキャッシュをバイパスしますシステムのバッファキャッシュをバイパスします
より厳密なレベルでは、ストレージのキャッシュより厳密なレベルでは、ストレージのキャッシュの影響を受けますの影響を受けます
サーバプロセス
PGA
一時ファイル(一時表領域)
ソート(必要な場合)ソート(必要な場合)SGA
クライアント・アプリケーション
データベース・バッファキャッシュ
③ 行
メモリ
ディスク
実行・フェッチ
メモリでソート⇒ 高速
ディスクでソート⇒ 低速
A
Z
A
Z
①
②ソート
②ソート
統計:キャッシュとソート統計:キャッシュとソート
consistent gets : consistent gets : バッファ読み込み(ブロッバッファ読み込み(ブロッ
ク数)ク数)
physical readsphysical reads : : ファイル読み込み(ブロッファイル読み込み(ブロッ
ク数)ク数)
sorts (memory)sorts (memory) : : メモリソート(回数)メモリソート(回数)
sorts (disk) : sorts (disk) : ディスクソート(回数)ディスクソート(回数)
V$SESSTAT / V$SYSSTATV$SESSTAT / V$SYSSTATビュービュー
SQLSQL*Plus autotrace statistics*Plus autotrace statistics
SQLSQL開発において留意すべき点開発において留意すべき点1)実行計画(1)実行計画(+SQL+SQL)の妥当性チェック)の妥当性チェック
しかし・・・、複雑なしかし・・・、複雑なSQLSQLの妥当性チェックは困難の妥当性チェックは困難
そもそも、そもそも、CBOCBOが自動的に最適な実行計画を立案するが自動的に最適な実行計画を立案する
「はず」なのだから、開発者がいちいち実行計画をチェッ「はず」なのだから、開発者がいちいち実行計画をチェックするのはクするのはナンセンスナンセンス
ただし、最低限、以下はチェックしておきたいただし、最低限、以下はチェックしておきたい索引が使用できない索引が使用できないSQLSQLを書いていないかを書いていないか
処理データ量が大量な処理データ量が大量なSQLSQLの場合に、想定する実行計画の場合に、想定する実行計画
2)意味のあるパフォーマンスの測定(2)意味のあるパフォーマンスの測定(oror 把握)把握)
本番環境にできるだけ近い環境本番環境にできるだけ近い環境
データ量、オプティマイザ統計データ量、オプティマイザ統計については特に配慮をについては特に配慮を→→ CBOCBOによる実行計画の立案にも大きく影響による実行計画の立案にも大きく影響
キャッシュを意識した性能測定が必要な場合もキャッシュを意識した性能測定が必要な場合も
索引を使用できない索引を使用できないSQLSQL典型的な例典型的な例
NULLNULL値の検索値の検索
暗黙の型変換を伴う暗黙の型変換を伴うSQLSQL索引列へのファンクションの適用索引列へのファンクションの適用
等等参考:参考: 「パフォーマンスチューニングガイド」→「「パフォーマンスチューニングガイド」→「SQLSQLチューニングの概要」→「効率的なチューニングの概要」→「効率的なSQLSQL文の開発」文の開発」
SQL Tuning Advisor(10gSQL Tuning Advisor(10g~~))の利用も検討の利用も検討
要:要: Enterprise EditionEnterprise Edition + Diagnostic + Diagnostic PackPack+Tuning Pack+Tuning Pack
実行計画確認時の注意実行計画確認時の注意
1.1. 本番環境類似の環境整備本番環境類似の環境整備
2.2. オプティマイザ統計のメンテナンスオプティマイザ統計のメンテナンス
3.3. バインド変数を用いたバインド変数を用いたSQLSQLの実行計画のの実行計画の 確認方法確認方法
4.4. バインドピークが実行計画に与える影響バインドピークが実行計画に与える影響
5.5. クエリ変換クエリ変換
1)本番環境類似の環境整備1)本番環境類似の環境整備
実行計画立案にかかわる環境条件を、「実行計画立案にかかわる環境条件を、「でできるだけきるだけ」開発環境と本番環境で同じくする」開発環境と本番環境で同じくする
オブジェクト定義:テーブル、索引オブジェクト定義:テーブル、索引
オプティマイザ統計オプティマイザ統計
(システム統計)(システム統計)
初期化パラメータ初期化パラメータ
データデータ
OracleOracleデータベース物理設計データベース物理設計
各種ハードウェア(各種ハードウェア(CPUCPU、ディスク)、ディスク)
易
難
一般的にはここらへんが限界?
2)オプティマイザ統計のメンテナンス2)オプティマイザ統計のメンテナンス
原則的に、原則的に、全てのオブジェクトの最新のオプ全てのオブジェクトの最新のオプティマイザ統計ティマイザ統計を取得すべきですを取得すべきです
開発中にオブジェクト、データの追加があった場開発中にオブジェクト、データの追加があった場合は適宜オプティマイザ統計を更新してください合は適宜オプティマイザ統計を更新してください
ただし、ただし、環境について環境について明確なポリシー明確なポリシーがあるがある場合はそれに準じます場合はそれに準じます
何らかの理由で、オプティマイザ統計取得対象何らかの理由で、オプティマイザ統計取得対象のオブジェクトが決まっているのオブジェクトが決まっている
オプティマイザ統計は環境ごとに独自に取得せオプティマイザ統計は環境ごとに独自に取得せず、本番環境からコピーして使用するず、本番環境からコピーして使用する
等等
DBMS_STATSDBMS_STATSの利用の利用
開発DB
本番DB
・・・
:オプティマイザ統計・・・
・・・
・・・
・・・
過去
現在
*.dmpEXPORT_ TABLE_STATS
IMPORT_ TABLE_STATS
RESTORE_ *_STATS (10g~)
オプティマイザ統計の収集には、原則としてオプティマイザ統計の収集には、原則としてDBMS_STATSDBMS_STATSパッケージを使用するパッケージを使用する
ANALYZEANALYZEコマンドは使用すべきでないコマンドは使用すべきでない
truncatetruncate tabletableとオプティマイザ統計とオプティマイザ統計
truncate tabletruncate tableしてもオプティマイザ統計はしてもオプティマイザ統計は
更新されません更新されません
よって、以下のような事態が発生しえますよって、以下のような事態が発生しえます
実際の行数実際の行数 = 0= 0オプティマイザ統計の行数オプティマイザ統計の行数 = 1000= 1000
CBOCBOはオプティマイザ統計を見るので、誤っはオプティマイザ統計を見るので、誤っ
た実行計画を立案する可能性がありますた実行計画を立案する可能性があります
3)バインド変数を用いた3)バインド変数を用いたSQLSQLの実行計画の実行計画
SQLSQLトレース、トレース、V$SQL_PLV$SQL_PLANANから実行計画から実行計画
を確認するのが安全ですを確認するのが安全です
explain planexplain plan文、文、SQL*PlusSQL*Plusののautotraceautotraceコマコマ
ンドは避けるンドは避ける
バインド変数を使ったバインド変数を使ったSQLSQLでは実際に実行されでは実際に実行され
た実行計画を確認できない場合がありますた実行計画を確認できない場合があります
SELECT * FROM tbl_xxxWHERE col1 = :var1;
4)バインドピーク(4)バインドピーク(9i9i~)~)
バインド変数にセットされバインド変数にセットされた値を元に、最適な実行た値を元に、最適な実行計画を立案する機能計画を立案する機能
:
?
:
バインドピークの落とし穴バインドピークの落とし穴
:
SELECT * FROM tbl_xxxWHERE col1 = :var1;
?
SELECT * FROM tbl_xxxWHERE col1 = :var1;
?
:
:
2回目の実行
1回目の実行
:
バインドピークの落とし穴を避けるバインドピークの落とし穴を避ける
1)バインドピークを1)バインドピークをOFFOFFにするにする
隠しパラメータ(隠しパラメータ(KROWN:81865KROWN:81865)の設定が必要)の設定が必要
本番環境との整合性本番環境との整合性を確認要を確認要
2)バインド変数を使用しない2)バインド変数を使用しない
そもそもバインド変数値により最適な実行計画が大幅そもそもバインド変数値により最適な実行計画が大幅に異なるに異なるSQLSQLでは、バインド変数を使用すべきでないでは、バインド変数を使用すべきでない
※※::11g11gでは、バインドピークの機能が改善では、バインドピークの機能が改善
11回目と回目と22回目で実行統計が大きく異なる場合は、回目で実行統計が大きく異なる場合は、33回目回目
では別の実行計画を立案では別の実行計画を立案
5)クエリ変換5)クエリ変換
ビューマージビューマージ
条件節条件節(WHERE(WHERE句)の句)の
プッシュプッシュ
副問合せのネスト解除副問合せのネスト解除
OROR展開展開 / / ININリストのリストの
繰り返し繰り返し
等・・・等・・・
サーバプロセス
検証・解析
実行・フェッチ
CREATE VIEW VW_EMP AS SELECT * FROM EMP
WHERE sal > 1000;
SELECT * FROM EMPWHERE sal > 1000
AND job = ‘CLERK’;
ビューマージ
SELECT * FROM VW_EMPWHERE job = ‘CLERK’;
クエリ変換と実行計画クエリ変換と実行計画
変換された SQL
クライアント・アプリケーション
SQL
CBO
実行計画
注)一部のクエリ変換は
/* NO_QUERY_TRANSFORMATION */
ヒントで無効化可能
新種のクエリ変換の導入の流れ新種のクエリ変換の導入の流れ
実績的に新種のクエリ変換はひっそりと導入される傾向実績的に新種のクエリ変換はひっそりと導入される傾向にあるにある
このため、アプリ開発者の方(Oracle非専業)が、クエリ変換を把握して開発することは現実的に困難かも・・・
Beta-like State:
・クエリ変換実装済み・隠しパラメータ
または
Undocumentedなヒント
で制御可能
First official publication:
・クエリ変換がデフォルト
で常に適用・コスト計算なし
Final State:
・クエリ変換の適用有無
がコスト計算を基に判断・Undocumentedなヒントはdeprecatedに
※※::書籍「書籍「CostCost--Based Oracle FundamentalsBased Oracle Fundamentals」より」より
まとめに代えてまとめに代えて
–– CBOCBOへの対応への対応
1)一般的なアプローチ1)一般的なアプローチ
CBOCBOとうまく付き合うとうまく付き合う
次スライドで案内する次スライドで案内する33つのアプローチをバラつのアプローチをバラ
ンスよくンスよく
2)凝り性なアプローチ2)凝り性なアプローチ
CBOCBOの動作を徹底的に理解したい!の動作を徹底的に理解したい!
参考書籍のご案内参考書籍のご案内
CBOCBOとの付き合い方との付き合い方
① CBOを信頼せず、ヒント句/アウトラインで
実行計画を制御
② CBOの動作をできる
限り理解し、実行計画を 逐一吟味する
③ CBOの特性を(ある程度)理解し、CBOの
動作環境を整備する
・CBOの存在意義否定
・環境の変化に追随できない・実行頻度/パフォーマンス影
響大SQLに限定の適用は可
・吟味対象のSQLの限定が 必要
・典型的な落とし穴について は、本セッションで紹介
・現実的な解・動作環境の構成要素につ
いては、本セッションで説明
3つのアプローチをバランスよく
参考書籍:参考書籍:CBOCBOの理解のためにの理解のために
門外不出の門外不出のOracleOracle現場ワザ現場ワザ
データベースデータベース パフォーマンスパフォーマンスアップの教科書アップの教科書 基本原理編基本原理編
本気で学ぶ本気で学ぶSQLSQLチューニングチューニング ~~DB MagazineDB Magazine連載連載
以上すべて翔泳社以上すべて翔泳社 様様
CostCost--Based Oracle Based Oracle Fundamentals Fundamentals
APress(USAPress(US))
ご清聴ありがとう ございました
Thank you