• Venkatesh Duggirala's avatar
    Bug #18808072 MYSQLBINLOG USES LOCALTIME() TO PRINT EVENTS, CAUSES KERNEL MUTEX CONTENTION · a3cc647d
    Venkatesh Duggirala authored
    Problem: For every event read, mysqlbinlog calls localtime() which in turn
    calls stat(/etc/localtime) which is causing kernel mutex contention.
    
    Analysis and Fix:
    localtime() calls stat(/etc/localtime) for every instance of the call
    where as localtime_r() the reentrant version was optimized to store
    the read only tz internal structure. Hence it will not call
    stat(/etc/localtime). It will call only once at the beginning.
    The mysql server is calling localtime_r() and mysqlbinlog tool is
    one place where we are still using localtime().
    
    Once the process (mysqlbinlog) is started if timezone is changed
    it will be not picked up the the process and it will continue
    with the same values as the beginning of the process. This
    behavior is in-lined with mysql server.
    
    Also adding localtime_r() and gmtime_r() support for windows.
    a3cc647d
log_event.cc 337 KB