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