Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 35 additions & 2 deletions docs/8.4-defaults-and-tuning.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ Why these changes matter:
* Higher `innodb_io_capacity` leverages SSD/NVMe for IO-bound workloads; legacy spinning disks may need a lower value.
* Larger `innodb_log_buffer_size` reduces redo flush frequency—helpful for write-heavy workloads.
* `innodb_adaptive_hash_index` default OFF favors predictability; the adaptive hash index can become a contention source under concurrency.
* `innodb_buffer_pool_populate` defaults ON to enforce page faults on startup and avoid runtime stalls from page faults; disable it if you value fast startup more than runtime latency.
* `innodb_numa_interleave` defaults ON to reduce memory imbalance on multi-socket systems. It only controls interleaved NUMA allocations and no longer affects whether page faults are enforced on startup.
* `innodb_buffer_pool_populate` defaults ON to enforce page faults on startup and avoid runtime stalls from page faults; disable it if you value fast startup more than runtime latency. See [NUMA interleave and buffer pool populate](#numa-interleave-and-buffer-pool-populate).
* `innodb_numa_interleave` defaults ON to reduce memory imbalance on multi-socket systems. From 8.4.11, it only controls interleaved NUMA allocations and no longer affects whether page faults are enforced on startup.
* `innodb_change_buffering` set to `none` reduces overhead for modern storage that handles random writes efficiently.
* `innodb_doublewrite_pages` increased to 128 improves doublewrite performance on fast storage.

Expand All @@ -36,8 +36,41 @@ Use this to adapt an 8.0 configuration to {{vers}}:
* Re-evaluate IO settings (`innodb_io_capacity`, flush method) based on storage type and observed latency.
* Confirm redo/undo settings and log buffer meet current write patterns.
* Validate parallel read threads relative to CPU topology and workload.
* If `innodb_numa_interleave` is set to `OFF`, review `innodb_buffer_pool_populate`. In 8.4.10, disabling NUMA interleave also skipped startup pre-faulting. In 8.4.11, you must set `innodb_buffer_pool_populate=OFF` to keep that behavior.
* Generate a fresh config for {{vers}} when possible; only reapply carefully justified overrides.

## NUMA interleave and buffer pool populate

In 8.4.10, `innodb_numa_interleave` controlled both interleaved NUMA allocation and whether buffer pool pages were pre-faulted on startup.

In 8.4.11, those behaviors are separate:

* `innodb_numa_interleave` controls only interleaved NUMA allocations.
* `innodb_buffer_pool_populate` controls whether pages are pre-faulted on startup.

Both default to `ON`. With the defaults, startup behavior matches 8.4.10 when `innodb_numa_interleave` was `ON`. There is no behavior change unless you override one of the variables.

If `my.cnf` disables NUMA interleave, 8.4.11 still pre-faults pages because `innodb_buffer_pool_populate` remains `ON`. To compare 8.4.10 and 8.4.11 fairly, also disable populate so neither version pre-faults pages:

8.4.10:

```ini
innodb_buffer_pool_size = 4G
innodb_numa_interleave = OFF
innodb_buffer_pool_load_at_startup = ON
```

Equivalent 8.4.11 configuration (no pre-faulted pages, matching 8.4.10 with NUMA interleave off):

```ini
innodb_buffer_pool_size = 4G
innodb_numa_interleave = OFF
innodb_buffer_pool_populate = OFF
innodb_buffer_pool_load_at_startup = ON
```

Without `MAP_POPULATE` (`innodb_buffer_pool_populate=OFF` in 8.4.11, or `innodb_numa_interleave=OFF` in 8.4.10), `mmap` raises only virtual size (VSZ). Resident set size (RSS) grows as pages are first touched.

## Practical evaluation steps

* Benchmark with your workload: establish a baseline on 8.0, then restore to {{vers}} and run the same tests.
Expand Down
4 changes: 2 additions & 2 deletions docs/release-notes/8.4.11-11.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Percona Server for MySQL 8.4.11-11 introduces the following new features and imp

* Improves InnoDB performance for workloads limited by Least Recently Used (LRU) flush speed. The improvements reduce LRU list mutex contention, restore dedicated LRU manager threads, optimize LRU scanning, and allow single-page flushing to proceed while an LRU batch flush is running.

* Improves InnoDB buffer pool initialization on NUMA-enabled systems by using multi-threaded memory allocation. The improvement reduces initialization time and can shorten server startup for instances with large buffer pools.
* Improves InnoDB buffer pool initialization on NUMA-enabled systems by using multi-threaded memory allocation. The improvement reduces initialization time and can shorten server startup for instances with large buffer pools. Starting in 8.4.11, `innodb_numa_interleave` controls only interleaved NUMA allocations. Pre-faulting buffer pool pages on startup is controlled by `innodb_buffer_pool_populate`. Both default to `ON`, so default behavior matches 8.4.10. If you set `innodb_numa_interleave=OFF` to skip pre-faulting in 8.4.10, also set `innodb_buffer_pool_populate=OFF` in 8.4.11. See [Defaults and tuning guidance for 8.4](../8.4-defaults-and-tuning.md#numa-interleave-and-buffer-pool-populate).

* Improves InnoDB performance for highly concurrent range-select workloads by reducing `BUF_BLOCK_MUTEX` contention when multiple threads access the same buffer pool page. The improvement increases throughput for read workloads that repeatedly access the same hot pages.

Expand Down Expand Up @@ -58,7 +58,7 @@ Find the complete list of bug fixes and changes in the [MySQL 8.4.11 release not

* [PS-11447](https://perconadev.atlassian.net/browse/PS-11447): Improves InnoDB flushing performance by allowing a single-page flush to run while a Least Recently Used (LRU) batch flush is in progress. The number of concurrent single-page flushes is limited to one per buffer pool instance.

* [PS-10595](https://perconadev.atlassian.net/browse/PS-10595): Improves InnoDB buffer pool initialization on NUMA-enabled systems by using multi-threaded memory allocation, reducing startup time for instances with large buffer pools.
* [PS-10595](https://perconadev.atlassian.net/browse/PS-10595): Improves InnoDB buffer pool initialization on NUMA-enabled systems by using multi-threaded memory allocation, reducing startup time for instances with large buffer pools. `innodb_numa_interleave` no longer controls startup pre-faulting; use `innodb_buffer_pool_populate`. See [Defaults and tuning guidance for 8.4](../8.4-defaults-and-tuning.md#numa-interleave-and-buffer-pool-populate).

* [PS-11120](https://perconadev.atlassian.net/browse/PS-11120): Improves InnoDB performance for highly concurrent range-select workloads by reducing `BUF_BLOCK_MUTEX` contention when multiple threads access the same buffer pool page.

Expand Down
1 change: 1 addition & 0 deletions docs/upgrade-checklist-8.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Complete these checks before starting the upgrade process.
**Action**:

- [ ] Compare your overrides to {{vers}} defaults; remove obsolete settings and re-evaluate IO/log parameters.
- [ ] If `innodb_numa_interleave=OFF`, set `innodb_buffer_pool_populate=OFF` in 8.4.11 to keep 8.4.10 pre-faulting behavior. See [NUMA interleave and buffer pool populate](./8.4-defaults-and-tuning.md#numa-interleave-and-buffer-pool-populate).
- [ ] See: [Defaults and tuning guidance for {{vers}}](./8.4-defaults-and-tuning.md)

### Spatial indexes
Expand Down
Loading