パーティショニングは大規模DBの性能向上に効く:Oracleパーティショニング実践講座(1)(2/3 ページ)
本連載では、大規模データベースでのパフォーマンス・チューニングの手法として、Oracleパーティショニングを解説する。単なる機能説明にとどまらず、実機による検証結果を加えて、より実践的な内容をお届けする。(編集部)
パーティショニングのメリット
パーティショニングを勧める理由として、次の3つのメリットが挙げられます。
- レスポンスの向上
- 管理性の向上
- 可用性の向上
パーティショニングのそれぞれのメリットを少し掘り下げて見てみましょう。
レスポンスの向上
1番目の「レスポンスの向上」とは、問い合わせの処理を高速化できるという最もよく知られた(代表的な)パーティショニングのメリットです。
先ほどの図3の売り上げデータの例から分かるように、データの特性や利用目的に合わせ、論理的にデータを区分けし、必要なパーティションだけを処理することでレスポンスの向上が図れます。この必要となる特定のパーティションだけを参照する機能を「パーティション・プルーニング」と呼びます(図5)。パーティション・プルーニングはOracleが自動的に実施するため、既存のアプリケーションから発行するSQLをパーティション用に修正する必要はありません。
コラム:パーティション・プルーニングの効果
パーティション・プルーニングによりアクセスするブロックが減少するため、バッファ・キャッシュ・ヒット率などのパフォーマンス情報にその効果が表れます。Statspackレポートで非パーティション環境とパーティション環境を比べると、図6のようにバッファ・キャッシュ・ヒット率の差を確認できます。
管理性の向上
2番目の「管理性の向上」とは、メンテナンスがパーティション単位で行えるというデータ管理の効率化・高速化におけるメリットです。
パーティショニングでは、1つの表のデータを分割し、各パーティションを独立して管理しているため、パーティション自体を小さな表のように操作できます。1つの表パーティションごとにEXPORT/IMPORT、統計情報の取得、バックアップ・リカバリ、SQL*Loaderなどのメンテナンス管理操作を実行できるのです(図7)。表2に、一般的なパーティション単位のメンテナンス管理操作の特徴をまとめました。
Export/Import | ・パーティション単位でExport/Importを実行できるため、ほかのパーティションの問い合わせへの影響を低減 ・複数のパーティションに対して同時にExport/Importすることも可能 |
---|---|
統計情報の取得 | ・表全体もしくはパーティション単位で統計情報を収集することが可能 ・変更のあったパーティションだけをANALYZEすることにより、表全体をANALYZEするよりも非常に短い時間で実行できる(DBMS_STATSパッケージも同様) |
バックアップ・リカバリ | ・表全体もしくはパーティション単位でのバックアップ・リカバリを行うことが可能 ・各パーティションを別々の表領域に配置することにより、頻繁に更新がかかるパーティションのみのバックアップや、障害が発生したパーティションのみのリカバリを行うことができる |
SQL*Loader | ・表全体もしくはパーティション単位でローディングを実行することが可能 ・パーティション単位で実行できるため、ほかのパーティションへの問い合わせに影響を与えずにローディングを実行したり、複数のパーティションに対して同時にローディングを実行することが可能 ・従来どおりのパラレル・ロードも可能 |
索引の再構築 | ・パーティションのメンテナンス操作(ALTER TABLE MOVE PARTITION、ALTERTABLE MERGE PARTITION、ALTER TABLE SPLIT PARTITIONなど)によって索引がUNUSABLEとマークされた場合、索引パーティションを再び使えるようにするREBUILDコマンドはパーティション単位に行うことが可能 |
表2 パーティション単位の管理操作 |
また、パーティションのメンテナンス管理操作として、パーティションの移動、追加、削除、マージをほかのパーティションに影響を及ぼすことなく実行できます。このように、パーティションという小さな単位で処理を実施することで、ほかに影響を及ぼすことなく、素早くメンテナンスが実施できることがパーティショニングのメリットとなります。
さらに、メンテナンスがパーティション単位で行えることにより、過去のデータの管理も簡単に行えるようになります。データは、データベースに入れてしまえば終わりというものではありません。限られたディスクの領域をリサイクルしながら活用するために考えられたのが図8のローリング・ウィンドウ管理です。
例えば、過去5年分の売り上げデータだけを分析対象にするシステムの場合を考えてみましょう。5年を超えたデータを保持し続けるとディスクを占有してしまうため、新しい年度の売り上げデータをデータベースにローディングする際に、不要となった年度のデータを削除するものとします。しかし、大量にデータを削除/挿入する作業はシステムに大きな負担をかけますし、作業中に売上表に対するアクセスが制限されます。
これらの問題はOracleのパーティショニング機能を使用すれば簡単に解決します。図8のように、古いパーティションを削除し、新しいパーティションを作成して、そこにデータをロードするだけです。データのローディングや索引の作成はパーティション単位で実行されるため、作業中にほかのパーティションに対するアクセスが制限されることはありません。
可用性の向上
3番目の「可用性の向上」とは、パーティション単位で独立して管理できることによる、ディスク破損などを想定した障害時の可用性におけるメリットです。
パーティション単位で独立して管理できるということは、障害が発生した場合も利点となります。あるパーティションが、メンテナンス中もしくは障害などで使用できない場合でも、そのパーティションがアプリケーションからのアクセス対象外であれば、アプリケーションの処理を継続することができます。特定のパーティションのデータに障害が発生しても、システム全体に影響はありません。
図9のように、表のパーティションはそれぞれ異なるディスクに配置(格納)することが可能です。パーティションを複数のディスクに分散配置していれば、1つのディスクに障害が発生した場合でも表全体には影響が及ばず、障害が起きたディスク以外に格納されたパーティションは引き続き使用可能です。そのため、サービスの停止を最小限に抑えることが可能です。
さらに、リカバリを行うのは障害の起きたパーティションだけでよいため、表全体のリカバリを行うよりも短時間で復旧できます。
Copyright © ITmedia, Inc. All Rights Reserved.