• Michael Widenius's avatar
    Added some fixes that should make MyISAM & Aria REPAIR work with more than 4G records · 53d44ad1
    Michael Widenius authored
    - If one specifies --force twice to myisamchk and aria_chk, then we will try to finnish the repair even if sort_buffer would be too small.
      This was done by dynamically allocate buffer handler objects as long as memory lasts.
    - New option for myisamchk and aria_chk: create-missing-keys
    - Changed default size of myisam_sort_buffer_size from 8M to 128M.
    - Changed default size of sort_buffer_size in aria_chk from 128M to 256M.
    - Increased information in error message about 'sort_buffer_size' beeing to small.
    - Print also to 'show warnings' if repair was retried.
    - Increased size of internal sort-buffer-readers from 16K to 128K
    - Changed printing of 'number of records' to use %ll instead of casting to long
    - Changed buffer sizes for myisam and aria to use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines.
    
    
    
    
    
    include/my_global.h:
      Added MY_ALIGN_DOWN() to get previous alignment (for big memory areas)
    include/myisam.h:
      Increased size of types to be able to handle more records
    include/myisamchk.h:
      Increased size of types to be able to handle more records
      Added T_FORCE_SORT_MEMORY to force repair to work even if sort_buffer would not be big enough
    mysql-test/r/myisam.result:
      Updated result
    mysql-test/r/mysqld--help.result:
      Updated result
    mysql-test/r/repair.result:
      Updated result
    mysql-test/suite/maria/maria.result:
      Added test cases for some fixed bugs in MyISAM to verify that Aria doesn't have them too.
    mysql-test/suite/maria/maria.test:
      Added test cases for some fixed bugs in MyISAM to verify that Aria doesn't have them too.
    mysql-test/suite/maria/maria3.result:
      Updated result after sort buffer size increase
    mysql-test/suite/sys_vars/r/aria_sort_buffer_size_basic.result:
      Updated result after sort buffer size increase
    mysql-test/suite/sys_vars/r/myisam_sort_buffer_size_basic.result:
      Updated result after sort buffer size increase
    mysql-test/suite/sys_vars/t/myisam_sort_buffer_size_basic.test:
      Updated result after sort buffer size increase
    mysql-test/t/myisam.test:
      Fixed error messages to not print system specific data
    mysql-test/t/repair.test:
      Fixed error messages to not print system specific data
    storage/maria/ha_maria.cc:
      Print also to 'show warnings' if repair was retried
      Changed default size of sort_buffer_size from 128M to 256M (same as in mysqld)
    storage/maria/ma_check.c:
      Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT
    storage/maria/ma_sort.c:
      Increased size of internal sort-buffer-readers from 16K to 128K
      Increased size of types to be able to handle more records
      Added support for T_FORCE_SORT_MEMORY
      Don't allocate too many extra BUFFPEK at a time (they are probably not needed)
      Improved error message for "sort_buffer_size is too small"
      Changed printing of 'number of records' to use %ll instead of casting to long
      Fixed bug where maria_update_key_parts() was called too early.
      Fixed bug in detecting result from read_to_buffer().
      Added 'out of memory' checking when calling 'alloc_dynamic()'.
    storage/maria/maria_chk.c:
      Added --create-missing-keys
      If one specifies --force twice then we will try to finnish the repair even if sort_buffer would be too small.
      check_param.sort_buffer_length varialble was used with wrong type.
    storage/maria/maria_def.h:
      Increased size of types to be able to handle more records
      Use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines
      Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT
    storage/maria/maria_ftdump.c:
      Renamed USE_BUFFER_INIT -> PAGE_BUFFER_INIT
    storage/maria/maria_read_log.c:
      Use PAGE_BUFFER_INIT for page cache
    storage/myisam/ha_myisam.cc:
      Changed default size of myisam_sort_buffer_size from 8M to 128M
    storage/myisam/mi_check.c:
      Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT
    storage/myisam/myisam_ftdump.c:
      Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT
    storage/myisam/myisamchk.c:
      Added --create-missing-keys
      If one specifies --force twice then we will try to finnish the repair even if sort_buffer would be too small.
      check_param.sort_buffer_length varialble was used with wrong type.
      Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT
    storage/myisam/myisamdef.h:
      Increased SORT_BUFFER_INIT to 64M
      (speeds up repair a lot and most machines have nowadays a lot of memory)
      Use MY_ALIGN_DOWN() to get same number of bytes allocated on different machines
      Renamed USE_BUFFER_INIT -> KEY_BUFFER_INIT
    storage/myisam/sort.c:
      Increased size of internal sort-buffer-readers from 16K to 128K
      Increased size of types to be able to handle more records
      Added support for T_FORCE_SORT_MEMORY
      Don't allocate too many extra BUFFPEK at a time (they are probably not needed)
      Improved error message for "sort_buffer_size is too small"
      Changed printing of 'number of records' to use %ll instead of casting to long
      Fixed bug in detecting result from read_to_buffer().
      Added 'out of memory' checking when calling 'alloc_dynamic()'.
    53d44ad1
myisamchk.c 61.2 KB