On Fri, Oct 1, 2010 at 3:30 AM, Steve Hardy <s.hardy@stripped> wrote:
> Hi guys,
> I made a rough AIO-prefetch patch to improve I/O bound performance of InnoDB. I also
> posted this to percona-discussion, but I hear that there may be some more interested
> people here.
> What the patch does is:
> 1. Implement read_multi_range_*(), read_range_*() for InnoDB (almost a copy of the
> default handlers)
> 2. Add asynchronous prefetches for pages that will be read by the innodb row fetch
> code <-- main feature
> 3. Remap index_read_*(), read_range_*() to call read_multi_range_*()
> 4. Fix records_in_range() to do less synchronous I/O
This is very interesting.
My workload has too much concurrency already so I am most interested
in the change to make records_in_range do less IO.
> - Changed records_in_range() to read less pages since it does synchronous requests
> which makes performance horrible again. It now reads only node pages, unless the range
> begins and starts on the same or adjacent pages, at which point it descends to the leaf
> pages to get the real count.
> Although the patch is aimed at increasing speed of a single query, theory and some
> little tests say that it also improves performance when there are a lot of parallel
> queries running.
I am sure it does. Up to a point more pending IO requests allows the
disk subsystem to do more reordering.
> not sure how useful it is in 5.1 since 5.1 has no AIO on linux.
5.1 has background threads to handle read prefetch requests. It should
still be useful in that case.