утилита для обслуживания таблиц MyISAM (MyISAM table-maintenance utility)
MYISAMCHK MEMORY USAGE
Memory allocation is important when you run myisamchk
. myisamchk
uses no more memory than its memory-related variables are set to.
If you are going to use myisamchk
on very large tables, you
should first decide how much memory you want it to use. The
default is to use only about 3MB to perform repairs. By using
larger values, you can get myisamchk
to operate faster. For
example, if you have more than 32MB RAM, you could use options
such as these (in addition to any other options you might
specify):
shell> myisamchk --sort_buffer_size=16M \
--key_buffer_size=16M \
--read_buffer_size=1M \
--write_buffer_size=1M ...
Using --sort_buffer_size=16M
should probably be enough for most
cases.
Be aware that myisamchk
uses temporary files in TMPDIR. If TMPDIR
points to a memory file system, out of memory errors can easily
occur. If this happens, run myisamchk
with the --tmpdir=
path
option to specify a directory located on a file system that has
more space.
When performing repair operations, myisamchk
also needs a lot of
disk space:
• Twice the size of the data file (the original file and a
copy). This space is not needed if you do a repair with
--quick
; in this case, only the index file is re-created.
This space must be available on the same file system as the
original data file, as the copy is created in the same
directory as the original.
• Space for the new index file that replaces the old one. The
old index file is truncated at the start of the repair
operation, so you usually ignore this space. This space must
be available on the same file system as the original data
file.
• When using --recover
or --sort-recover
(but not when using
--safe-recover
), you need space on disk for sorting. This
space is allocated in the temporary directory (specified by
TMPDIR or --tmpdir=
path). The following formula yields the
amount of space required:
(largest_key + row_pointer_length) × number_of_rows × 2
You can check the length of the keys and the
row_pointer_length with myisamchk -dv
tbl_name (see the
section called 'MYISAMCHK TABLE INFORMATION'). The
row_pointer_length and number_of_rows values are the Datafile
pointer and Data records values in the table description. To
determine the largest_key value, check the Key lines in the
table description. The Len column indicates the number of
bytes for each key part. For a multiple-column index, the key
size is the sum of the Len values for all key parts.
If you have a problem with disk space during repair, you can try
--safe-recover
instead of --recover
.