dbaas/mysql: innodb_doublewrite=DETECT_ONLY to halve page-flush writes
All checks were successful
ci/woodpecker/push/default Pipeline was successful

MySQL device-write investigation (code-oflt): after the nextcloud webcal
throttle settled (the earlier 3.4-8.8 MB/s were post-restart transients),
MySQL is ~1.74 MB/s at the InnoDB level — and HALF of that (~0.86 MB/s,
~55 pages/s) is the doublewrite buffer writing every flushed page twice.
Redo is negligible (0.01 MB/s), no temp-table spilling.

Set innodb_doublewrite=DETECT_ONLY (dynamic, no restart; persisted in the
cnf): InnoDB stops writing full page CONTENT to the doublewrite buffer
(~halves MySQL's page-flush writes on the IOPS-bound sdc) but keeps
torn-page DETECTION metadata — a crash-torn page is flagged on recovery
(restore from the daily mysqldump) rather than silently corrupt. Chosen
over full OFF: same write saving, keeps detection, and OFF requires a
shutdown ("cannot change to OFF if doublewrite is enabled"). Acceptable
risk given the PERC BBU cache + UPS (in-flight writes complete on power
loss) + daily per-db backups.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Viktor Barzin 2026-06-30 08:47:09 +00:00
parent fbae573664
commit 82371d1ef8
2 changed files with 6 additions and 1 deletions

View file

@ -112,6 +112,11 @@ resource "kubernetes_config_map" "mysql_standalone_cnf" {
innodb_io_capacity_max=200
innodb_redo_log_capacity=1073741824
innodb_buffer_pool_size=2147483648
# DETECT_ONLY: stop writing full page content to the doublewrite buffer
# (~halves page-flush writes on the IOPS-bound sdc) while keeping torn-page
# DETECTION; recovery is restore-from-backup. OK with BBU+UPS+daily
# mysqldump. Dynamic (no restart). code-oflt 2026-06-30.
innodb_doublewrite=DETECT_ONLY
innodb_flush_neighbors=1
innodb_lru_scan_depth=256
innodb_page_cleaners=1