Oracle Database 10 g パフォーマンス概要

パフォーマンスおよびスケーラビリティ
Oracle Database 10g パフォーマンス概要
Vineet Buch, Oracle Corporation
Herve Lejeune, Oracle Corporation
はじめに
Oracle Database は、イギリス内国歳入庁( Inland Revenue)の国税管理システム、フランス・テレコムの 10 TB データ・ウェ
アハウス、重電エンジニアリング企業 ABB の大規模 SAP R/3 システムなど、世界中で多数の大規模情報システムをサポー
トしています。Oracle6 におけるマルチバージョン読取り一貫性に始まり、Oracle Database では、各リリースでデータベー
スのパフォーマンスとスケーラビリティを改善するために設計された革新的な機能を発表してきました。また、各リリー
スは、その時点で使用可能な全主要プラットフォームにおいて、基本的に変更なしで実行できました。
Oracle Database 10g では、Windows と Linux の 64 ビット・バージョンを含む使用に向けて Oracle Database の対応プラッ
トフォームを拡大する一方、新しいパフォーマンス機能とデータベース最適化により、これからもデータベース・パフォー
マンスのリーダーシップを担い続けます。このホワイト・ペーパーでは、パフォーマンスとスケーラビリティに関する
Oracle Database 10g の新機能を中心に説明します。
グリッド・コンピューティングのためのデータベース
グリッド・コンピューティングは、コンピューティングの経済性に画期的な変革をもたらします。最高レベルでは、グリッ
ド・コンピューティングの基本的概念は、データがどこにあるか、どのコンピュータがリクエストを処理するかをユーザー
が考える必要がないことです。コンピューティングは、電力グリッド(送電網)や電話網に似た生活必需品と考えるべき
です。すなわち、グリッド・コンピューティングでは、ハードウェアとソフトウェア・リソースの供給が一元化されます。
厳密な技術的観点からこの供給は、パフォーマンスの向上につながらないかも知れません。しかし、ビジネス観点からこ
の供給は、ユーザーによりよいパフォーマンスを提供します。同じリソースを使用する状況では、事業の優先度やニーズ
に基づいて適切なアプリケーションにリソースが供給されることで、ユーザーのパフォーマンスは向上します。
グリッド・コンピューティングの概念は、オラクル社が長年にわたって開発してきた機能やテクノロジと同一線上にあり、
Oracle Database 10g は、今後のグリッド・コンピューティング・テクノロジの実現に向けて最適なアーキテクチャを備え
ています。
Oracle Database 10g パフォーマンス概要
1
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
リソース使用率の最適化
最適なリソース使用率をさらに保証するため、Oracle Database 10g には、構成の大部分を自動的かつ動的に管理し、使用
可能なリソースをチューニングする強力な組込みツールとセルフ管理機能があります。
セルフチューニング機能
Oracle Database 10g には、システム・リソースの消費の変動を活用するようにデータベース・パラメータを動的に調整す
る多数のセルフチューニング機能が導入されています。
セルフチューニング SGA
システム・グローバル領域(SGA)は、すべてのユーザーに共有されるメモリー領域で、特定の Oracle データベース・
インスタンスのためのデータと制御情報が入っています。SGA は、内部的にメモリー・コンポーネントに分割されてい
ます。それぞれのコンポーネントは、最後に使用されたデータのブロックを格納するリクエストや、データベースに対し
て行われた変更を記録するリクエストなど、メモリー割当てリクエストの各カテゴリを満たすために使用されるメモリー
のプールを表します。
図 1: 共有メモリーの自動チューニング
パフォーマンスが最適となるようにこれらのキャッシュのサイズをチューニングすることは、アドバイス・メカニズムが
あっても簡単なことではありません。コンポーネントのサイズが小さすぎて、メモリー割当てが失敗するか、サイズが大
きすぎて、他のキャッシュが使用できたはずのメモリーを無駄にするなどのリスクが常に存在します。
Oracle Database 10g ではセルフチューニング SGA が導入され、管理者は、SGA の合計サイズを指定するだけで、後は SGA
プール間の最適なメモリー配分を Oracle Database に内部的に決定させることができます。この新機能では、各種 SGA
キャッシュに対するメモリー配分は、ワークロードの変化に合わせて時間とともに動的に変化します。
Oracle9i で導入された PGA_AGGREGATE_TARGET パラメータをこの機能と一緒に使用することにより、Oracle Database
は、ワークロード分布の変化に合わせてメモリー消費量を自動的かつ動的に調整し、最適なメモリー使用率を保証できま
す。
Oracle Database 10g パフォーマンス概要
2
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
セルフチューニング・チェックポイント
チェックポイントは、メモリーで変更されたデータをデータベースのデータ・ファイルと同期化する手段です。Oracle
Database では、チェックポイント間で変更されたデータをデータ・ファイルに定期的に書き込むことにより、十分な量の
メモリーが使用できることを保証し、受信した操作のためにフリーなメモリーを探すパフォーマンスを改善します。
Oracle Database 10g 以前、管理者はチェックポイント関係の初期化パラメータ(FAST_START_MTTR_TARGET)の値を
設定することにより、推定クラッシュ・リカバリ時間(MTTR)を指定しました。管理者は、様々な MTTR 目標値で実
際の書込み数がどれくらい増加するかの予測を支援する MTTR アドバイス機能でこれを行うことができました。Oracle
Database 10g 以降は、データベースのチェックポイントをセルフチューニングし、通常のスループットにあまり影響を与
えずに良好なリカバリ時間を達成できます。自動チェックポイント・チューニングでは、Oracle Database は I/O 使用率の
低い期間を活用してメモリーで変更されたデータをデータ・ファイルに書き出すので、スループットに悪影響を与えるこ
とはありません。したがって、管理者がチェックポイントに関するパラメータを何も設定していない場合や、このパラメー
タが非常に大きな値に設定されている場合でも、リーズナブルなクラッシュ・リカバリ時間を達成できます。
最適化された PL/SQL
PL/SQL は、SQL を拡張したオラクル社の手続き型プログラミング言語です。SQL の簡便性と柔軟性を、構造化プログラ
ミング言語の手続き型の機能性と組み合せます。PL/SQL コードは、データベースに一元的に格納できます。
PL/SQL ストアド・プロシージャを使用することにより、パフォーマンスが向上し、メモリー使用率が最適化されます。
その理由として、次の点があげられます。
•
アプリケーションとデータベース間のネットワーク・トラフィックが減少します。
•
データベースでは、プロシージャのコンパイル済の形式を容易に利用できるので、実行時のコンパイルが必要ありま
せん。
•
プロシージャの 1 つのコピーを、複数のユーザーがメモリー内で共有できます。
Oracle Database 10g は、PL/SQL で大幅なパフォーマンス改善を達成しています。
PL/SQL コンパイラは書き換えられて、計算集中型の PL/SQL プログラムの効率を高め、最適化を促進するフレームワー
クを提供しています。新しいコンパイラには、多くのプログラムのパフォーマンスを実質的に改善する、より洗練された
コード・ジェネレータとグローバル・コード・オプティマイザがあります。その結果、特に計算集中型の PL/SQL プログ
ラムのパフォーマンスが向上し、純粋な PL/SQL プログラムでは、Oracle9i Database リリース 2 と比較して約 2 倍のパ
フォーマンスの向上を実現しました。
Oracle Database 10g パフォーマンス概要
3
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
*: 純粋な PL/SQL プログラムの場合
図 2: PL/SQL の改善係数(オラクル社の内部テスト)
また、PL/SQL 実行可能コードのサイズは最大 30%減少し、動的スタック・サイズは 2 分の 1 に縮小しました。これらの
サイズ減少により、PL/SQL プログラムのメモリーに対する圧力が低下したため、全体的パフォーマンス、スケーラビリ
ティ、信頼性が向上し、その結果 Oracle システム全体のパフォーマンスが向上します。
パフォーマンスの管理に役立つ Oracle Database 10g の新機能には、PL/SQL コンパイル時警告もあります。この機能は、
構文は正しいけれども、実行時パフォーマンスが低い可能性がある PL/SQL 構文のクラスを自動的に指摘します。
Oracle Database 10g では、Oracle9i Database に存在していた PL/SQL のネイティブ実行に対するいくつかの制限もなくなっ
ています。PL/SQL プログラムのネイティブ実行により、PL/SQL モジュールをネイティブ・コードにコンパイルするこ
とができ、これにはいくつかのパフォーマンス上のメリットがあります。第 1 に、バイト・コードの解釈に付随するオー
バーヘッドがなくなります。第 2 に、制御フローと例外処理は解釈されたコードよりネイティブ・コードのほうがはるか
に高速です。結果として、PL/SQL プログラムの実行速度が大幅に向上します。
Oracle Database 10g パフォーマンス概要
4
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
豊富な問合せ処理テクニック
Oracle Database には、非常に複雑な環境の要件に対処する多様な問合せ処理テクニックが用意されています。
次のような洗練されたテクニックがあります。
•
効率的なデータ・アクセスのためのコストベースの問合せ最適化
•
あらゆる種類のアプリケーション向けに調整された索引付けテクニックとスキーマ・オブジェクト
•
サマリー管理機能
Oracle Database 10g では、これらの機能に対していくつかの改善と拡張が行われています。
コストベースの問合せ最適化
問合せ(クエリー)の最適化は、リレーショナル・データベース、特に複雑な SQL 文の実行パフォーマンスにとって非
常に重要です。Oracle Database 10g では、コストベースの最適化戦略のみが使用されます。コストベースの最適化では、
1 つの問合せに対して複数の実行計画が生成され、各計画について予想コストが計算されます。そして、問合せオプティ
マイザにより、最良の計画すなわち予想コストが最も低い計画が選択されます。この問合せ最適化プロセスは、アプリケー
ションとエンドユーザーに対して完全に透過的です。
アプリケーションは非常に複雑な SQL コードを生成することがあるので、問合せオプティマイザは、良好なパフォーマ
ンスを保証するため、高度に洗練された堅牢なものである必要があります。Oracle Database の問合せオプティマイザは、
そのコスト・モデルの正確性と完全性、および特定の問合せのために指定されたデータにアクセスする最も効率的な手段
を決定するために使用されるテクニックとメソッドの結果として、優れた実行計画を生成します。
SQL 変換
オプティマイザは、オリジナル SQL 文を、同じ結果で返しますが、もっと効率的に処理できる SQL 文に変換できます。
ビューのマージや条件プッシュのような経験則による問合せ変換は、可能なかぎり適用されます。これらは、スキャン、
結合、集計するデータ量を大幅に減らすことにより、常に問合せのパフォーマンスを改善するからです。Oracle Database
では、コストベースの問合せ変換も適用されます。この場合、マテリアライズド・ビュー・リライトやスター変換のよう
な各種テクニックを使用して問合せを変換するかどうかの決定は、オプティマイザのコスト予測に基づいて行われます。
実行計画の選択
実行計画は、SQL 文処理の実行手順をすべて記述したものです。たとえば、どのような順序で表にアクセスするか、表
をどのように結合するか、索引を介して表にアクセスするかどうか、などです。
Oracle Database には、データベース構造、パーティション化と索引付けのテクニック、結合方法について、非常に豊富な
選択肢が用意されています。パラレル実行アーキテクチャでは、実際上、どのような SQL 文も任意のパラレル度で実行
できます。また、問合せオプティマイザは、ユーザーにより提供され、SQL 文に注釈として置かれている最適な示唆の
ヒントを考慮します。
結果として、1 つの SQL 文についてオプティマイザにより多数の異なる計画が生成されることがあります。同じ結果を
生成しながら、データへのアクセスや処理のために使用できるアクセス・パス、結合方法、結合順序の組合せに様々なバ
ラエティがあるからです。
Oracle Database 10g パフォーマンス概要
5
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
コスト予測
実行計画のコストを予測し、最低コストの計画を選択するため、オプティマイザでは、SQL 文の実行を構成する個々の
操作のコスト予測が使用されます。この予測は正確である必要性から、Oracle Database のデータ構造とアクセス方式につ
いての深い知識を取り込んだ非常に高度なコスト・モデルを、オブジェクト・レベルの統計やシステム統計およびパフォー
マンス情報と統合します。
•
オブジェクト・レベルの統計では、b-ツリー索引のレベル数や、表における列の個別値の数(カーディナリティ)な
ど、データベース内のオブジェクト(表、索引、マテリアライズド・ビュー)に関する情報が収集されます。列デー
タの分布の正確な予測を得るために、データ値ヒストグラムも使用できます。
•
システム統計は、標準的なワークロードのアクティビティ中に収集されたハードウェア・コンポーネント(プロセッ
サ、メモリー、ストレージ、ネットワーク)のパフォーマンス特性を示します。
Oracle Database10g では、デフォルト・コスト・モデルは CPU+I/O です。ある問合せの実行時間の予測には、問合せオプ
ティマイザは、その問合せの実行中にデータベースが実行する I/O 操作の数とタイプおよび CPU サイクル数を予測しま
す。次に、システム統計を使用して、この CPU サイクル数と I/O 操作数を実行時間に変換します。この改善されたコス
ト・モデルにより、よりよい実行計画が作成されるので、問合せのタイプによってはパフォーマンスが改善されます。
このような場合、I/O モデルと比較した改善係数は最大 77%(経過時間)になることがあります。
図 3: CPU+I/O コスト・モデルによるパフォーマンス改善の例
図 3 に示した最初の例では、問合せの結合が Oracle Sample スキーマの Sales 表と Products 表で行われています。問合せは、
Sales 表と Products 表の間に参照整合性制約があることをチェックします。I/O コスト・モデルでは、問合せオプティマイ
ザは Sales 表をスキャンするコストのみを考慮し、実行計画としてネステッド・ループを選択します。CPU+I/O コスト・
モデルでは、メモリーで実行される操作のコストが計算に入れられるので、オプティマイザはハッシュ結合を選択します。
この結果が、はるかによい実行計画であり、高いパフォーマンスを示します。
Oracle Database 10g パフォーマンス概要
6
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
さらに CPU+I/O コスト・モデルの潜在的メリットは、問合せで条件の順序を変更できる点です。条件の順序変更は、各
条件のコストを評価できる場合にかぎり可能になります。ほとんどの場合、条件のコストに含まれるのは CPU サイクル
のみなので、これは CPU+I/O コスト・モデルでのみ可能です。第 2 の例で使用された問合せは、2 つの条件を持ち、第 1
の条件の方が実行コストが高くなります。I/O コスト・モデルでは、条件はオリジナルの問合せの順序で実行されます。
CPU+I/O コスト・モデルでは、コストの低いほうの条件を先に実行するように、条件の順序が変更されます。この順序
変更により、第 2 の条件の実行は、第 1 の条件を満たさない行についてはスキップされるので、パフォーマンスがよくな
ります。1
統計とパフォーマンス情報を収集するプロセスは、高い効率と高度な自動化の両方を必要とするので、このプロセスを自
動化し、スピードアップする機能が多数使用されています。
Oracle Database 10g では、自動統計収集が導入されています。古い統計しかないオブジェクトや統計のないオブジェクト
が自動的に分析されるので、管理者は、分析する必要のあるものとないものを管理する作業から解放され、必要に応じて
のみ分析を行います。統計収集の完全自動化により、SQL 実行パフォーマンスが大きく改善されます。
Oracle Database は、サンプリングを使用して関係するデータのサンプルを調べることにより、統計を収集します。
サンプリングは、静的なものとすることも、問合せと同じトランザクションで発生する動的なものとすることもできます。
また、パラレル化と組み合せて使用できます。Oracle Database の統計収集ルーチンは、対象となる表のデータ特性に基づ
いて、適切なサンプリング割合と適切なパラレル度を自動的に決定します。また、Oracle Database は、どの列がヒストグ
ラムを必要とし、列データの分布の正確な予測を得るためにどれが使用されるかを絶対的に決定します。
ユーザーは、オプティマイザのアプローチと目標を設定することにより、オプティマイザの選択に関与できます。
Oracle Database には、2 つのオプティマイザ・モードがあります。第 1 のモードは、問合せの最初の n 行を返す時間を最
小にします。このモードは、最初の行の返すレスポンス時間を最良にするために運用システムのようなアプリケーション
に対応しています。第 2 のモードは、問合せからすべての行を返す時間を最小にし、最良のスループットを目標とする場
合に使用されます。
ランタイム動的最適化
SQL 実行のすべてを事前に最適に計画できるわけではないので、Oracle Database は、事業の優先度と現在のデータベー
ス・ワークロードおよびハードウェア能力に基づくランタイム動的調整を、問合せ処理戦略に取り入れています。
このような動的最適化の目標は、それぞれの問合せが理想的な量の CPU またはメモリー・リソースを獲得できない場合
でも最適なパフォーマンスを達成することにあります。
Oracle Database は、問合せのパラレル度を自動的に調整し、個々の問合せに対して適切な量のメモリーを動的に割り当て
ます。また、Resource Manager を使用し、リソース計画による指定された指示に基づき、各問合せにリソースを割り当て
ます。
その結果、問合せオプティマイザにより使用されるコストとサイズ・モデルの正確性が向上します。これは、オプティマ
イザがよりよい実行計画を生成し、問合せパフォーマンスを改善するのに役立ちます。
1
例の詳細は、付録 1 参照
Oracle Database 10g パフォーマンス概要
7
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
全表スキャン
Oracle Database 10g の使用全で表スキャンのパフォーマンスが、で大幅に向上しました。経過時間と CPU 使用率の改善係
数は、単純な条件または条件なしの単一表スキャンの場合で 40%∼60%です。
図 4: 全表スキャン
図 4 は、圧縮された表の全表スキャンについて測定されたパフォーマンス向上を示しています。2
索引構成表のリスト・パーティション化オプション
索引構成表では、索引付け情報とデータが一緒に格納されているので、プライマリ・キーでの完全一致検索や範囲検索を
含む問合せの場合、表データに高速でアクセスできます。索引構成表を使用すると、表とプライマリ・キー索引の両方で
のキー列の重複がないので、ストレージ要件が減少します。通常の索引では、索引値と行データをリンクするため、行の
ストレージ位置での追加ストレージが必要ですが、索引構成表では、これが不要になります。したがって、データを取り
出すために必要なアクセス時間が減少するので、パフォーマンスが向上します。
索引構成表は、パーティション化やパラレル問合せをはじめとするすべての表機能がサポートします。Oracle Database 10g
では、索引構成表のために使用可能なパーティション化オプションの選択肢としてリスト・パーティション化を含むよう
に拡張されました。
サマリー管理
マテリアライズド・ビューのための拡張サポート
マテリアライズド・ビューは、データの要約、事前計算、複製、配布のために使用できるスキーマ・オブジェクトです。
マテリアライズド・ビューは、データ・ウェアハウス、意思決定支援、分散コンピューティング、モバイル・コンピュー
ティングなど、様々なコンピューティング環境に適しています。たとえば、データ・ウェアハウス・アプリケーションで
は、月、製品、地域のような一般的ディメンジョンで詳細データを要約する問合せを発行することがよくあります。マテ
リアライズド・ビューは、そのような複数のディメンジョンと要約計算を格納するメカニズムを提供します。問合せオプ
2
例の詳細は、付録 1 参照
Oracle Database 10g パフォーマンス概要
8
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
ティマイザでマテリアライズド・ビューを使用することにより、問合せパフォーマンスが劇的に向上します
(問合せリライトに関する次の項参照)。
マスター表のデータが変更されたときマテリアライズド・ビューは、リフレッシュする必要があります。完全リフレッシュ
では、マテリアライズド・ビュー問合せを再実行して、マスター表からマテリアライズド・ビューの内容を完全に再計算
します。完全リフレッシュは非常に時間がかかるので、多くのデータ・ウェアハウス環境では、運用目標に合わせるため
の高速な増分リフレッシュが必要です。
高速リフレッシュでは、マスター表にある新規データや更新データを考慮し、様々な増分アルゴリズムを使用し、マテリ
アライズド・ビューを更新します。Oracle Database は、UPDATE(すなわちマスター表に対して直接実行されるロード操
作)のような従来の DML 操作時に使用される従来の高速リフレッシュ・メカニズム、およびベース表のパーティション
でのメンテナンス操作または DML 変更の後のパーティション認識高速リフレッシュ・メカニズムを提供しています。た
とえば、ベース表のパーティションで切捨てまたは削除が発生した場合、マテリアライズド・ビューで影響を受ける行が
識別され、削除されます。
Oracle Database 10g では、高速リフレッシュ・メカニズムに対するサポートをさらに広範囲のマテリアライズド・ビュー
に拡張しています。このリリースでは、パーティション認識高速リフレッシュは、ベース表がリスト・パーティション化
されているマテリアライズド・ビュー、またはパーティション・マーカーとして ROWID を使用するマテリアライズド・
ビューに拡張されました。
Oracle Database 10g では、機能依存性および問合せリライトを使用することによっても高速リフレッシュを拡張していま
す。ユーザーがディメンジョンの階層に沿ってマテリアライズド・ビューを定義している場合、Oracle Database は、ベー
ス表で影響を受けるパーティションに対応する、マテリアライズド・ビューで影響を受けるパーティションを検出し、他
のマテリアライズド・ビューまたはベース表に対する効率的なリフレッシュ式を生成します。
問合せリライトの強化
問合せリライトは、マテリアライズド・ビューからデータをフェッチすることにより、さらに高速で実行するように表と
ビューに関して書かれたユーザー問合せを変換する問合せ最適化技法です。
詳細レコードのサマリーを要求する問合せの場合、問合せオプティマイザは、その要求を満足するために既存のマテリア
ライズド・ビューを使用できるかどうか、そして使用すべきかどうかを自動的に判断します。オプティマイザは、基礎に
なっている表ではなくマテリアライズド・ビューを使用するように、問合せを透過的にリライトします。マテリアライズ
ド・ビューは、実行前にデータベース上に結合と集計操作を事前計算し、その結果をデータベースに格納しているので、
問合せパフォーマンスが劇的に向上します。マテリアライズド・ビューを使用するように問合せをリライトすることで、
問合せが発行されるたびに詳細レコードを合計する作業をなくすことができます。
できるかぎり広範な問合せのセットに対してマテリアライズド・ビューを使用できるように、Oracle Database ではマテリ
アライズド・ビューをリライトする非常に強力なテクニックのセットが用意されています。Oracle Database 10g では、問
合せリライトに複数のマテリアライズド・ビューを使用できます。したがって、より多くの問合せを問合せリライトに使
用できるようになったので、問合せレスポンス時間の向上が見込まれます。
Oracle Database 10g パフォーマンス概要
9
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
大量のデータの管理
大量のデータを管理するデータベース・システムは、Oracle の顧客に多数見られます。データベース・サイズは、Oracle
Database にとって問題ではありません。Oracle Database 10g は、最大 8 エクサバイト(800 万テラバイト)のデータを持
つ極めて大きなデータベースをサポートできます。
Oracle Database は、このような大量のデータの作成、配置、管理、使用を支援する強力なメカニズムを備えているだけで
なく、すべてのタイプでデータベース操作のパフォーマンスを大幅に向上させています。すべてのタイプの操作について
パラレル実行をサポートすることにより、パラレル処理の利点を完全に活用します。また、様々なアプリケーション・シ
ナリオを処理するように設計されたパーティション化メソッドとオプションを多数提供します。
Oracle Database 10g では、
いくつかの増強を提供することにより、これらのメカニズムをさらに拡張しています。
多数のパーティション
パーティション化がますます一般的に使用されるとともに、データ・ウェアハウスのサイズも成長を続け、数万のパーティ
ションを持つデータベース構造の作成も可能になっています。Oracle Database 10g では、
パーティション化されたオブジェ
クトのスケーラビリティとメモリー使用率を大幅に改善し、そのようなオブジェクトに対して行われる操作にパフォーマ
ンス上の影響がほとんど出ないように保証しています。
例として、21,504 個のパーティションを持つ表に対して行われる DROP TABLE 操作でのパフォーマンス改善の様子を、
図 6 に示します。このテストは、Oracle9i と比較して Oracle Database 10g では経過時間が約 56%に減少したことを示して
います。3
l_shipdate で範囲パーティション化(84 個のパーティション)、l_partkey でハッシュ・
パーティション化(パーティションあたり 256 個のサブパーティション)を使用する
TPC-H スキーマからの Lineitem 表 → 84 × 256=21504 パーティション
図 6: 多数のパーティションでの DROP TABLE
3
例の詳細は、付録 1 参照
Oracle Database 10g パフォーマンス概要
10
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
ハッシュ・パーティション化されたグローバル索引
グローバル索引は、一般にオンライン・トランザクション処理(OLTP)環境で使用されます。異なる基準を使用して個々
のレコードに効率的にアクセスする能力は、OLTP 環境では基礎的要件の 1 つです。この理由から、多くの OLTP システ
ムは、大きな表で多数の索引を持っています。オラクル社が社内で使用しているアプリケーションの E-Business Suite は、
その大きな表の多くに 1 ダース以上の索引を持っています。パーティション化されたグローバル索引は、パーティション
化の程度とパーティション化キーが表のパーティション化方法とは独立している点で、より高い柔軟性があります。これ
を次の図に示します。この図では、Customers 表は Customer_ID キーでパーティション化されています。
Customer_Name キーでグローバル索引を作成し、パーティション化することができます。
図 4: パーティション化されたグローバル索引の例
Oracle Database 10g では、表のハッシュ・パーティション索引、パーティション化された表および索引構成表を利用する
ことができます。これは、多数の同時挿入を行うアプリケーションでのスループットを向上させます。
高速データ移動
Oracle Database 10g には、大規模なデータ・ウェアハウスや複数のデータ・マートの効率的な構築とリフレッシュを容易
にするため、データの抽出、変換、ロード (ETL)を行う新機能が用意されています。
データの大量移動のために、Oracle Database 10g は、移植可能な表についてプラットフォームをまたぐサポートを提供し
ています。このサポートにより、あるプラットフォーム上のデータベースから大量のデータを非常に迅速に切り離して、
別のプラットフォーム上のデータベースに再接続できます。
Oracle Database 10g は、新しい Data Pump ユーティリティも導入します。Oracle Data Pump は、あるデータベースから別
のデータベースへのデータとメタデータの迅速な移動を可能にする、高速なパラレル・インフラストラクチャです。
このテクノロジは、Oracle の新しいデータ移動ユーティリティである Data Pump Export と Data Pump Import の基礎となっ
ています。
Oracle Database 10g パフォーマンス概要
11
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
Data Pump Export および Import の設計は、オリジナルの Export および Import より大幅に強化されたパフォーマンスを実
現します。次のグラフに、単一ストリーム・データ移動について、オリジナルの Export および Import ユーティリティと
新しい Data Pump ユーティリティとの経過時間の比較を示します。
図 5: Data Pump によるパフォーマンス向上の例
大規模ポータル会社からの単一ストリームの 1.0 GB のデータ(9.3M 行)。
ハードウェア: 1-CPU Ultra 60、1 GB メモリー、2 ディスク・ドライブ
さらに、PARALLEL パラメータを使用することにより、Import ジョブまたは Export ジョブのために稼働するアクティブ
な実行サーバーのスレッドの最大数を指定でき、データのアンロードとロードのパフォーマンスをさらに向上できます。
新しい Data Pump Export および Import ユーティリティは、オブジェクト選択でもさらに高い柔軟性を提供します。
すなわち、オブジェクトとオブジェクトのタイプに基づいた、ファイングレインなオブジェクト選択をサポートします。
この新しいユーティリティは、ソース・データベースとターゲット・データベース間で発生する Export/Import 操作のファ
イルレスなオーバーラッピングを実現するネットワーク・モードもサポートします。PL/SQL パッケージにより、ユーザー
は仕様公開されたインタフェースを使用して独自のデータ移動ユーティリティを作成できます。
Export/Import 環境の管理も、このリリースで改善されました。Data Pump 操作は、ジョブがユーザーの意思で停止された
か、不測の何かにより終了したかにかかわらず、完全に再開可能です。ユーザーは、あるジョブがどれくらいのディスク
領域を消費するかを調べ、そのジョブが完了するまでの時間を予測することができます。管理者は、長時間実行ジョブの
切断と再接続により、複数の場所からジョブを監視できます。また、パラレル度やダンプファイル可用性など、そのジョ
ブの特定の属性を変更できます。
Oracle Database 10g パフォーマンス概要
12
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
プラットフォーム固有の改善
Microsoft Windows ベースのシステム
Windows の 64 ビット・バージョンの登場により、ファイル・サイズやメモリー・アドレッシングに課せられていた制限
など、32 ビット・プラットフォームに存在していた制限がなくなりました。Oracle Database 10g は、ネイティブ 64 ビッ
ト・アプリケーションとして 64 ビット Windows で使用でき、Intel Itanium 2 プロセッサに基づくハードウェア・アーキテ
クチャの高パフォーマンスを最大限活用します。
Microsoft Windows プラットフォームにおけるトランザクション処理アプリケーションのパフォーマンスとスケーラビリ
ティも、Oracle Database 10g にファイバを使用することで改善されています。ファイバ(ユーザー・スレッドとも呼ばれ
る)は、オペレーティング・システム・レベルのスケジューラに関係するスケジューリングとコンテキスト・スイッチン
グのオーバーヘッドを大幅に削減またはゼロにする超軽量プロセスです。ファイバの使用により、Oracle Database は、独
自のインテリジェントな Oracle 対応スケジューリング・モデルを活用できます。ファイバに対するサポートは、既存の
アプリケーションに対して完全に透過的です。この新しい環境で実行するためにアプリケーション・コードを変更する必
要はありません。
高速 InfiniBand ネットワークのサポート
Oracle Net 高速相互接続サポートは、InfiniBand アーキテクチャや将来の他の高速ネットワークをサポートするために設
計された Oracle Database 10g の新機能です。
今日の主流である LAN とインターネットのプロトコル(TCP/IP)は、大容量インターネット・アプリケーションが必要
とするパフォーマンスを提供しません。そのようなアプリケーションは、操作の同期やデータの共有のために、ノード間
で高速な信頼性の高い情報交換を行う必要があります。高速、高密度、シリアル相互接続の InfiniBand は、このような制
限に対処し、データ・センターの増大する要求を満たすため特に設計されたものです。この機能は、中間コピーをなくす
こと、およびメッセージング作業の大部分を CPU からネットワーク・ハードウェアに移転することにより、ネットワー
ク通信のスループットを高め、CPU 使用率を削減します。InfiniBand を使用することにより、アプリケーションはメッセー
ジング作業の大部分を高速ネットワーク・ハードウェアに置き、他のタスクのために CPU を解放します。
Oracle Net 高速相互接続サポートにより提供される新機能は、SDP(Sockets Direct Protocol)と非同期 I/O の 2 つのカテゴ
リに分けることができます。SDP プロトコルは、クライアント/サーバー接続およびサーバー/サーバー接続のパフォーマ
ンスをスピードアップする高速通信プロトコルです。非同期 I/O サポートにより送信バッファおよび受信バッファをオペ
レーティング・システム・カーネルに渡すことができるので、CPU を大量消費するコピー操作をなくすことができます。
このサポートは、アプリケーションのパフォーマンス、特に大量のネットワーク・トラフィックを持つアプリケーション
のパフォーマンスの改善に役立ちます。
Oracle Database 10g パフォーマンス概要
13
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
パフォーマンス向上のための新機能のサマリー
次の表に、Oracle Database 10g で導入された主要なパフォーマンス機能のサマリーを示します。
領域
機能
パーティション化
ハッシュ・パーティション化されたグローバル索引
索引構成表に対するリスト・パーティション化サポート
Windows ベースのシステム
64 ビット Windows のサポート
Windows ファイバのサポート
ネットワーキング
高速 Infiniband ネットワークのサポート
マテリアライズド・ビュー
パーティション対応リフレッシュの改善
複数のマテリアライズド・ビューを使用できる問合せリライト
OLAP
パラレル SQL Import
パラレル AGGREGATE
問合せオプティマイザ
自動統計収集
PL/SQL
新しいコード・ジェネレータおよびグローバル・オプティマイザ
セルフチューニング・メモリー
セルフチューニング SGA
チェックポイントのセルフチューニング
ETL
Data Pump Export および Import ユーティリティ
プラットフォーム間で移植可能な表領域
Oracle Database 10g パフォーマンス概要
14
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
付録 1: 例の詳細
問合せオプティマイザ: CPU+I/O モデル
Sales 表:
SQL> desc sales
Name
Null?
Type
----------------------------------------- -------- ---------------------------COMPANY_ID
NOT NULL NUMBER(1)
PROD_ID
NOT NULL NUMBER
CUST_ID
NOT NULL NUMBER
TIME_ID
NOT NULL DATE
CHANNEL_ID
NOT NULL NUMBER
PROMO_ID
NOT NULL NUMBER
QUANTITY_SOLD
NOT NULL NUMBER(10,2)
AMOUNT_SOLD
NOT NULL NUMBER(10,2)
Products 表:
SQL> desc products;
Name
Null?
Type
----------------------------------------- -------- ---------------------------PROD_ID
NOT NULL NUMBER(6)
PROD_NAME
NOT NULL VARCHAR2(50)
PROD_DESC
NOT NULL VARCHAR2(4000)
PROD_SUBCATEGORY
NOT NULL VARCHAR2(50)
PROD_SUBCATEGORY_ID
NOT NULL NUMBER
PROD_SUBCATEGORY_DESC
NOT NULL VARCHAR2(2000)
PROD_CATEGORY
NOT NULL VARCHAR2(50)
PROD_CATEGORY_ID
NOT NULL NUMBER
PROD_CATEGORY_DESC
NOT NULL VARCHAR2(2000)
PROD_WEIGHT_CLASS
NOT NULL NUMBER(2)
PROD_UNIT_OF_MEASURE
VARCHAR2(20)
PROD_PACK_SIZE
NOT NULL VARCHAR2(30)
SUPPLIER_ID
NOT NULL NUMBER(6)
PROD_STATUS
NOT NULL VARCHAR2(20)
PROD_LIST_PRICE
NOT NULL NUMBER(8,2)
PROD_MIN_PRICE
NOT NULL NUMBER(8,2)
PROD_TOTAL NOT
NULL
VARCHAR2(13)
PROD_TOTAL_ID
NOT NULL NUMBER
COMPANY_ID NOT
NULL
NUMBER(1)
Products 表では、= PROD_ID キーを使用して products_pk 一意索引が作成されます。
Sales 表は 149,960,000 行、Products 表は 10,000 行です。
Oracle Database 10g パフォーマンス概要
15
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
例1
制約が実施されていることをチェックするために使用する問合せは、次のとおりです。
select * from sales where prod_id not in ( select prod_id from products);
例2
条件の順序変更をテストするために使用する問合せは、次のとおりです。
select count(*) from sales where to_number(to_char(time_id, 'YYYY')) > 1998 and
promo_id = 98;
CPU+I/O コスト・モデルでは、promo_id = 98 条件が先に実行されるので、実行時間が大幅に短縮されます。
全表スキャン
1998 年から 2002 年までの売上データが、圧縮をオンにして SALES 表にロードされます。Oracle9i Database と Oracle
Database 10g のどちらの場合も、合計 112,378,000 行の圧縮された SALES 表のサイズは 2709.75MB です。
SALES 表では索引は作成されません。
テストのために使用される 2 つの問合せは、次のとおりです。
select_1:
select * from sales where company_id !=2;
select_2:
select * from sales where amount_sold >14965 and company_id =2;
select_1 問合せは行を返しませんが、select_2 は 16 行を返します。この 2 つの問合せはいずれも 4 のパラレル度で実行さ
れます。
次の表に、Oracle9i と Oracle Database 10g 間のパフォーマンス比較を、経過時間と CPU 使用率の点から示します。
経過時間:
問合せ
Oracle9i Database
Oracle Database 10g
改善係数
select_1
00:00:39.20
00:00:19.33
51.02%
select_2
00:00:37.49
00:00:23.20
38.12%
CPU 使用率*:
問合せ
Oracle9i Database
Oracle Database 10g
改善係数
select_1
3.61 × 39.2 = 141.51
2.48 × 19.33 = 47.94
66.12%
select_2
3.84 × 37.49 = 14.96
3.55 × 23.20 = 82.36
42.78%
*: CPU 使用率 × 経過時間の平均
Oracle Database 10g パフォーマンス概要
16
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。
パフォーマンスおよびスケーラビリティ
多数のパーティション
パーティション化された表を作成するために使用される SQL(TPC-H スキーマの Lineitem 表):
create table l256(
l_shipdate
date ,
l_orderkey
number ,
l_discount
number ,
l_extendedprice
number ,
l_suppkey
number ,
l_quantity
number ,
l_returnflag
char(1) ,
l_partkey
number ,
l_linestatus
char(1) ,
l_tax
number ,
l_commitdate
date ,
l_receiptdate
date ,
l_shipmode
char(10) ,
l_linenumber
number ,
l_shipinstruct
char(25) ,
l_comment
varchar(44)
)
pctfree 1
pctused 99
initrans 10
storage (freelists 99)
parallel
nologging
tablespace ts_l
partition by range (l_shipdate)
subpartition by hash(l_partkey)
subpartitions 256
(
partition item1 values less than (to_date('1992-01-01','YYYY-MM-DD'))
,
partition item2 values less than (to_date('1992-02-01','YYYY-MM-DD'))
............
partition item84 values less than (MAXVALUE)
);
Oracle Database 10g パフォーマンス概要
17
Paper # 40087
Oracle Corporation 発行「ORACLE DATABASE 10g PERFORMANCE OVERVIEW」の翻訳版です。