Oracle Exadata(11gR2)では、データベースが比較的頑丈です。
Oracle Enterprise Manager(OEM)での観察により、クエリが連続して実行されるためパフォーマンスがひどいことに気付きました。これを解決するために、すべてのテーブル、マテリアライズドビュー、およびインデックスが、並列処理を利用するように変更されました。例えば:
ALTER TABLE SOME_TABLE PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT);
並列化をオンにするようにシステムが変更されました。
ALTER SYSTEM SET PARALLEL_DEGREE_POLICY = 'AUTO';
これによりパフォーマンスが向上しましたが、単一のクエリでDOPが96(利用可能なすべてのリソース)になることがOEMで時々観察されました。これにより、後続のクエリが1のDOPにダウングレードされました(並列化なし)。クエリの処理が完了するまでパフォーマンスが低下します。
これを解決するために、次のコマンドを使用して、クエリで使用できるDOPを制限しようとしました。
ALTER SYSTEM SET PARALLEL_DEGREE_LIMIT = 24;
これは効果がありませんでした。制限(通常は48または96ですが、実際のパターンはありません)を超えるクエリを頻繁に確認します。
単一のクエリがすべての使用可能なリソースを占有するのをどのように防ぐことができますか?
Parallel Server Sets:PARALLEL_DEGREE_LIMITは並列処理の度合いを制限しますが、クエリがソートまたはグループ化されている場合、並列プロセスの数は2倍(2サーバー)プロセス間並列処理を有効にするための設定)。これが、24の制限があっても48の並列プロセスが表示される理由を説明しています。これは、リソースマネージャーを使用してDOPを制限する場合にも発生します。
並列ヒント:PARALLEL_DEGREE_LIMITは、自動並列度を使用するステートメントにのみ適用されます。ハードコーディングされた次数を使用するステートメント、またはオブジェクトレベルの並列ヒントのタイプでさえ、この制限は無視されます。これらのヒントがある場合、96が表示されることがある理由を説明できます。
キャリブレーションIO:おそらく自動DOPが使用されておらず、IO calibrated ではありませんでした。このクエリは、IOが調整されたかどうかを示します。
select * from V$IO_CALIBRATION_STATUS;
これにより問題が発生することは以前にもありましたが、現在のシステムは調整されておらず、自動DOPは正常に機能しているようです。これが本当に問題であるかどうかは、説明計画の「メモ」セクションを見ればわかります。 - automatic DOP: Computed Degree of Parallelism is 2
大丈夫ですが、見たくないですautomatic DOP: skipped because of IO calibrate statistics are missing
。
PARALLEL_MAX_SERVERSを増やします:並列サーバーの不足を心配する代わりに、PARALLEL_MAX_SERVERSを大幅に増やすことをお勧めします。メモリ設定に応じて、少なくとも デフォルト値 、PARALLEL_THREADS_PER_CPU x CPU_COUNT x concurrent_parallel_users x 5に戻してみてください。240から960の間です。
これらの高い数値は多くのDBAにとってばかげているように聞こえますが、実際には次の理由から多くの意味があります。