今回は、Goldの「パフォーマンスチューニング - 実行計画のチューニング」からの出題です。
Total runtimeの値が大きくなる可能性がある
Total runtimeの値が小さくなる可能性がある
最上位ノードの全体推定コストが大きくなる可能性がある
最上位ノードの全体推定コストが小さくなる可能性がある
全く同一の実行計画が選択される可能性がある
※この例題は実際のOSS-DB技術者認定試験とは異なります。
【Aついて】
EXPLAIN ANALYZEで表示されるTotal runtimeは総実行時間を意味します。
enable_seqscanをoffにすることでTotal runtimeが大きくなる可能性としては、本来はシーケンシャルスキャンを利用すべきクエリなのに、他の効率の悪い方式が利用されてしまうケースが考えられます。
よって、Aは適切な内容です。
【Bについて】
enable_seqscanをoffにすることでTotal runtimeが小さくなる可能性としては、統計情報の精度が足りない等の理由で、本来はシーケンシャルスキャンを利用すべきではないのに選択されてしまっていたケースが考えられます。
この場合、enable_seqscanをoffにすることで、他の効率の良い方式が利用されるようになる可能性があります。
よって、Bは適切な内容です。
【Cについて】
シーケンシャルスキャンが絶対に必須のクエリの場合は、enable_seqscanがoffであっても、シーケンシャルスキャンが選択されることになります。
この時、シーケンシャルスキャンのコストは10000000000として算定されるようになるため、全体推定コストが極端に大きくなります。
よって、Cは適切な内容です。
【Dについて】
enable_seqscanをonからoffに変更した場合は、前述のようにシーケンシャルスキャンのコストが大きくなるわけであり、他の何らかのコストが小さくなるわけではありませんので、全体推定コストの小さい実行計画が選択される可能性はありません。
前述のBでは、総実行時間が短くなる可能性について言及していますが、enable_seqscanをoffにすることで総実行時間が短くなっていたとしても、全体推定コストは大きくなっていることになります。
(もしも全体推定コストが小さくなっているのだとすれば、enable_seqscanをoffにするより前に、その実行計画が選択されていなければならないことになります)
よって、Dは適切な内容ではありません。
【Eについて】
そもそもenable_seqscanがonの状態でもシーケンシャルスキャンがもともと選択されていないクエリの場合は、enable_seqscanをoffにしても全く同一の実行計画が選択される可能性があります。
よって、Eは適切な内容です。
正解は D です。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.