[MDEV-25105] Remove innodb_checksum_algorithm values none, innodb, strict_none, strict_innodb Created: 2021-03-10 Updated: 2023-09-07 Resolved: 2021-03-11 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | Storage Engine - InnoDB |
| Fix Version/s: | 10.6.0 |
| Type: | Task | Priority: | Blocker |
| Reporter: | Marko Mäkelä | Assignee: | Thirunarayanan Balathandayuthapani |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||||||||||||||||||||||||||||||||||||||
| Description |
|
Historically, InnoDB supported a buggy page checksum algorithm that did not compute a checksum over the full page. Later, well before MySQL 4.1 introduced .ibd files and the innodb_file_per_table option, the algorithm was corrected and the first 4 bytes of each page were redefined to be a checksum. The original checksum was so slow that an option to disable page checksum was introduced for benchmarketing purposes. The Intel Nehalem microarchitecture introduced the SSE4.2 instruction set extension, which includes instructions for faster computation of CRC-32C. In MySQL 5.6 (and MariaDB 10.0), innodb_checksum_algorithm=crc32 was implemented to make of that. As that option was changed to be the default in MySQL 5.7, a bug was found on big-endian platforms and some work-around code was added to weaken that checksum further. MariaDB disables that work-around by default since Later, SIMD-accelerated CRC-32C has been implemented in MariaDB for POWER and ARM and also for IA-32/AMD64, making use of the pclmul instruction (carry-less multiplication). Long story short, innodb_checksum_algorithm=crc32 is faster and more secure than the original checksum, called innodb_checksum_algorithm=innodb. It should have removed any need to configure innodb_checksum_algorithm=none. The setting innodb_checksum_algorithm=crc32 is also the default in MariaDB Server 10.2, 10.3, 10.4. In MariaDB 10.5, The default settings do allow old data files to be read, no matter if a worse algorithm had been used. (The settings innodb_checksum_algorithm=strict_crc32 or innodb_checksum_algorithm=strict_full_crc32 would only allow CRC-32C checksums, which is why they are not the default.) A valid reason for using innodb_checksum_algorithm=innodb could have been the ability to downgrade to MariaDB 5.5, but that version has already reached its end of life. Also, if it is really needed, data files can be converted with the innochecksum utility. Because there is no good reason to allow data files to be written with insecure checksums, we will reject those option values:
Furthermore, the following innochecksum options will be removed:
|
| Comments |
| Comment by Eirik Øverby [ 2023-09-07 ] |
|
Knowing this is a bit old, but there are very good reasons to disable checksumming entirely: ZFS. We run a multi-hundred TB Galera cluster with thousands of write operations per second. Doing checksumming twice (ZFS plus database) is a waste, and despite being fast, the crc32 CPU instructions are a finite resource. Double-checksumming hurts our performance significantly, even on pretty high-end hardware (nvme ssd, couple dozen ~3ghz EPYC3/4 CPU cores). Is there any other way to disable checksumming in maria/innodb in this day and age? We're stuck on MySQL 5.7 for a number of reasons, this being one of them. |