SlideShare a Scribd company logo
1 of 35
Download to read offline
プロとしてのOracleアーキテク
チャ入門 ~番外編~


13-D-3   渡部 亮太
         株式会社コーソル
渡部 亮太 – (株)コーソル
“OO厨”転じて“RDB厨”
2008/8に「プロとしてのOracle
アーキテクチャ入門」を上梓しま
した
所有資格: Oracle Master
 10g Platinum他
株式会社コーソル所属
 エンジニアのOracle Master 所有
 率(96%)
 社員79名(2009/1/20時点)
本日の目標
 以下について理解していただくことを目標と
 しています

 1)SQL実行/チューニングに関連する
 Oracleアーキテクチャの概要
 2)CBOと関連する構成要素
 3)SQL開発において注意すべき点

 DB運用ではなく、SQL開発を想定した説明
 となっています。
SQL実行とOracleアーキテクチャ
                                    SGA
                    サーバプロセス
                                  共有プール
           SELECT
                     検証・解析
 クライアント・
                                     解析済み
アプリケーション
            行                        SQL情報
                     実行・フェッチ
                                 データベース・
                                バッファキャッシュ

                     PGA
                                          メモリ
                                          ディスク

                     一時ファイル    データファイル
                    (一時表領域)    (永続表領域)
SQL発行とSQL解析
                                        SGA
                    サーバプロセス
             ①
                                       共有プール
           SELECT   ②検証・解析
 クライアント・                         ③
                    (ハードパース)              解析済み
アプリケーション                       キャッシュ
                                          SQL情報




    「検証・解析」で実施する処理
      SQL構文チェック
      アクセス対象オブジェクトのチェック
      SQLの最適化
      実行計画の立案
    解析結果は共有プールにキャッシュ
SQLの実行と実行計画
解析済みSQL情報

      実行計画

                 結合方式+結合の順序
 アクセスパス
                  ネステッドループ
  テーブルスキャン


                  ソートマージ
             +           A              A
                             +
  索引スキャン                 Z              Z
                  ハッシュ
                     f(x)        f(x)
実行計画の立案とCBO
                               (Cost Based Optimizer)
                                          実行計画
SQL
SELECT * FROM EMP
                                CBO
WHERE EMP_NO = :emp_no;




         初期化パラメータ
          初期化パラメータ
                                ・・・




                オプティマイザ統計                システム統計
                          収集
 環境的な要因!!
                                       テーブル・索引
テーブルと索引へのアクセス
  ・・・




                ・・・
選択率と最適なアクセス
         ?       ?
             ?




     :               :
             :
 ?
ヒストグラム          オプティマイザ統計   ・・・



           値ベースのヒストグラム


                高さ=頻度




      収集
  :
               or
           高さベースのヒストグラム
              幅=頻度
CBOの欠点と対応策

                       影響
                ・・・




  オプティマイザ統計                     実行計画
 利点:データ状態(の変化)                 欠点:実行計画が変化して、
  に応じた実行計画を                     突然パフォーマンスが
     立案できる                      変動する可能性がある

安定性を優先する場合
   ヒント句の使用
    例: SELECT /*+ USE_NL(emp, dept) */ …
   アウトラインの使用
    例: ALTER SESSION SET use_stored_outline =
    <outline_name>;
解析済みSQL情報のキャッシュ
                                          SGA
                    サーバプロセス
             ①
                                       共有プール
           SELECT   ②検証・解析
 クライアント・                         ③
                    (ハードパース)
アプリケーション                                    解析済み
                               キャッシュ
                                            SQL情報




                    サーバプロセス        ⑥再利用
             ④
                     ⑤検証・解析
           SELECT
 クライアント・            (ソフトパース)
アプリケーション



    一度実行されたSQLの解析結果は再利用される
      ⇒ SQL実行に伴う負荷を軽減
実行/フェッチ
                                               SGA
                  サーバプロセス
                                            データベース・
 クライアント・                                   バッファキャッシュ
                                    ②メモリ
アプリケーション
                                    アクセス
           ③行
                   実行・フェッチ


                  consistent gets          ①ファイルI/O


                                                 メモリ
                                                 ディスク
           physical reads           データファイル
                                    (永続表領域)
DBバッファキャッシュのキャッシュ効果
                                     SGA
                サーバプロセス
                                  データベース・
 クライアント・                         バッファキャッシュ
                          ②メモリ
                実行・フェッチ
アプリケーション
                          アクセス
           ③行
   ディスクアクセス
   →低速
                サーバプロセス

 クライアント・                         ①ファイルI/O
                          ④メモリ
                実行・フェッチ
アプリケーション                  アクセス
           ⑤行
                                       メモリ
   メモリアクセス
   →高速                                 ディスク

                          データファイル
                          (永続表領域)
パフォーマンス測定とキャッシュ
 シビアなパフォーマンス測定の場合は、
 キャッシュを意識する必要があります
  明示的なDBバッファキャッシュのflushが有効で
  す(10g~)
   ALTER SYSTEM FLUSH BUFFER_CACHE;
  通常、OS/ファイルシステムのバッファキャッ
  シュの影響はありません
   大部分のプラットフォームで、OracleはOS/ファイル
   システムのバッファキャッシュをバイパスします
  より厳密なレベルでは、ストレージのキャッシュ
  の影響を受けます
ソート(必要な場合)
                                      SGA
                 サーバプロセス
                                    データベース・
                            ①
 クライアント・         実行・フェッチ           バッファキャッシュ
アプリケーション
           ③行   ②ソート

                  PGA
  メモリでソート
                        A
  ⇒ 高速
                        Z
                                            メモリ
                            ②ソート

                                            ディスク
                   一時ファイル(一時表領域)
   ディスクでソート
                            A
   ⇒ 低速

                            Z
統計:キャッシュとソート
 consistent gets : バッファ読み込み(ブロッ
 ク数)
 physical reads : ファイル読み込み(ブロッ
 ク数)
 sorts (memory) : メモリソート(回数)
 sorts (disk) : ディスクソート(回数)

 V$SESSTAT / V$SYSSTATビュー
 SQL*Plus autotrace statistics
SQL開発において留意すべき点
 1)実行計画(+SQL)の妥当性チェック
  しかし・・・、複雑なSQLの妥当性チェックは困難
  そもそも、CBOが自動的に最適な実行計画を立案する
  「はず」なのだから、開発者がいちいち実行計画をチェッ
  クするのはナンセンス
  ただし、最低限、以下はチェックしておきたい
   索引が使用できないSQLを書いていないか
   処理データ量が大量なSQLの場合に、想定する実行計画
 2)意味のあるパフォーマンスの測定(or 把握)
  本番環境にできるだけ近い環境
   データ量、オプティマイザ統計については特に配慮を
   → CBOによる実行計画の立案にも大きく影響
  キャッシュを意識した性能測定が必要な場合も
索引を使用できないSQL
 典型的な例
  NULL値の検索
  暗黙の型変換を伴うSQL
  索引列へのファンクションの適用
  等
    参考: 「パフォーマンスチューニングガイド」→「SQL
    チューニングの概要」→「効率的なSQL文の開発」
 SQL Tuning Advisor(10g~)の利用も検討
  要: Enterprise Edition + Diagnostic Pack
  +Tuning Pack
実行計画確認時の注意
   本番環境類似の環境整備
1.
   オプティマイザ統計のメンテナンス
2.
   バインド変数を用いたSQLの実行計画の
3.
   確認方法
4. バインドピークが実行計画に与える影響
5. クエリ変換
1)本番環境類似の環境整備
 実行計画立案にかかわる環境条件を、「で
 きるだけ」開発環境と本番環境で同じくする
  オブジェクト定義:テーブル、索引
                        易
  オプティマイザ統計
  (システム統計)
  初期化パラメータ
                  一般的には
  データ              ここらへん
  Oracleデータベース物理設計 が限界?
  各種ハードウェア(CPU、ディスク)
                       難
2)オプティマイザ統計のメンテナンス
 原則的に、全てのオブジェクトの最新のオプ
 ティマイザ統計を取得すべきです
  開発中にオブジェクト、データの追加があった場
  合は適宜オプティマイザ統計を更新してください
 ただし、環境について明確なポリシーがある
 場合はそれに準じます
  何らかの理由で、オプティマイザ統計取得対象
  のオブジェクトが決まっている
  オプティマイザ統計は環境ごとに独自に取得せ
  ず、本番環境からコピーして使用する
  等
DBMS_STATSの利用
                                             :オプティマイザ統計
                                       ・・・



           開発DB
RESTORE_
                                                本番DB
 *_STATS
(10g~)                  ・・・
                  ・・・

            ・・・
                                                     ・・・
                          過去
            現在
            IMPORT_                           EXPORT_
                               *.dmp
              TABLE_STATS                      TABLE_STATS

   オプティマイザ統計の収集には、原則としてDBMS_STATS
   パッケージを使用する
     ANALYZEコマンドは使用すべきでない
truncate tableとオプティマイザ統計
  truncate tableしてもオプティマイザ統計は
  更新されません

  よって、以下のような事態が発生しえます
   実際の行数 = 0
   オプティマイザ統計の行数 = 1000


  CBOはオプティマイザ統計を見るので、誤っ
  た実行計画を立案する可能性があります
3)バインド変数を用いたSQLの実行計画
  SQLトレース、V$SQL_PLANから実行計画
  を確認するのが安全です

  explain plan文、SQL*Plusのautotraceコマ
  ンドは避ける
   バインド変数を使ったSQLでは実際に実行され
   た実行計画を確認できない場合があります
4)バインドピーク(9i~)

SELECT * FROM tbl_xxx
WHERE col1 = :var1;

             ?

                            :
                        :


   バインド変数にセットされ
   た値を元に、最適な実行
   計画を立案する機能
バインドピークの落とし穴
1回目の実行
SELECT * FROM tbl_xxx
WHERE col1 = :var1;
                            :
             ?

2回目の実行                              :
                        :
SELECT * FROM tbl_xxx
WHERE col1 = :var1;
                                :

             ?
バインドピークの落とし穴を避ける
 1)バインドピークをOFFにする
  隠しパラメータ(KROWN:81865)の設定が必要
  本番環境との整合性を確認要
 2)バインド変数を使用しない
  そもそもバインド変数値により最適な実行計画が大幅
  に異なるSQLでは、バインド変数を使用すべきでない


 ※:11gでは、バインドピークの機能が改善
  1回目と2回目で実行統計が大きく異なる場合は、3回目
  では別の実行計画を立案
5)クエリ変換    CREATE VIEW VW_EMP AS
               SELECT * FROM EMP
 サーバプロセス          WHERE sal > 1000;

  検証・解析    SELECT * FROM VW_EMP
                    WHERE job = ‘CLERK’;

 実行・フェッチ                       ビューマージ
           SELECT * FROM EMP
            WHERE sal > 1000
               AND job = ‘CLERK’;

                       OR展開 / INリストの
 ビューマージ
                       繰り返し
 条件節(WHERE句)の
 プッシュ                  等・・・
 副問合せのネスト解除
クエリ変換と実行計画
                                      CBO
 クライアント・
アプリケーション
                       変換された
  SQL
                       SQL




                                   実行計画




 注)一部のクエリ変換は /* NO_QUERY_TRANSFORMATION */
 ヒントで無効化可能
新種のクエリ変換の導入の流れ
Beta-like State:   First official         Final State:
                   publication:
                                          ・クエリ変換の適用有無
・クエリ変換実装済み                                がコスト計算を基に判断
                   ・クエリ変換がデフォルト
・隠しパラメータ または                              ・Undocumentedな
                   で常に適用
                                          ヒントはdeprecatedに
Undocumentedなヒント   ・コスト計算なし
で制御可能


                       ※:書籍「Cost-Based Oracle Fundamentals」より

  実績的に新種のクエリ変換はひっそりと導入される傾向
  にある
  このため、アプリ開発者の方(Oracle非専業)が、クエリ
  変換を把握して開発することは現実的に困難かも・・・
まとめに代えて – CBOへの対応
  1)一般的なアプローチ
    CBOとうまく付き合う
    次スライドで案内する3つのアプローチをバラ
    ンスよく


  2)凝り性なアプローチ
    CBOの動作を徹底的に理解したい!
    参考書籍のご案内
CBOとの付き合い方
               ・CBOの存在意義否定
① CBOを信頼せず、
               ・環境の変化に追随できない
ヒント句/アウトラインで
               ・実行頻度/パフォーマンス影
実行計画を制御
               響大SQLに限定の適用は可
               ・吟味対象のSQLの限定が
② CBOの動作をできる
               必要
限り理解し、実行計画を
               ・典型的な落とし穴について
逐一吟味する
               は、本セッションで紹介

③ CBOの特性を(ある   ・現実的な解
程度)理解し、CBOの    ・動作環境の構成要素につ
               いては、本セッションで説明
動作環境を整備する

     3つのアプローチをバランスよく
参考書籍:CBOの理解のために
 門外不出のOracle現場ワザ
 データベース パフォーマンス
 アップの教科書 基本原理編
 本気で学ぶSQLチューニング ~
 DB Magazine連載
   以上すべて翔泳社 様


 Cost-Based Oracle
 Fundamentals
   APress(US)
ご清聴ありがとう
 ございました
 Thank you

More Related Content

What's hot

Kotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKent Ishizawa
 
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流Yusuke Kawasaki
 
PXI, LabVIEW事例集2
PXI, LabVIEW事例集2PXI, LabVIEW事例集2
PXI, LabVIEW事例集2nishimizu
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDtripodworks
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hiroshi Ono
 
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜Hiromu Shioya
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術devsumi2009
 
12-E-3 カードゲームでプロマネ疑似体験
12-E-3 カードゲームでプロマネ疑似体験12-E-3 カードゲームでプロマネ疑似体験
12-E-3 カードゲームでプロマネ疑似体験Yasui Tsutomu
 
あなたにもできるアジャイルプラクティス2008
あなたにもできるアジャイルプラクティス2008あなたにもできるアジャイルプラクティス2008
あなたにもできるアジャイルプラクティス2008Seiji Kaneko
 
Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12umekoumeda
 
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~devsumi2009
 
【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心devsumi2009
 
云计算背后的商业模式变迁
云计算背后的商业模式变迁云计算背后的商业模式变迁
云计算背后的商业模式变迁Kevin cheng
 
090525-homology search(ensembl, local)
090525-homology search(ensembl, local)090525-homology search(ensembl, local)
090525-homology search(ensembl, local)ocha_kaneko
 
Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Katsumi TAZUKE
 
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...devsumi2009
 
ルーティングを使って シンプルなアプリケーション開発を
ルーティングを使ってシンプルなアプリケーション開発をルーティングを使ってシンプルなアプリケーション開発を
ルーティングを使って シンプルなアプリケーション開発をKousuke Ebihara
 

What's hot (20)

Kotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKotatsu-Model in Openthology
Kotatsu-Model in Openthology
 
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流
Mashup and new paradigm - マッシュアップ技術とインターネットの新しい潮流
 
PXI, LabVIEW事例集2
PXI, LabVIEW事例集2PXI, LabVIEW事例集2
PXI, LabVIEW事例集2
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARD
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
 
rrds08
rrds08rrds08
rrds08
 
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜慣れない言語で車輪の再発明をしよう〜JavaScriptでツリーソート編〜
慣れない言語で 車輪の再発明をしよう〜JavaScriptでツリーソート編〜
 
【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術【13-D-1】 ERP5に見るストレージ技術
【13-D-1】 ERP5に見るストレージ技術
 
12-E-3 カードゲームでプロマネ疑似体験
12-E-3 カードゲームでプロマネ疑似体験12-E-3 カードゲームでプロマネ疑似体験
12-E-3 カードゲームでプロマネ疑似体験
 
あなたにもできるアジャイルプラクティス2008
あなたにもできるアジャイルプラクティス2008あなたにもできるアジャイルプラクティス2008
あなたにもできるアジャイルプラクティス2008
 
Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12
 
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
【12-E-6】 ERP導入の投資対効果 ~SAPの導入事例を元に~
 
【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心【12-A-1】 開発プロセスの心
【12-A-1】 開発プロセスの心
 
云计算背后的商业模式变迁
云计算背后的商业模式变迁云计算背后的商业模式变迁
云计算背后的商业模式变迁
 
090525-homology search(ensembl, local)
090525-homology search(ensembl, local)090525-homology search(ensembl, local)
090525-homology search(ensembl, local)
 
Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Persona design method / ペルソナ概論
Persona design method / ペルソナ概論
 
XS Japan 2008 App Data Japanese
XS Japan 2008 App Data JapaneseXS Japan 2008 App Data Japanese
XS Japan 2008 App Data Japanese
 
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
【12-E-4】 『脱Excel』を実現!統合プロジェクト管理パッケージ『SI Object Browser PM』を利用してIT企業も近代化しよう~PM...
 
ルーティングを使って シンプルなアプリケーション開発を
ルーティングを使ってシンプルなアプリケーション開発をルーティングを使ってシンプルなアプリケーション開発を
ルーティングを使って シンプルなアプリケーション開発を
 
XS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti JapaneseXS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti Japanese
 

More from devsumi2009

【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れてdevsumi2009
 
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化devsumi2009
 
【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝devsumi2009
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるにはdevsumi2009
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~devsumi2009
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~devsumi2009
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おうdevsumi2009
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~devsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場からdevsumi2009
 
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!devsumi2009
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能devsumi2009
 
【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発devsumi2009
 
【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組みdevsumi2009
 
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレートdevsumi2009
 
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」devsumi2009
 
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...devsumi2009
 
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例devsumi2009
 
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らずdevsumi2009
 

More from devsumi2009 (20)

【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
【12-B-1】 実例で学ぶ Objective-C 2.0 と GUI の関係~ iPhone アプリ開発を視野に入れて
 
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
【13-C-3】 RIA 開発をとりまく技術の進化と環境の変化
 
【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝【13-C-5】 パネルディスカッション 帳票開発の肝
【13-C-5】 パネルディスカッション 帳票開発の肝
 
【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには【13-B-3】 企業システムをマッシュアップ型に変えるには
【13-B-3】 企業システムをマッシュアップ型に変えるには
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
 
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
【13-B-4】 Java VMへの処方箋 ~先進のメモリ管理技術とは~
 
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
【13-B-2】 パネルディスカッション:クラウド時代のプログラミングスタイルを語り合おう
 
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
【13-C-6】 帳票開発に時間かけすぎていませんか?~もっと簡単に「作る」現場、「使う」現場の最適解を探る~
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から【13-E-1】 システムの見える化~エンドユーザーの立場から
【13-E-1】 システムの見える化~エンドユーザーの立場から
 
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
【13-D-4】 アナタのアプリ性能改善の秘訣、オラクルが教えます!
 
【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能【12-B-4】 並列処理開発を支援するコンパイラの機能
【12-B-4】 並列処理開発を支援するコンパイラの機能
 
【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発【12-D-2】 WPF アプリケーション開発
【12-D-2】 WPF アプリケーション開発
 
【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み
 
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
【12-A-2】 ケーススタディ:不景気と戦うシステムインテグレート
 
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
【13-C-4】 「もう業務はとまらない!オフライン機能を使った業務アプリケーションの実例と最新 Curl 情報」
 
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...
【13-A-2】 「Delphi for PHP のエバンジェリストが、日本の PHP エバンジェリストと、 PHP と IDE の今と未来を語る」~Em...
 
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例
【12-A-4】 Eclipse-Way :分散アジャイル開発のためのプラクティスとその事例
 
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
【13-C-7】 Developers [Media] Summit Web メディア編集者の Web プロジェクト知らず
 

【13-D-3】 プロとしてのOracleアーキテクチャ入門 ~ 番外編 ~

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