[MDEV-30216] Read-ahead unnecessarily allocates and frees pages when a page is in the buffer pool Created: 2022-12-13  Updated: 2024-01-05  Resolved: 2023-01-24

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10, 10.11
Fix Version/s: 11.0.1

Type: Bug Priority: Major
Reporter: Marko Mäkelä Assignee: Marko Mäkelä
Resolution: Fixed Votes: 0
Labels: performance

Issue Links:
PartOf
includes MDEV-26662 buf_read_page_background() is blockin... Closed
Problem/Incident
causes MDEV-30911 Multi-batch recovery of ROW_FORMAT=CO... Closed
Relates
relates to MDEV-29694 Remove the InnoDB change buffer Closed

 Description   

While testing MDEV-29986 and some other changes, wlad noted that the function buf_read_page_low() is allocating and freeing a block in buf_pool.LRU when the requested page exists in the buffer pool.

The code has been refactored in 10.5 and 10.6, but this does not look like a regression: the logic always seems to have been like that.

Thanks to the refactored buf_pool.page_hash in 10.5 (MDEV-22871) and the lock elision (MDEV-26769), it could be faster to perform extra lookups to avoid unnecessary allocation and some contention on buf_pool.mutex.



 Comments   
Comment by Marko Mäkelä [ 2022-12-13 ]

This change is easier to implement after removing the InnoDB change buffer (MDEV-29694).

Comment by Marko Mäkelä [ 2022-12-16 ]

The additional buf_pool.page_hash lookups in my initial fix might cause some regression in the case when none of the pages that are submitted for read-ahead exist in the buffer pool. It could be revised further as follows:

  1. In buf_page_init_for_read(), do not invoke buf_LRU_get_free_block() but expect the caller to pass the block instead.
  2. If the page already existed in the buffer pool, the caller can reuse the placeholder block for a subsequent call. Else, a new block will be allocated.
  3. This could be combined with a fix of MDEV-26790.
Comment by Matthias Leich [ 2023-01-24 ]

origin/bb-10.11-MDEV-30216-MDEV-26790 c85c38683af18c5851afa5382aa7aaf869536176 2023-01-13T16:46:20+02:00
performed well in RQG testing. Bad effects observed were in the main trees too.

Generated at Thu Feb 08 10:14:34 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.