innodb_flush_log_at_trx_commit
CRITICALOK
Rule IDs: rl_005, rl_006
Overview
- Purpose
- Documented in the MySQL 8.4 manual as a server system variable (scope: Global). Purpose and semantics are described at the linked manual page.
- Dynamic (MySQL 8.4 reference)
- MySQL 8.4 marks this variable as dynamic (
Dynamic= Yes). Runtime changes useSET GLOBAL(global scope) orSET SESSION(session scope) — confirm syntax and persistence (SET PERSIST) in the manual. - Default value
- 1 (MySQL 8.4)
- Version and product notes
- MariaDB and Percona Server may use different names, defaults, or dynamic behavior; verify their documentation.
- Documentation
- https://dev.mysql.com/doc/refman/8.4/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
- Other vendors
What is checked
Rules that reference this variable, with their severity and what each rule detects:
- CRITICAL
rl_005: Set innodb_flush_log_at_trx_commit=1 for full ACID durability in production. Only use 0 or 2 if you accept the data loss risk for performance. - OK
rl_006: Positive check — confirms configuration meets expected thresholds.
Tuning guidance
- Recommended actions:
- Set innodb_flush_log_at_trx_commit=1 for full ACID durability in production. Only use 0 or 2 if you accept the data loss risk for performance.
- Trade-offs: Larger redo logs reduce checkpoint frequency and improve write throughput, but increase crash recovery time. Durability settings (flush_log_at_trx_commit) trade performance for crash safety.
Example
SET GLOBAL innodb_flush_log_at_trx_commit = 1; -- Full durability
Always validate on a non-production instance first. Use SET PERSIST (MySQL 8.0+) for changes that should survive restarts.