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 を挟む分割ロードにより、このエラーとロックの長時間保持の両方を防げる。
同じデータベースの他の項目
- 1055Expression not in GROUP BY (only_full_group_by)(GROUP BY にない式)
- 1267Illegal mix of collations(照合順序の不正な混在)
- 1030Got error N from storage engine(ストレージエンジンからエラー N を受け取った)
- 1785Statement violates GTID consistency(文が GTID 整合性に違反)
- 3024Query execution was interrupted, maximum statement execution time exceeded(最大文実行時間を超えたためクエリの実行が中断された)
- 1298Unknown or incorrect time zone(不明または誤ったタイムゾーン)
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled)(関数に DETERMINISTIC、NO SQL、READS SQL DATA のいずれもない (バイナリログ有効))