コストベース・オプティマイザの拡張:最初のN行の最適化

Oracle9iは、各アプリケーションで必要とされる問合せパフォーマンス・チューニングのための多くの強力な機能を提供します。 Oracle9iで拡張されたチューニング機能の1つが最初のN行の最適化です。最初のN行の最適化により、Oracleの問合せは 結果セットの最初のN行に対して最短応答時間を提供します。最初の数行に対する迅速な応答により、ユーザーはデータの 初期セットをより迅速に受け取ることができるため、多くのアプリケーション・ユーザーの満足度が高まります。

Oracleでは、デフォルトでスループットが最大限になるように問合せが最適化されます。高いスループットは、Oracleに よって問合せで返されるすべての行を処理するために必要なリソースが最も少なくて済む実行計画が選択されることを意味します。 多くのアプリケーションでこのアプローチが有効な一方で、高速な初期応答時間を実現するための問合せの最適化がますます 重要になっています。エンド・ユーザーのための高度にインタラクティブなアプリケーションは、結果の最初の数行をできる だけ早く提供する必要があります。
このようなアプリケーションの例として、ビジネス・インテリジェンスのためのWebベース の問合せシステムがあります。このようなシステムのユーザーは、数百または数千行を生成するようなデータベース要求を しばしば発行しますが、ユーザーが1度に参照する必要があるのは数行だけです。

問合せを発行し、その問合せで1000行が返されることを知るためだけに応答を長時間待っているユーザーを想定してみてください。 実際には、このユーザーは1度に数十行を調べることだけを望んでいるのです。すべての行を同時に返されても、ユーザーに とっては何の得もありません。したがって、アプリケーションが最初の数行をできる限り早く提供し、ユーザーの待機時間が 短縮されればユーザーはより満足します。ユーザーが結果の最初のN行を調べている間に、アプリケーションは残りのデータに 対する作業を続行できます。

最初のN行の最適化は、問合せオプティマイザに対し、問合せ結果の最初の数行の生成にかかる応答時間が最短になる 問合せ実行計画を選択するように指示します。最適化する数行の値は、アプリケーションの使用パターンに応じて アプリケーション開発者が指定します。Oracle9iの最初のN行の最適化は、これまでのリリースで行われていた最初のN行の 最適化に対する重要な拡張です。これまでの最適化では、内部ルールとコストの組合せを使用して問合せ計画が生成されて いましたが、Oracle9iの最初のN行の最適化は完全にコストベースです。

この最初のN行の最適化を有効にするには、3つの方法があります。 次に示す各ケースで、Nの値は行の数で応答時間を最適化します。
  • OPTIMIZER_MODE初期化パラメータ
    ユーザーは初期化ファイルに次の文を含めます。
    OPTIMIZER_MODE = FIRST_ROWS_N

  • OPTIMIZER_MODEOPTIMIZER_MODEセッション・パラメータ
    ユーザーは次の文を発行します。
    ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS_N
    セッション設定が使用されると、すべての初期化設定よりも優先されます。

  • OPTIMIZERヒント
    問合せテキストに次のヒントが含まれます。
    SELECT /*+ FIRST_ROWS(N) */ ....
    ヒントが使用されると、すべてのセッションおよび初期化設定よりも優先されます。
Oracle9iで使用可能な拡張された最初のN行の最適化により、あらゆるタイプのデータベース・スキーマと問合せの パフォーマンスが大幅に改善されます。最初のN行の最適化は、Oracle9iをデータベース・パフォーマンス・リーダーに する多数のチューニング機能の一例に過ぎません。
 
追加情報
 Oracle9i Database マニュアル(ドキュメント) - パフォーマンス&レプリケーション - パフォーマンス・ガイドおよびリファレンス - 第5章 オプティマイザ・ヒント

Oracle9i Database Daily Feature
 アーカイブ