本記事では、OceanBaseデータベースにおけるトランザクションの仕様について説明します。
OceanBase 3.x系では、大規模なトランザクション自体にサイズ制限はありませんが、並行処理の量を適切に管理し、メモリ使用量の急増を防ぐ必要があります。
WHERE句内のINリストパラメータの数に対する制限が撤廃されました。
OBServerノードの初期化時に、MemStoreのメモリ使用率が80%に達した場合、書き込みを開始する前に速度制限がかかります:
alter system set writing_throttling_trigger_percentage = 80 TENANT = ALL;
注意
速度制限により、clog再生速度が制限され、ダンプのトリガー時期に影響を与える可能性があります。
データを一括操作する際、プログラムには割り込み処理機能と、トランザクション失敗時の再試行メカニズムが必要です。
OceanBaseの分散トランザクションは2段階コミット方式を採用しているため、トランザクションには失敗時の再試行や、トランザクションステータスが未決定の場合の実行状態の確認メカニズムが必要です。
フロントエンドプログラムでは、
set names以外のSET文の使用を禁止します。これにはset timezone、set SQL_mode、set isolation_levelなどの類似コマンドも含まれます。唯一の主キーが必要な場合、シーケンスは非常に有用であり、グローバルに一意で連続した整数を提供できます。
セッションの同時実行数を制限します。
あるテナントがn個のCPUを持つ場合、通常そのテナントで同時にアクティブなユーザーセッション数は最大で
10*n個です。それ以降に追加される各並列セッションは、アクティブになる前に利用可能なワーカースレッドを待機します。自動トランザクションコミットを有効にする場合、
set @@autocommit=xxの実行は推奨されません。代わりにConnection.setAutoCommit(xx)インターフェースの使用を推奨します。トランザクションを開始する場合、
start transaction/beginの実行は推奨されません。代わりにConnection.setAutoCommit(xx)インターフェースの使用を推奨します。トランザクションを終了する場合、
commit/rollbackの実行は推奨されません。代わりにConnection.commit()またはConnection.rollback()インターフェースの使用を推奨します。