デッドロック検出パラメータの確認
OceanBaseデータベースでは、デッドロック検出に関連する構成パラメータは、クラスタレベルの隠れた構成パラメータ _lcl_op_interval です。この構成パラメータは、LCL(Lock Chain Length)デッドロック検出アルゴリズムにおけるノード間のメッセージプッシュの間隔時間を制御します。
OceanBaseデータベースV4.xバージョンでは、隠れた構成パラメータ _lcl_op_interval のデフォルト値は30msであり、デフォルトでデッドロック検出が有効になっています。この構成パラメータの値が小さいほど、デッドロック検出の遅延は低くなり、システムリソースの消費は多くなります。値が大きいほど、デッドロック検出の遅延は高くなり、リソース使用量は少なくなります。
_lcl_op_interval の値を0msに設定すると、LCLデッドロック検出機能が無効になります。通常、LCLデッドロック検出機能は無効にすることを推奨します。無効にした後は、デッドロックは依存するトランザクションのタイムアウトによるロールバックメカニズムで処理されます(トランザクションのデフォルトタイムアウト時間は変数ob_trx_timeoutで制御されます)。
デッドロック検出機能が有効かどうかを確認する方法は以下のとおりです:
ビューを使用した確認
ビュー GV$OB_PARAMETERS は、クラスタ内のすべての構成パラメータ(隠れた構成パラメータ、つまり _xx_xx 形式のパラメータを含む)とそのすべてのプロパティ記述を記録しています。ユーザーはこのビューを使用して隠れた構成パラメータ _lcl_op_interval の値を確認できます。
システムテナント
システムテナントでは、以下のステートメントを実行して確認できます。
obclient> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME='_lcl_op_interval';ユーザーテナント
MySQLモードのユーザーテナントでは、以下のステートメントを実行して確認できます。
obclient> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME='_lcl_op_interval';Oracleモードのユーザーテナントでは、以下のステートメントを実行して確認できます。
obclient> SELECT * FROM SYS.GV$OB_PARAMETERS WHERE NAME='_lcl_op_interval';
SHOWステートメントを使用した確認
隠れた構成パラメータ _lcl_op_interval の値がデフォルト値以外に変更された場合にのみ、以下のステートメントを実行して確認できます。
obclient> SHOW PARAMETERS LIKE '%_lcl_op_interval%';
デッドロックイベントの確認
ビュー CDB_OB_deadLOCK_EVENT_HISTORY(システムテナント)または DBA_OB_DEADLOCK_EVENT_HISTORY(ユーザーテナント)には、発生したすべてのデッドロックイベントとそれらのイベントに参加したトランザクションが記録されており、デッドロックイベントにおいて最終的にキルされたトランザクションが示されています。
システムテナント
システムテナントでは、以下のステートメントを実行して確認できます。
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_DEADLOCK_EVENT_HISTORY WHERE TENANT_ID=tenant_id;ユーザーテナント
MySQLモードのユーザーテナントでは、以下のステートメントを実行して確認できます。
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_DEADLOCK_EVENT_HISTORY;Oracleモードのユーザーテナントでは、以下のステートメントを実行して確認できます。
obclient [SYS]> SELECT * FROM SYS.DBA_OB_DEADLOCK_EVENT_HISTORY;