セッション管理は、テナントのセッションの確認、セッション統計の取得、デッドロック検出を提供します。
背景
アプリケーションとデータベースの接続はセッションと呼ばれます。セッションタブで、全セッション数、アクティブセッション、および**アイドルセッション数**を確認できます。
テナントセッション
説明
- プロキシセッションとは、データベースプロキシサーバーが記録するセッションです。
- データベースセッションとは、OceanBaseサーバーが記録するセッションであり、そのOceanBaseサーバー上の唯一のデータベース接続を識別するために使用されます。
- テナントセッションタブには、現在時点のセッションのみが表示されます。1つのプロキシセッションは複数のデータベースセッションに対応しますが、そのうち1つのデータベースセッションのみが表示されます。アクティブなデータベースセッションが存在する場合はそのセッションが表示され、存在しない場合はランダムに1つが表示されます。
操作手順
OceanBase Cloudコンソールにログインします。
左側のナビゲーションペインで、**インスタンス**をクリックします。
インスタンスリストで対象のインスタンスを見つけ、インスタンス名をクリックしてインスタンスのダッシュボードに移動します。
左側のナビゲーションペインで 診断 をクリックし、診断 ページで リアルタイム診断 タブを選択します。
ページ中央の セッション タブをクリックします。
セッション管理 タブで、テナントセッション をクリックします。検索ボックスにプロキシセッションID、データベースセッションID、SQL ID、またはSQLテキストを入力してセッションを検索できます。
アクティブなセッションのみを表示 を選択し、セッションリストでアクティブセッション情報を確認します。複数のアクティブセッションを選択すると、一括でレート制限を設定できます。
説明
選択したセッションに対応する データベース名 に No_database が含まれている場合(データベース接続時にデータベース名が指定されていない場合)、一括でレート制限を設定できません。
SQL IDでセッションを集約 を選択すると、同じSQL IDを持つセッションが集約されて表示されます。
説明
- SQL IDでの集約は、異なるSQL IDのトラフィックと消費量を比較し、システムリソースの消費元を特定するのに役立ちます。
- SQL IDでセッションを集約 を選択する前提条件として、アクティブセッションのみ表示 が選択されている必要があります。
SQLで集計によるセッションの表示 を選択すると、集約in SQLに従ってセッションが表示されますが、統計データには影響しません。複数のアクティブセッションを選択すると、一括でレート制限を設定できます。
説明
- 集約in SQLとは、SQL文のin句内の定数パラメータの数を無視し、各in句を常に1つの定数パラメータしかないものとして扱い、このルールに従ってSQL文をパラメータ化し、SQL IDを計算することです。SQL IDが同じSQLは同種と見なされ、集約されます。
- 集約inでセッションを表示 を選択する前提条件として、SQL IDでセッションを集約 が選択されている必要があります。
- 選択したセッションに対応する データベース名 に No_database が含まれている場合(データベース接続時にデータベース名が指定されていない場合)、一括でレート制限を設定できません。
テナントセッションには、以下の情報が含まれます:
セッション情報説明プロキシセッションID データベースプロキシサーバーが記録したセッションID。 データベースセッションID OceanBaseサーバーが記録したセッションID。OceanBaseサーバー上の唯一のデータベース接続を識別するために使用されます。 SQL ID セッションが現在実行しているSQLのIDで、SQLの一意の識別子です。 SQLテキスト セッションが現在実行しているSQLの具体的な内容。 ユーザー セッションログインに使用されたデータベースユーザー名。 送信元 セッションを開始したアドレス。通常はクライアントIPです。 宛先 セッションを受信したアドレス。 データベースノード 現在のセッションがアクセスしているデータベースノード。 データベース 現在のセッションがアクセスしているデータベース。 コマンド セッションが現在実行しているコマンドタイプ。 実行時間(s) セッションが現在実行しているSQLにかかる時間。実行時間(秒)** をクリックしてセッションを並べ替えることができます。 CPU時間(s) セッションが現在実行しているSQLが占用するCPU時間です。**CPU時間(秒)**でセッションをソートできます。 状態 現在のセッションの状態。 **SQLテキストをクリックし、SQL実行の詳細**ページに移動して、完全なSQLテキストと最適化の推奨事項を確認します。
説明
-
SQLの実行計画が変更され、パフォーマンスが低下した場合、システムは計画のバインドを推奨します。SQLのインデックスが最適でなく、かつ以下の条件を満たす場合、システムはインデックスの最適化を推奨します。
- SQLの平均応答時間が20msを超えるか、平均CPU時間が10msを超える場合
- SQLタイプが:SELECT、SELECT_FOR_UPDATE、UPDATE、DELETEの場合
- SQLに難解な述語「OR」が含まれていない場合
- SQLにJOINが含まれていない場合
特定のセッションの操作列にある**セッションを閉じるをクリックすると、対応するセッションを削除できます。複数のセッションを選択すると、セッションをバッチで閉じる**を選択できます。
説明
セッションを閉じた後、セッション管理タブの右上にある最適化レコードを見る > 最適化履歴を選択して、タスクの状態を確認できます。
- スロットリングを設定します。
単一のセッションのスロットリング設定:
a. 対象セッションの操作列にある**スロットリングの設定**をクリックします。
b. ポップアップダイアログで、**最大同時実行性を入力し、OK**をクリックします。
c. 表示されたダイアログで、**OK**をクリックします。
複数のセッションのスロットリング設定:
a. 対象となるセッションのチェックボックスを選択し、下部の**バッチセットのスロットル**をクリックします。
b. ポップアップダイアログで、**最大同時実行数を入力し、OK**をクリックします。
c. 表示されたダイアログで、**確定**をクリックします。
説明
- チェックされたセッションにSQLが存在しない場合、スロットリングを設定できません。
- チェックされたセッションに対応するデータベース名にNo_databaseが含まれている場合(つまり、データベース接続時にデータベース名が指定されていない場合)、一括でのスロットリング設定はできません。
- スロットリングを設定した後、セッション管理タブの右上にある最適化レコードを見る > 最適化履歴を選択して、タスクの状態を確認できます。
セッション統計
**セッション統計**タブでは、ユーザー、アクセス元、データベースの各観点から、現在のクラスタのセッションアクティブ数とセッション総数を確認またはエクスポートできます。
右上の 10秒間のSQL分析 をクリックすると、10秒間におけるテナント内のSQL実行状況を集計できます。SQLタイプ、ユーザー、ソース、データベース のカテゴリ別に表示できます。
デッドロック検出
OceanBaseデータベースは、マルチバージョン2フェーズロックを用いて、その並行制御モデルの正しさを維持しています。ロックメカニズムは、適切なデータの並行性と一貫性を保証するために不可欠です。
ロックメカニズムの実装により、デッドロックが発生する可能性があります。デッドロックとは、リソースに対する循環的依存関係を指します。例えば、トランザクションAとトランザクションBが同時にリソース1とリソース2を取得しようとする場合、トランザクションAが先にリソース1を取得してからリソース2を取得しようとし、一方でトランザクションBが先にリソース2を取得してからリソース1を取得しようとします。このとき、どちらのトランザクションも既に取得したリソースを放棄する意思がない場合、どちらのトランザクションも正常に終了できません。
説明
OceanBaseデータベース3.2以降では、デッドロック検出機能をサポートしています。
操作手順
説明
デッドロック検出機能を有効にすると、OceanBaseデータベースはリアルタイムでデッドロックイベントを検出し、処理します。これにより、約2%のパフォーマンスが消費されます。実際の状況に応じて、有効にするかどうかを選択してください。
デッドロック検出を初めて使用する場合、自動デッドロック検出を有効にする をクリックします。
デッドロック検出が有効になると、システムはクラスタ内のテナントにデッドロックが存在するかどうかを診断し始め、デッドロック詳細 ページに診断結果を返します。過去7日間の検出結果は保持されます。

右上の 自動デッドロック検出を無効にする または更新アイコンをクリックすると、デッドロック検出の詳細を無効にしたり、更新したりできます。