• Marko Mäkelä's avatar
    MDEV-13247 innodb_log_compressed_pages=OFF breaks crash recovery of ROW_FORMAT=COMPRESSED tables · 2b5c9bc2
    Marko Mäkelä authored
    The option innodb_log_compressed_pages was contributed by
    Facebook to MySQL 5.6. It was disabled in the 5.6.10 GA release
    due to problems that were fixed in 5.6.11, which is when the
    option was enabled.
    
    The option was set to innodb_log_compressed_pages=ON by default
    (disabling the feature), because safety was considered more
    important than speed. The option innodb_log_compressed_pages=OFF
    can *CORRUPT* ROW_FORMAT=COMPRESSED tables on crash recovery
    if the zlib deflate function is behaving differently (producing
    a different amount of compressed data) from how it behaved
    when the redo log records were written (prior to the crash recovery).
    
    In MDEV-6935, the default value was changed to
    innodb_log_compressed_pages=OFF. This is inherently unsafe, because
    there are very many different environments where MariaDB can be
    running, using different zlib versions. While zlib can decompress
    data just fine, there are no guarantees that different versions will
    always compress the same data to the exactly same size. To avoid
    problems related to zlib upgrades or version mismatch, we must
    use a safe default setting.
    
    This will reduce the write performance for users of
    ROW_FORMAT=COMPRESSED tables. If you configure
    innodb_log_compressed_pages=ON, please make sure that you will
    always cleanly shut down InnoDB before upgrading the server
    or zlib.
    2b5c9bc2
page0zip.cc 144 KB