大小アカウントとは、オプティマイザーが生成した実行計画が特定のデータセットに対して最適であるため、計画キャッシュに格納されることを指します。しかし、その後のデータセットに対しては最適ではなくなり、結果としてSQLリクエストの所要時間が増加し、スループットが低下します。
以下のシナリオを考えてみましょう:
あるテーブルにユーザー次元の注文情報が格納されており、各行にはユーザーIDと注文IDの2つのフィールドがあります。ユーザーIDと注文IDに対してそれぞれインデックスが作成されています。
この問題は、以下の方法で解決できます:
プランキャッシュのリフレッシュ:この操作は計画キャッシュ内の計画をクリアし、ハードパースをトリガーして新しい実行計画を生成しますが、それでも非最適な実行計画が生成される可能性があります。
実行計画のバインド:
CREATE OUTLINEステートメントを使用して、対象SQLに計画をバインドします。
詳細については、SQL FAQ の SQLクエリの「大小アカウント」問題の解決方法 セクションおよび SQLチューニングの典型的なシナリオと事例 の 大小アカウント セクションを参照してください。