OceanBaseデータベースが実行される過程で、クライアントから送信されたトランザクションリクエストを実行し、実行終了後に結果をクライアントに返します。トランザクションの実行に失敗または例外が発生した場合、トランザクションエラーが発生します。一般的なトランザクションエラーは大きく分けて2つのカテゴリに分類されます。一つはトランザクション実行中にクライアントに投げかけられるエラーであり、もう一つはシステムログや内部ビューを通じて発見されるエラーです。以下では、これら2つのカテゴリのエラーをまとめ、一般的なトラブルシューティング手法をまとめて、一般的な問題を自力で発見しやすくします。
トラブルシューティング手法
トランザクションの問題に対するトラブルシューティング手法には、主にトランザクション状態テーブルの照会とシステムログの検索が含まれます。
ビューGV$OB_TRANSACTION_PARTICIPANTSは、クラスタ全体の未終了トランザクションの参加者コンテキスト情報を記録しており、リーダーおよびフォロワーのノードを含みます。現在のトランザクションのすべての参加者情報を収集することで、現在のトランザクション全体の実行状態を構築できます。その中で重要なフィールドは以下の通りです:
TX_TYPE:トランザクション実行中、リーダー上のこのフィールドはUNDECIDEDと表示されます。トランザクションコミット中、リーダー上のこのフィールドは、LOCAL、DISTRIBUTEDなど、そのトランザクションの具体的なタイプを表示します。STATE:トランザクション実行中の状態を示します。トランザクション実行中、このフィールドはACTIVEと表示されます。ACTION:トランザクション実行中、リーダー上のこのフィールドはSTARTと表示されます。トランザクションコミット中、リーダー上のこのフィールドはCOMMITと表示されます。
例えば、以下のステートメントは実行中のトランザクション情報を示しています。
obclient> select * from gv$ob_transaction_participants\G
*************************** 1. row ***************************
TENANT_ID: 1002
SVR_IP: 11.xx.xx.xx
SVR_PORT: 48274
SESSION_ID: 3221506881
SCHEDULER_ADDR: "11.xx.xx.xx:48270"
TX_TYPE: UNDECIDED
TX_ID: 752
LS_ID: 1002
PARTICIPANTS: NULL
CTX_CREATE_TIME: 2022-09-21 16:28:46.037405
TX_EXPIRED_TIME: 2022-09-21 16:43:37.804879
STATE: ACTIVE
ACTION: START
PENDING_LOG_SIZE: 57
FLUSHED_LOG_SIZE: 0
ROLE: LEADER
*************************** 2. row ***************************
TENANT_ID: 1002
SVR_IP: 11.xx.xx.xx
SVR_PORT: 48270
SESSION_ID: 3221506881
SCHEDULER_ADDR: "11.xx.xx.xx:48270"
TX_TYPE: UNDECIDED
TX_ID: 752
LS_ID: 1001
PARTICIPANTS: NULL
CTX_CREATE_TIME: 2022-09-21 16:28:37.804879
TX_EXPIRED_TIME: 2022-09-21 16:43:37.804879
STATE: ACTIVE
ACTION: START
PENDING_LOG_SIZE: 57
FLUSHED_LOG_SIZE: 0
ROLE: LEADER
システムログについては、Trace IDを使用して対応する時間帯内のOBServerログを検索することで、一つのステートメントの実行パス上のすべてのログを表示できます。また、Trans IDを使用して、そのトランザクションに関連するすべてのログを検索することもできます。