デッドロック検出パラメータの確認
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;