以下のトランザクション例を見てください:
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時間です。