• unknown's avatar
    Implementation of Monty's idea about clear_alloc_root() optimization and cleanup of work · cf9e30b8
    unknown authored
    with memory roots in THD/Statement/Item_arena.
    Added assertions preventing memory allocation on bzero'ed MEM_ROOT since it is worked by 
    pure luck and was very ineffective.
    
    
    include/my_sys.h:
      Reimplementation of Monty's optimization of clear_alloc_root().
      Now clear_alloc_root() can be used only for detaching memory associated with MEM_ROOT
      (e.g. to avoid its freeing). It can not be used for MEM_ROOT initialization any longer 
      (it was bad idea anyway since memory allocation on such MEM_ROOT was very ineffective 
      and worked by pure luck).
      Introduced ALLOC_ROOT_MIN_BLOCK_SIZE constant.
    mysys/my_alloc.c:
      Added description of init_alloc_root().
      Added assertions to alloc_root() and reset_root_defaults() so now they can only be used
      on previosly initialized MEM_ROOT. (It worked for bzeroed MEM_ROOT before but 
      by pure luck and very inefficiently). Calling free_root() on bzero'ed MEM_ROOT
      is still ok (we can't remove this easily because of static MEM_ROOTs).
      Also now using ALLOC_ROOT_MIN_BLOCK_SIZE constant inside these functions.
    sql/opt_range.cc:
      Fixed get_quick_select_for_ref() function to not use bzero'ed MEM_ROOT for allocation.
      Also QUICK_RANGEs created in this function should be created in memory root of QUICK_SELECT.
    sql/sql_class.cc:
      Implementation of Monty's idea about clear_alloc_root() optimization and cleanup of work 
      with memory roots in THD/Statement/Item_arena.
      Now we are always initing THD::transaction.mem_root and THD::mem_root in THD constructor 
      (without memory allocation and with minimal block size) and then later change their
      parameters in THD::init_for_queries() (this is partially because we can't allocate anything
      on bzero'ed memory roots anymore).
      Item_arena() constructor is now trivial and is used only then Item_arena is created as backup
      storage for other Item_arena (we use Item_arena(bool) now if it is part of Statement).
      Both trivial Item_arena constructor and destructor are now inline.
      Removed unneeded clear_alloc_root from Item_arena::restore_backup_item_arena().
    sql/sql_class.h:
      Both trivial Item_arena constructor and destructor are now inline.
      Commented various Item_arena constructors.
    cf9e30b8
sql_class.cc 40.5 KB