select /*+ parallel (5) */
並列度が奇数のようです。明らかに 5 は奇数で、それは奇妙です。DoP は 2 の累乗倍数である必要があります (詳細については以下を参照してください)。
とにかく、並列クエリを使用する理由はありますか? 少なくとも 5 つの予備のプロセッサがありますか? そうでない場合は、PQ スレーブを管理するオーバーヘッドが少なくともパフォーマンスの低下に寄与している可能性が高くなります。
DOP = n*2 にする必要があるのはなぜですか? 3 つ以上のバッチ ジョブを同時に実行するとパフォーマンスが低下するというキューイング理論に基づく確立されたヒューリスティックがあります。 詳細をご覧ください。 (キューイング理論では実際には 1.8 の数値が推奨されていると思いますが、データベース ジョブは I/O やディスクに拘束されることが多いため、通常は 2 で十分です。)
最初に「2 の累乗」と言いましたが、これは主にマルチコア サーバーが 2 のべき乗の CPU を搭載する傾向があるためですが、2 の倍数の方がより正確です。12 個の CPU を搭載しているボックスやその他の数のボックスがあるためです。
現在、64 コアのボックスを使用している場合、5 または 37 の DOP で問題ありません。これは、多くのスレッドを同時に実行するのに十分な CPU があるためです。しかし、小さなクアッドコア ボックスを使用している場合は、4 つのプロセッサすべてに作業を均等に分散させる唯一の値であるため、2、4、または 8 のみが意味を持ちます。クアッドコア ボックスで 5 つのスレッドを実行すると、1 つの CPU が他の 3 つよりも多くの作業を行うことになります。他の 3 つのスレーブを待たせて、完了するまでに時間がかかる可能性があります。そのDOP=5
ため、実際には よりも長い経過時間になる可能性がありDOP=4
ます。
DOP=n*2
あくまで経験則であり、決まったものではありません。ただし、これは健全な推論に基づくものであり、なぜ異なることを行っているのかを知っておく必要があります。明らかに、適切な DOP を選択したことを確認するために、いくつかの実験を行う必要がありました (どのような値に決めたとしても)。