DBAtlas · データベース運用アトラス

1197: Multi-statement transaction required more than 'max_binlog_cache_size'(複数文トランザクションが 'max_binlog_cache_size' を超える領域を必要とした)

MySQL

意味

単一のトランザクションが生成した binlog データが、max_binlog_cache_size で定義されたメモリ/キャッシュの上限を超えた。トランザクションがバイナリログに収まらないため、失敗してロールバックされた。

原因

非常に大きなトランザクション (数百万行の単一の INSERT/UPDATE/DELETE や巨大な一括ロード) が binlog キャッシュを満たした。バイナリログが有効な場合 (レプリケーション/ポイントインタイムリカバリ)、大きなトランザクションは容易にこの上限を超える。

対処方法

大きなトランザクションを小さなバッチに分割し、各バッチ後に COMMIT する。本当に大きなトランザクションが避けられない場合は、max_binlog_cache_size (必要に応じて binlog_cache_size も) を増やす。ETL/一括ロードでは、途中で COMMIT を挟む分割ロードにより、このエラーとロックの長時間保持の両方を防げる。

DBAtlas で開く →

同じデータベースの他の項目