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

35
渡部 渡部 亮太 亮太 株式会社コーソル 株式会社コーソル 13-D-3 プロとしての プロとしての Oracle Oracle アーキテク アーキテク チャ入門 チャ入門 ~番外編~ ~番外編~

Upload: devsumi2009

Post on 24-May-2015

6.801 views

Category:

Documents


0 download

TRANSCRIPT

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

渡部渡部 亮太亮太

株式会社コーソル株式会社コーソル

13-D-3

プロとしてのプロとしてのOracleOracleアーキテクアーキテク チャ入門チャ入門 ~番外編~~番外編~

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

““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時点時点))

渡部渡部 亮太亮太 –– ((株株))コーソルコーソル

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

本日の目標本日の目標

以下について理解していただくことを目標と以下について理解していただくことを目標としていますしています

1)1)SQLSQL実行実行//チューニングに関連するチューニングに関連するOracleOracleアーキテクチャの概要アーキテクチャの概要

2)2)CBOCBOと関連する構成要素と関連する構成要素

3)3)SQLSQL開発において注意すべき点開発において注意すべき点

DBDB運用ではなく、運用ではなく、SQLSQL開発を想定した説明開発を想定した説明となっています。となっています。

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

SGA共有プール

SQLSQL実行と実行とOracleOracleアーキテクチャアーキテクチャ

クライアント・アプリケーション

サーバプロセス

データベース・バッファキャッシュ

データファイル

(永続表領域)

SELECT

メモリ

ディスク

解析済み

SQL情報

一時ファイル

(一時表領域)

検証・解析

実行・フェッチ

PGA

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

SQLSQL発行と発行とSQLSQL解析解析SGA

共有プールクライアント・

アプリケーション

サーバプロセス①

SELECT

解析済み

SQL情報

②検証・解析

(ハードパース)

「検証・解析」で実施する処理「検証・解析」で実施する処理SQLSQL構文チェック構文チェック

アクセス対象オブジェクトのチェックアクセス対象オブジェクトのチェック

SQLSQLの最適化の最適化

実行計画の立案実行計画の立案

解析結果は共有プールにキャッシュ解析結果は共有プールにキャッシュ

キャッシュ

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

SQLSQLの実行と実行計画の実行と実行計画解析済みSQL情報

実行計画

アクセスパス

テーブルスキャン

索引スキャン+ A

Z

A

Z+

f(x)f(x)

ネステッドループ

ソートマージ

ハッシュ

結合方式+結合の順序

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

実行計画の立案と実行計画の立案とCBOCBO ((Cost Based OptimizerCost Based Optimizer))

SELECT * FROM EMPWHERE EMP_NO = :emp_no; CBO

オプティマイザ統計

・・・

収集

SQL 実行計画

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

システム統計

テーブル・索引

環境的な要因環境的な要因!!!!

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

テーブルと索引へのアクセステーブルと索引へのアクセス

・・・

・・・

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

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

: :?

? ?

:

?

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

ヒストグラムヒストグラム

: 収集

or

オプティマイザ統計 ・・・

高さベースのヒストグラム

値ベースのヒストグラム

高さ=頻度

幅=頻度

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

CBOCBOの欠点と対応策の欠点と対応策

利点:データ状態(の変化) に応じた実行計画を

立案できる

欠点:実行計画が変化して、突然パフォーマンスが変動する可能性がある

ヒント句の使用ヒント句の使用例例: SELECT /*+ : SELECT /*+ USE_NL(empUSE_NL(emp, dept) */ , dept) */ ……

アウトラインの使用アウトラインの使用例例: ALTER SESSION SET : ALTER SESSION SET use_stored_outlineuse_stored_outline = = <<outline_nameoutline_name>;>;

安定性を優先する場合

オプティマイザ統計

・・・

実行計画

影響

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

解析済み解析済みSQLSQL情報のキャッシュ情報のキャッシュ

クライアント・アプリケーション

SELECT

SGA共有プール

クライアント・アプリケーション

サーバプロセス①

SELECT

解析済み

SQL情報

②検証・解析

(ハードパース)③

キャッシュ

サーバプロセス

⑤検証・解析

(ソフトパース)

⑥再利用

一度実行された一度実行されたSQLSQLの解析結果は再利用されるの解析結果は再利用される⇒⇒ SQLSQL実行に伴う負荷を軽減実行に伴う負荷を軽減

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

実行実行//フェッチフェッチ

クライアント・アプリケーション

サーバプロセス

データファイル

(永続表領域)

③ 行

メモリ

ディスク

実行・フェッチ

SGAデータベース・

バッファキャッシュ

consistent gets

physical reads

①ファイルI/O

②メモリ

アクセス

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

DBDBバッファキャッシュのキャッシュ効果バッファキャッシュのキャッシュ効果

クライアント・アプリケーション

サーバプロセス

データファイル

(永続表領域)

③ 行

メモリ

ディスク

実行・フェッチ

SGAデータベース・

バッファキャッシュ

クライアント・アプリケーション

サーバプロセス

⑤ 行

実行・フェッチ①ファイルI/O

②メモリ

アクセス

④メモリ

アクセス

ディスクアクセス→低速

メモリアクセス→高速

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

パフォーマンス測定とキャッシュパフォーマンス測定とキャッシュ

シビアなパフォーマンス測定の場合は、シビアなパフォーマンス測定の場合は、キャッシュキャッシュを意識する必要がありますを意識する必要があります

明示的な明示的なDBDBバッファキャッシュのバッファキャッシュのflushflushが有効でが有効です(す(10g10g~)~)

ALTER SYSTEM FLUSH BUFFER_CACHE;ALTER SYSTEM FLUSH BUFFER_CACHE;

通常、通常、OSOS//ファイルシステムのバッファキャッファイルシステムのバッファキャッ

シュの影響はありませんシュの影響はありません大部分のプラットフォームで、大部分のプラットフォームで、OracleOracleははOSOS//ファイルファイル

システムのバッファキャッシュをバイパスしますシステムのバッファキャッシュをバイパスします

より厳密なレベルでは、ストレージのキャッシュより厳密なレベルでは、ストレージのキャッシュの影響を受けますの影響を受けます

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

サーバプロセス

PGA

一時ファイル(一時表領域)

ソート(必要な場合)ソート(必要な場合)SGA

クライアント・アプリケーション

データベース・バッファキャッシュ

③ 行

メモリ

ディスク

実行・フェッチ

メモリでソート⇒ 高速

ディスクでソート⇒ 低速

A

Z

A

Z

②ソート

②ソート

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

統計:キャッシュとソート統計:キャッシュとソート

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

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

SQLSQL開発において留意すべき点開発において留意すべき点1)実行計画(1)実行計画(+SQL+SQL)の妥当性チェック)の妥当性チェック

しかし・・・、複雑なしかし・・・、複雑なSQLSQLの妥当性チェックは困難の妥当性チェックは困難

そもそも、そもそも、CBOCBOが自動的に最適な実行計画を立案するが自動的に最適な実行計画を立案する

「はず」なのだから、開発者がいちいち実行計画をチェッ「はず」なのだから、開発者がいちいち実行計画をチェックするのはクするのはナンセンスナンセンス

ただし、最低限、以下はチェックしておきたいただし、最低限、以下はチェックしておきたい索引が使用できない索引が使用できないSQLSQLを書いていないかを書いていないか

処理データ量が大量な処理データ量が大量なSQLSQLの場合に、想定する実行計画の場合に、想定する実行計画

2)意味のあるパフォーマンスの測定(2)意味のあるパフォーマンスの測定(oror 把握)把握)

本番環境にできるだけ近い環境本番環境にできるだけ近い環境

データ量、オプティマイザ統計データ量、オプティマイザ統計については特に配慮をについては特に配慮を→→ CBOCBOによる実行計画の立案にも大きく影響による実行計画の立案にも大きく影響

キャッシュを意識した性能測定が必要な場合もキャッシュを意識した性能測定が必要な場合も

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

索引を使用できない索引を使用できないSQLSQL典型的な例典型的な例

NULLNULL値の検索値の検索

暗黙の型変換を伴う暗黙の型変換を伴うSQLSQL索引列へのファンクションの適用索引列へのファンクションの適用

等等参考:参考: 「パフォーマンスチューニングガイド」→「「パフォーマンスチューニングガイド」→「SQLSQLチューニングの概要」→「効率的なチューニングの概要」→「効率的なSQLSQL文の開発」文の開発」

SQL Tuning Advisor(10gSQL Tuning Advisor(10g~~))の利用も検討の利用も検討

要:要: Enterprise EditionEnterprise Edition + Diagnostic + Diagnostic PackPack+Tuning Pack+Tuning Pack

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

実行計画確認時の注意実行計画確認時の注意

1.1. 本番環境類似の環境整備本番環境類似の環境整備

2.2. オプティマイザ統計のメンテナンスオプティマイザ統計のメンテナンス

3.3. バインド変数を用いたバインド変数を用いたSQLSQLの実行計画のの実行計画の 確認方法確認方法

4.4. バインドピークが実行計画に与える影響バインドピークが実行計画に与える影響

5.5. クエリ変換クエリ変換

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

1)本番環境類似の環境整備1)本番環境類似の環境整備

実行計画立案にかかわる環境条件を、「実行計画立案にかかわる環境条件を、「でできるだけきるだけ」開発環境と本番環境で同じくする」開発環境と本番環境で同じくする

オブジェクト定義:テーブル、索引オブジェクト定義:テーブル、索引

オプティマイザ統計オプティマイザ統計

(システム統計)(システム統計)

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

データデータ

OracleOracleデータベース物理設計データベース物理設計

各種ハードウェア(各種ハードウェア(CPUCPU、ディスク)、ディスク)

一般的にはここらへんが限界?

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

2)オプティマイザ統計のメンテナンス2)オプティマイザ統計のメンテナンス

原則的に、原則的に、全てのオブジェクトの最新のオプ全てのオブジェクトの最新のオプティマイザ統計ティマイザ統計を取得すべきですを取得すべきです

開発中にオブジェクト、データの追加があった場開発中にオブジェクト、データの追加があった場合は適宜オプティマイザ統計を更新してください合は適宜オプティマイザ統計を更新してください

ただし、ただし、環境について環境について明確なポリシー明確なポリシーがあるがある場合はそれに準じます場合はそれに準じます

何らかの理由で、オプティマイザ統計取得対象何らかの理由で、オプティマイザ統計取得対象のオブジェクトが決まっているのオブジェクトが決まっている

オプティマイザ統計は環境ごとに独自に取得せオプティマイザ統計は環境ごとに独自に取得せず、本番環境からコピーして使用するず、本番環境からコピーして使用する

等等

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

DBMS_STATSDBMS_STATSの利用の利用

開発DB

本番DB

・・・

:オプティマイザ統計・・・

・・・

・・・

・・・

過去

現在

*.dmpEXPORT_ TABLE_STATS

IMPORT_ TABLE_STATS

RESTORE_ *_STATS (10g~)

オプティマイザ統計の収集には、原則としてオプティマイザ統計の収集には、原則としてDBMS_STATSDBMS_STATSパッケージを使用するパッケージを使用する

ANALYZEANALYZEコマンドは使用すべきでないコマンドは使用すべきでない

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

truncatetruncate tabletableとオプティマイザ統計とオプティマイザ統計

truncate tabletruncate tableしてもオプティマイザ統計はしてもオプティマイザ統計は

更新されません更新されません

よって、以下のような事態が発生しえますよって、以下のような事態が発生しえます

実際の行数実際の行数 = 0= 0オプティマイザ統計の行数オプティマイザ統計の行数 = 1000= 1000

CBOCBOはオプティマイザ統計を見るので、誤っはオプティマイザ統計を見るので、誤っ

た実行計画を立案する可能性がありますた実行計画を立案する可能性があります

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

3)バインド変数を用いた3)バインド変数を用いたSQLSQLの実行計画の実行計画

SQLSQLトレース、トレース、V$SQL_PLV$SQL_PLANANから実行計画から実行計画

を確認するのが安全ですを確認するのが安全です

explain planexplain plan文、文、SQL*PlusSQL*Plusののautotraceautotraceコマコマ

ンドは避けるンドは避ける

バインド変数を使ったバインド変数を使ったSQLSQLでは実際に実行されでは実際に実行され

た実行計画を確認できない場合がありますた実行計画を確認できない場合があります

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

SELECT * FROM tbl_xxxWHERE col1 = :var1;

4)バインドピーク(4)バインドピーク(9i9i~)~)

バインド変数にセットされバインド変数にセットされた値を元に、最適な実行た値を元に、最適な実行計画を立案する機能計画を立案する機能

:

?

:

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

バインドピークの落とし穴バインドピークの落とし穴

:

SELECT * FROM tbl_xxxWHERE col1 = :var1;

?

SELECT * FROM tbl_xxxWHERE col1 = :var1;

?

:

:

2回目の実行

1回目の実行

:

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

バインドピークの落とし穴を避けるバインドピークの落とし穴を避ける

1)バインドピークを1)バインドピークをOFFOFFにするにする

隠しパラメータ(隠しパラメータ(KROWN:81865KROWN:81865)の設定が必要)の設定が必要

本番環境との整合性本番環境との整合性を確認要を確認要

2)バインド変数を使用しない2)バインド変数を使用しない

そもそもバインド変数値により最適な実行計画が大幅そもそもバインド変数値により最適な実行計画が大幅に異なるに異なるSQLSQLでは、バインド変数を使用すべきでないでは、バインド変数を使用すべきでない

※※::11g11gでは、バインドピークの機能が改善では、バインドピークの機能が改善

11回目と回目と22回目で実行統計が大きく異なる場合は、回目で実行統計が大きく異なる場合は、33回目回目

では別の実行計画を立案では別の実行計画を立案

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

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’;

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

クエリ変換と実行計画クエリ変換と実行計画

変換された SQL

クライアント・アプリケーション

SQL

CBO

実行計画

注)一部のクエリ変換は

/* NO_QUERY_TRANSFORMATION */

ヒントで無効化可能

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

新種のクエリ変換の導入の流れ新種のクエリ変換の導入の流れ

実績的に新種のクエリ変換はひっそりと導入される傾向実績的に新種のクエリ変換はひっそりと導入される傾向にあるにある

このため、アプリ開発者の方(Oracle非専業)が、クエリ変換を把握して開発することは現実的に困難かも・・・

Beta-like State:

・クエリ変換実装済み・隠しパラメータ

または

Undocumentedなヒント

で制御可能

First official publication:

・クエリ変換がデフォルト

で常に適用・コスト計算なし

Final State:

・クエリ変換の適用有無

がコスト計算を基に判断・Undocumentedなヒントはdeprecatedに

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

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

まとめに代えてまとめに代えて

–– CBOCBOへの対応への対応

1)一般的なアプローチ1)一般的なアプローチ

CBOCBOとうまく付き合うとうまく付き合う

次スライドで案内する次スライドで案内する33つのアプローチをバラつのアプローチをバラ

ンスよくンスよく

2)凝り性なアプローチ2)凝り性なアプローチ

CBOCBOの動作を徹底的に理解したい!の動作を徹底的に理解したい!

参考書籍のご案内参考書籍のご案内

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

CBOCBOとの付き合い方との付き合い方

① CBOを信頼せず、ヒント句/アウトラインで

実行計画を制御

② CBOの動作をできる

限り理解し、実行計画を 逐一吟味する

③ CBOの特性を(ある程度)理解し、CBOの

動作環境を整備する

・CBOの存在意義否定

・環境の変化に追随できない・実行頻度/パフォーマンス影

響大SQLに限定の適用は可

・吟味対象のSQLの限定が 必要

・典型的な落とし穴について は、本セッションで紹介

・現実的な解・動作環境の構成要素につ

いては、本セッションで説明

3つのアプローチをバランスよく

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

参考書籍:参考書籍:CBOCBOの理解のためにの理解のために

門外不出の門外不出のOracleOracle現場ワザ現場ワザ

データベースデータベース パフォーマンスパフォーマンスアップの教科書アップの教科書 基本原理編基本原理編

本気で学ぶ本気で学ぶSQLSQLチューニングチューニング ~~DB MagazineDB Magazine連載連載

以上すべて翔泳社以上すべて翔泳社 様様

CostCost--Based Oracle Based Oracle Fundamentals Fundamentals

APress(USAPress(US))

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

ご清聴ありがとう ございました

Thank you