OBServer側でパフォーマンスボトルネックが発生した場合、まずはボトルネックの箇所を特定する必要があります。つまり、ワーカースレッドが現在ブロック状態にあるのか、それとも長時間実行状態にあるのかを判断することです。前者は、何らかのシステムオブジェクトを待機していることを意味し、後者は大量のデータをスキャンしているか、リソース不足であることを示します。異なるボトルネックの箇所は、異なる根本原因と解決策を意味します。
OBServerは、パフォーマンスボトルネックの特定に役立つ豊富な内部テーブルとシステムログを提供しており、主にsql_auditを用いてOBServerの動作を分析します。
実行状態の問題
実行状態の問題は一般的に実行計画に関連しており、オプティマイザーが非最適な実行計画を生成したためにSQLリクエストが大量のデータをスキャンする必要がある場合や、計画キャッシュのヒット率が低くSQL実行時に追加のコンパイル時間がかかる場合が考えられます。実行計画の問題以外にも、ランタイムのリソース不足が原因である場合もあります。実行状態の問題は、通常、実行計画の調整やリソースの追加によって解決できます。
ブロック状態の問題
データベース内のワーカースレッドは、CPU計算を行っているか、I/O、ネットワーク、クリティカルセクションなどを待機しているかのどちらかであり、これらを総称してブロック状態と呼びます。ブロック状態はシステムの並行性ボトルネックを意味しており、リソースを追加するだけではスループットを向上させることはできません。ブロック状態の問題では、まずブロックポイントを特定し、それに対して最適化を施す必要があります。
以上の分析から、OBServer側で一般的な問題は主に以下のカテゴリに分類されます:
