List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:August 21 2009 10:22am
Subject:Re: bzr commit into mysql-5.0-bugteam branch (anurag.shekhar:2792)
Bug#44723
View as plain text  
Hi Anurag,

On Fri, Aug 21, 2009 at 09:55:46AM +0000, Anurag Shekhar wrote:
> #At file:///home/anurag/mysqlsrc/mysql-5.0-bugteam-44723/ based on
> revid:joro@stripped
> 
>  2792 Anurag Shekhar	2009-08-21
>       Bug #44723 Larger read_buffer_size values can cause performance 
>                  decrease for INSERTs
>       
>       
>       Bulk inserts (multiple row, CREATE ... SELECT, INSERT ... SELECT) into
>       MyISAM tables were performed inefficiently. This was mainly affecting
>       use cases where read_buffer_size was considerably large (>256K) and low
>       number of rows was inserted (e.g. 30-100).
>       
>       The problem was that during I/O cache initialization (this happens
>       before each bulk insert) allocated I/O buffer was unnecessarily
>       initialized to '\0'.
>       
>       This was happening because of mess in flag values. MyISAM informs I/O
>       cache to wait for free space (if out of disk space) by passing
>       MY_WAIT_IF_FULL flag. Since MY_WAIT_IF_FULL and MY_ZEROFILL have the
>       same values, memory allocator was initializing memory to '\0'.
>       
>       The performance gain provided with this patch may only be visible with
>       non-debug binaries, since safemalloc always initializes allocated memory
>       to 0xA5A5...
>      @ mysys/mf_iocache.c
>         Remove MY_WAIT_IF_FULL from myflags before calling my_malloc
>         to prevent conflict with MY_ZEROFILL.
> 
>     modified:
>       mysys/mf_iocache.c
> === modified file 'mysys/mf_iocache.c'
> --- a/mysys/mf_iocache.c	2007-03-28 17:46:42 +0000
> +++ b/mysys/mf_iocache.c	2009-08-21 09:55:41 +0000
> @@ -235,8 +235,8 @@ int init_io_cache(IO_CACHE *info, File f
>  	buffer_block *= 2;
>        if ((info->buffer=
>  	   (byte*) my_malloc(buffer_block,
> -			     MYF((cache_myflags & ~ MY_WME) |
> -				 (cachesize == min_cache ? MY_WME : 0)))) != 0)
> +              MYF((cache_myflags & ~ (MY_WME | MY_WAIT_IF_FULL)) |
> +                (cachesize == min_cache ? MY_WME : 0)))) != 0)
Ok, you removed tabs, but forgot to add spaces instead.

Regards,
Sergey
-- 
Sergey Vojtovich <svoj@stripped>
MySQL AB, Software Engineer
Izhevsk, Russia, www.mysql.com
Thread
bzr commit into mysql-5.0-bugteam branch (anurag.shekhar:2792)Bug#44723Anurag Shekhar21 Aug
  • Re: bzr commit into mysql-5.0-bugteam branch (anurag.shekhar:2792)Bug#44723Sergey Vojtovich21 Aug