本記事では、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()インターフェースの使用を推奨します。