Bug #67476 | Innodb_buffer_pool_read_ahead_evicted is inaccurate | ||
---|---|---|---|
Submitted: | 5 Nov 2012 18:49 | Modified: | 12 Jan 2013 2:07 |
Reporter: | Davi Arnaut (OCA) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S3 (Non-critical) |
Version: | 5.5,5.6 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | access time, buffer pool, Contribution, innodb_buffer_pool_read_ahead_evicted, LRU |
[5 Nov 2012 18:49]
Davi Arnaut
[5 Nov 2012 18:58]
Davi Arnaut
Fix for Bug#67476 (*) I confirm the code being submitted is offered under the terms of the OCA, and that I am authorized to contribute it.
Contribution: Bug#67476-Innodb_buffer_pool_read_ahead_evicted-is-i.patch (application/octet-stream, text), 1.68 KiB.
[10 Nov 2012 11:59]
Sveta Smirnova
Thank you for the report. Verified as described. To verify I was lazy to create proper test case, so I modified source as follow: === modified file 'storage/innobase/include/buf0buf.ic' --- storage/innobase/include/buf0buf.ic 2012-07-25 08:23:01 +0000 +++ storage/innobase/include/buf0buf.ic 2012-11-10 11:47:18 +0000 @@ -169,6 +169,7 @@ const buf_page_t* bpage) /*!< in: block to make younger */ { buf_pool_t* buf_pool = buf_pool_from_bpage(bpage); +return 1; if (UNIV_UNLIKELY(buf_pool->freed_page_clock == 0)) { /* If eviction has not started yet, do not update the The run sysbench: $ sysbench --mysql-user=root --mysql-host=127.0.0.1 --mysql-port=13000 --test=oltp --oltp-read-only=1 --oltp-table-size=1000000 --num-threads=8 prepare After it I got this: mysql> show global status like 'Innodb_buffer_pool_read_ahead%'; +---------------------------------------+-------+ | Variable_name | Value | +---------------------------------------+-------+ | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 0 | | Innodb_buffer_pool_read_ahead_evicted | 818 | +---------------------------------------+-------+ 3 rows in set (0.00 sec)
[13 Nov 2012 14:06]
Inaam Rana
Davi, Thanks for pointing this out. The bug is real but I am going to solve it in a different way. I think ::access_time flag need only be protected by block->mutex and should not be clubbed together with LRU manipulation. I'll write a patch for this.
[12 Jan 2013 2:07]
John Russell
Added to changelog for 5.1.68, 5.5.30, 5.6.10: The status variable Innodb_buffer_pool_read_ahead_evicted could show an inaccurate value, higher than expected, because some pages in the buffer pool were incorrectly considered as being brought in by read-ahead requests.