| Bug #68658 | buf_flush_single_page_from_LRU causes stalls on fil_flush | ||
|---|---|---|---|
| Submitted: | 12 Mar 2013 23:16 | Modified: | 12 Apr 2013 16:23 |
| Reporter: | Mark Callaghan | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: InnoDB storage engine | Severity: | S5 (Performance) |
| Version: | 5.6.10 | OS: | Any |
| Assigned to: | Inaam Rana | CPU Architecture: | Any |
[12 Mar 2013 23:16]
Mark Callaghan
[12 Mar 2013 23:17]
Mark Callaghan
edit title
[12 Apr 2013 16:23]
Ben Krug
This is fixed due to another bug fix which is currently pushed to 5.6.12. Oracle bug number 16477781 , which states: In cases where threads are forced to do single page flushing, "fsync()" would be triggered for all data files. This fix allows for synchronous single page flushing.
[6 Jun 2013 15:32]
Laurynas Biveinis
5.6$ bzr log -r 4955
------------------------------------------------------------
revno: 4955
committer: Inaam Rana <inaam.rana@oracle.com>
branch nick: mysql-5.6
timestamp: Mon 2013-03-25 17:27:44 -0400
message:
Bug#16477781 SINGLE PAGE FLUSHING CAUSES FSYNC() OF ALL DATAFILES
Approved by: Kevin Lewis rb://2174
In cases where threads are forced to do single page flushing we call
buf_flush_sync_datafiles() after queueing the IO asynchronously.
buf_flush_sync_datafiles() wakes up IO helper threads, then waits for
all the IO requests to be serviced and then trigger an fsync() on all
data files. The minimal we need is that the IO request for the given
page has been serviced and the data file that it belongs to have been
synced to the disk.
* Explicitly pass 'sync' value to buf_flush_page(). The new scheme is:
-- All batches happen asynchronously (same as before)
-- Single page flushes to find a victim are synchronous
-- Single page flushes for export are asynchronous
* Flush only the datafile that is touched during the single page flushing
* Change handling of single page flush dblwr slot to IO completion
routine i.e., now it will happen in IO helper thread in case of async
request
* Remove polling from dblwr buffer. Introduce two separate events,
one for batch flushing and one for single page flushing
