RDBMSの処理性能を大きく左右するのは、SQL文の「実行計画」である。質の悪い実行計画が作成されると性能低下を引き起こすため、多くのDB担当者を悩ませている。この問題を解決するのがOracle Databaseの「SPM」という機能だ。ここ最近、利用企業が増え始めている。

 米OracleのRDBMS「Oracle Database 11g」に搭載されている「SPM(SQL Plan Management)」という機能をご存じだろうか。主な目的は処理性能の低下を防ぐことだ。

 この機能の採用案件数や認知度が、ここ1年くらいの期間でにわかに高まった。Oracle Databaseに詳しいアクアシステムズの川上明久氏(Technology Division マネージャー)は、「SPMが登場して以降、実案件で使われることはあまりなかったが、2012年の1年間で複数のユーザー企業が採用を決めた」と証言する。川上氏は、インターネットを通じたコンサートチケットの販売を手掛けるエンタテインメントプラスなどのシステム構築でSPMを利用したという。

 日本オラクルの人見尊志氏(製品戦略統括本部 テクノロジー製品推進本部 本部長)も、SPMへの急激な注目の高まりを身を持って感じている。「SPMのセミナーを開くと、従来は受講者のほとんどがSI会社の技術部門やオラクル製品専門部隊の担当者だった。しかし昨年から、そうした専門家ではない、一般のエンジニアの参加が目立つようになった」と話す。

質の悪い実行計画で性能が低下

 利用が増え始めているSPMとは、どのような機能なのだろうか。ひと言で表現すれば、「実行計画に関わる困った問題を解決する機能」だ。

 ここでOracle Databaseにおける実行計画を簡単に説明しよう。実行計画とは、RDBMS内部でSQL文をどのような順序で処理するかを決めたもの。その作成は、オプティマイザーという機能が受け持つ。オプティマイザーはSQL文を読み込んで、最も高速と考えられる実行計画を自動的に作成する。

 実行計画を作成するときに利用する情報が「統計情報」である。これにはRDBMSのさまざまな情報が含まれる。例えば、テーブルのレコード数、カラムデータの種類数や分布、CPUの処理能力などだ。オプティマイザーはこれらを基に最適な実行計画を作成するのだが、ここでポイントとなるのが「統計情報は変化する」ということだ。統計情報を参考に実行計画を作成するので、カットオーバー時に「この実行計画で問題ない」と判断しても、運用を続けると変わる可能性がある。

 そこで生じるのが「実行計画に関わる困った問題」である。具体的には「処理性能が突然低下した」といった現象のことだ(図1左)。Oracle Databaseを長く使っていれば、一度は経験したことがあるかもしれない。

図1●RDBMSの処理性能でよく起こる困ったケース
統計情報に基づいて実行計画を作成する場合も実行計画を固定する場合も、処理性能が低下することがある
[画像のクリックで拡大表示]

 エンタテインメントプラスの尾崎欧州氏(顧客・業務本部 システム部 運用・インフラグループ グループ長)も経験者の一人だ。同社では社内の会計システムでSPMが搭載されていないOracle Database 10gを使っていた。数週間に1度、夜間のバッチ処理が突然遅くなることがあった。「数分で終わるはずの処理に数時間かかってしまった。処理速度が全く変わったから、実態に合わない実行計画に切り替わったことがすぐに分かった」(エンタテインメントプラスの尾崎氏)という。実行計画は統計情報を基にするので、同じSQL文であっても、統計情報が変われば違う実行計画になることがある。

 統計情報が適切に収集されていないと、こうした現象を起こすことがある。

 この問題を避ける方法がなかったわけではない。実行計画を固定するのだ。例えば、統計情報の取得を停止したり、SQL文に「ヒント句」を埋め込んだりすることで、実行計画を固定できる。だがこの方法には別の問題がある。実行計画を固定すると、実行計画がRDBMSの実態からかい離していく。その結果、運用期間が長くなるに従って、徐々に性能が低下する可能性がある(図1右)。

この先は日経クロステック Active会員の登録が必要です

日経クロステック Activeは、IT/製造/建設各分野にかかわる企業向け製品・サービスについて、選択や導入を支援する情報サイトです。製品・サービス情報、導入事例などのコンテンツを多数掲載しています。初めてご覧になる際には、会員登録(無料)をお願いいたします。