Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.6, 10.7(EOL), 10.8(EOL)
Description
MDEV-24142 reduced the size of buffer pool page descriptors, but the descriptors could still be smaller. Furthermore, ROW_FORMAT=COMPRESSED pages use convoluted locking rules, because no page latch would be available for blocks whose uncompressed page has been discarded.
In particular:
- The slot for the write buffer of page_compressed or encrypted tables can be moved to IORequest, because it is only needed during asynchronous page write requests.
- The frame pointer can be moved to buf_page_t. It will only be non-null for the ‘fat’ block descriptor buf_block_t.
- The lock can be moved to the ‘thin’ buf_page_t; it is only 8 bytes on Linux, OpenBSD, Windows (and other systems, to be implemented in
MDEV-26476). - The io_fix, buf_fix_count, state can be merged into a single std::atomic<uint32_t> field of page_zip_des_t, using memory that would otherwise be wasted to alignment on 64-bit systems. This field can be modified exclusively by IA-32/AMD64 friedly store(), fetch_add(), or fetch_sub().
Moving lock and frame to buf_page_t will increase its storage size, but this is more than compensated by the removal of slot, io_fix, buf_fix_count.
Attachments
Issue Links
- blocks
-
MDEV-26827 Make page flushing even faster
- Closed
- causes
-
MDEV-27414 Server may hang when innodb_undo_log_truncate=ON
- Closed
-
MDEV-27476 heap-use-after-free in buf_pool_t::is_block_field()
- Closed
-
MDEV-27924 page_zip_copy_recs() corrupts ROW_FORMAT=COMPRESSED block descriptor
- Closed
-
MDEV-27983 InnoDB hangs on multiple concurrent requests of a cold ROW_FORMAT=COMPRESSED page
- Closed
-
MDEV-28484 InnoDB encryption key rotation is not being marked completed
- Closed
-
MDEV-29190 10.6.8 (+uring compiled in but not used) hangs after sudden load spikes
- Closed
-
MDEV-29996 Duplicated call to buf_page_t::set_ibuf_exist() on recovery
- Closed
-
MDEV-31390 Assertion id.is_corrupted() failed in buf_page_create_low()
- Closed
-
MDEV-34453 Trying to read 16384 bytes at 70368744161280 outside the bounds of the file: ./ibdata1
- Closed
-
MDEV-34879 InnoDB fails to merge the change buffer to ROW_FORMAT=COMPRESSED tables
- Closed
- is blocked by
-
MDEV-18724 Replace buf_block_t::mutex with more std::atomic
- Closed
- relates to
-
MDEV-30134 buf_page_t::unfix(): Assertion `!((f ^ (f - 1)) & LRU_MASK)' failed
- Closed
-
MDEV-31343 Another server hang with innodb_undo_log_truncate=ON
- Closed
-
MDEV-31816 buf_LRU_free_page() does not preserve ROW_FORMAT=COMPRESSED block state
- Closed
-
MDEV-22367 Remove write support for ROW_FORMAT=COMPRESSED
- Closed
-
MDEV-23158 False negatives from buf_pool.is_uncompressed() cause unnecessary lookups
- Closed
-
MDEV-24142 rw_lock_t has unnecessarily complex wait logic
- Closed
-
MDEV-31767 InnoDB tables are being flagged as corrupted on an I/O bound server
- Closed