• Marko Mäkelä's avatar
    MDEV-26029: Sparse files are inefficient on thinly provisioned storage · 30edd554
    Marko Mäkelä authored
    The MariaDB implementation of page_compressed tables for InnoDB used
    sparse files. In the worst case, in the data file, every data page
    will consist of some data followed by a hole. This may be extremely
    inefficient in some file systems.
    
    If the underlying storage device is thinly provisioned (can compress
    data on the fly), it would be good to write regular files (with sequences
    of NUL bytes at the end of each page_compressed block) and let the
    storage device take care of compressing the data.
    
    For reads, sparse file regions and regions containing NUL bytes will be
    indistinguishable.
    
    my_test_if_disable_punch_hole(): A new predicate for detecting thinly
    provisioned storage. (Not implemented yet.)
    
    innodb_atomic_writes: Correct the comment.
    
    buf_flush_page(): Support all values of fil_node_t::punch_hole.
    On a thinly provisioned storage device, we will always write
    NUL-padded innodb_page_size bytes also for page_compressed tables.
    
    buf_flush_freed_pages(): Remove a redundant condition.
    
    fil_space_t::atomic_write_supported: Remove. (This was duplicating
    fil_node_t::atomic_write.)
    
    fil_space_t::punch_hole: Remove. (Duplicated fil_node_t::punch_hole.)
    
    fil_node_t: Remove magic_n, and consolidate flags into bitfields.
    For punch_hole we introduce a third value that indicates a
    thinly provisioned storage device.
    
    fil_node_t::find_metadata(): Detect all attributes of the file.
    30edd554
ha_innodb.cc 603 KB