セッション管理では、セッションリストの表示、セッション統計の取得、デッドロック検出などのサービスを提供します。
背景
アプリケーションとデータベースの接続はセッションと呼ばれます。セッションタブで、全セッション数、アクティブセッション、および**アイドルセッション数**を確認できます。
セッションリスト
説明
- プロキシセッションとは、データベースプロキシサーバーが記録するセッションです。
- データベースセッションとは、OceanBaseサーバーが記録するセッションであり、そのOceanBaseサーバー上の一意のデータベース接続を識別するために使用されます。
- セッションリストタブには、現在時刻のセッションのみが表示されます。1つのプロキシセッションは複数のデータベースセッションに対応しますが、そのうち1つのデータベースセッションのみが表示されます。アクティブなデータベースセッションが存在する場合はそのセッションが表示され、存在しない場合はランダムに1つが表示されます。
操作手順
OB 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. ポップアップダイアログで、わかりました をクリックします。
複数セッションのスロットリング設定:
a. 対象セッションのチェックボックスを選択し、下部の バッチセットのスロットル をクリックします。
b. ポップアップダイアログで、最大同時実行数 を入力し、OK をクリックします。
c. ポップアップダイアログで、OK をクリックします。
説明
- チェックされたセッションに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日間の検出結果は保持されます。

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