以下のトランザクションの例:
create table test (id1 int);
set @@ob_query_timeout=200 * 1000 * 1000;
set @@ob_trx_timeout = 200 * 1000 * 1000;
begin;
insert into test values(1);
// 中間で150秒を空ける
insert into test values(2); // このSQLは「Lost connection」というエラーが発生します
select * from test; // このクエリの結果が空であることは、上記のトランザクションがロールバックされたことを意味します
rollback;
上記の実行シーケンスでは、2番目のINSERTステートメントが実行される際にクライアント側で「Lost connection」のエラーが表示されます。その理由は、トランザクション内の2つのSQL文の間隔が一定のしきい値を超えると、OceanBaseデータベースがセッションを強制的に終了し、クライアントとの接続を切断するとともにトランザクションをロールバックするためです。
このメカニズムは、長時間稼働するトランザクションや、待機状態にあるトランザクションを解消するために導入されています。アイドルタイムアウトのしきい値は、テナントのシステム変数 ob_trx_idle_timeout で設定され、デフォルト値は86400000000マイクロ秒(つまり24時間)です。