1197: Multi-statement transaction required more than 'max_binlog_cache_size' (la transaction multi-instructions a nécessité plus que 'max_binlog_cache_size')
MySQLQue signifie cette erreur ?
Les données de binlog générées par une seule transaction ont dépassé la limite de mémoire/cache définie par max_binlog_cache_size. La transaction ne tenait pas dans le binary log, elle a donc échoué et a été annulée.
Cause
Une très grosse transaction (un seul INSERT/UPDATE/DELETE de millions de lignes ou un énorme chargement en masse) a rempli le cache du binlog. Avec la journalisation binaire activée (réplication/restauration à un instant donné), les grosses transactions peuvent facilement dépasser cette limite.
Comment la corriger
Découpez la grosse transaction en lots plus petits ; faites un COMMIT après chaque lot. Si de très grosses transactions sont inévitables, augmentez max_binlog_cache_size (et binlog_cache_size si nécessaire). Dans les chargements ETL/en masse, un chargement par blocs avec des COMMIT intermédiaires évite à la fois cette erreur et les verrous détenus longtemps.
Autres entrées pour ce moteur
- 1055Expression not in GROUP BY (only_full_group_by) (expression absente du GROUP BY)
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1785Statement violates GTID consistency (l'instruction viole la cohérence GTID)
- 3024Query execution was interrupted, maximum statement execution time exceeded (exécution de la requête interrompue : durée maximale d'exécution dépassée)
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled) (la fonction n'a ni DETERMINISTIC, ni NO SQL, ni READS SQL DATA ; journalisation binaire activée)