Справочное руководство по MySQL

4.7.4 myisampack, MySQL-генератор сжатых таблиц (только для чтения)

    4.7.4 myisampack, MySQL-генератор сжатых таблиц (только для чтения)

    Утилита myisampack используется для сжатия таблиц MyISAM, а утилита pack_isam - для сжатия таблиц ISAM. Поскольку таблицы ISAM являются устаревшими, здесь будет рассматриваться только myisampack, но все, сказанное относительно myisampack, справедливо также и для pack_isam.

    myisampack сжимает каждый столбец в таблице по отдельности. Информация, необходимая для декомпрессии столбцов, считывается в память при открытии таблицы. В результате обеспечивается более высокая производительность при доступе к отдельным записям, поскольку нужно распаковывать только одну запись, а не значительно больший по размеру дисковый блок, как при использовании программы Stacker в MS DOS. В среднем myisampack сжимает файл данных на 40%-70%.

    (MySQL использует отображение в памяти (mmap()) для сжатых таблиц

    а если mmap() не работает, возвращается назад к нормальному режиму чтения/записи.

    Обратите внимание на следующее:

    • После сжатия таблица доступна в режиме только для чтения. Это удобно, скажем, для записи на CD. Реализация возможности записи в сжатые таблицы находится в нашем списке задач к выполнению, но имеет низкий приоритет.
    • myisampack может также сжимать столбцы c типами BLOB или TEXT. В предыдущей версии pack_isam (для таблиц ISAM) данной функции не было.

    Утилиту myisampack можно запустить следующим образом:

    shell> myisampack [options] filename ...
    

    Каждое имя файла (filename) должно быть именем индексного файла (`.MYI'). Если вы не находитесь в директории базы данных, необходимо указать полный путь к файлу. Допускается опускать расширение `.MYI'.

    myisampack поддерживает следующие опции:

    -b, --backup
    Создает резервную копию таблицы, присваивая ей имя `tbl_name.OLD'.
    -#, --debug=debug_options
    Выводить журнал отладки. Строка debug_options часто принимает значение d:t:o,filename
    -f, --force
    Сжатие таблицы происходит, даже если она увеличивается или если существует временный файл. Во время сжатия таблицы myisampack создает временный файл `tbl_name.TMD'. Если вы вручную прекратите выполнение myisampack, может оказаться так, что файл `tbl_name.TMD' не будет удален. Обычно если myisampack обнаруживает существующий `tbl_name.TMD', она прекращает работу и выдает ошибку. При указании опции --force myisampack сжимает таблицу в любом случае.
    -?, --help
    Выдает справочную информацию и завершает работу.
    -j big_tbl_name, --join=big_tbl_name
    Соединяет все таблицы, указанные в командной строке, в одну таблицу big_tbl_name. Все таблицы, подлежащие объединению, должны быть идентичными (одинаковые имена и типы столбцов, одинаковые индексы и т.д.).
    -p #, --packlength=#
    Определяет разрядность поля, хранящего длину строки, в байтах. Может принимать значения 1, 2 или 3. (myisampack хранит все строки с указателями длины размером в 1, 2, или 3 байта. В большинстве случаев myisampack способна определить правильное значение длины перед началом сжатия файла, но во время сжатия она может обнаружить, что может быть использована более короткая длина. В этом случае myisampack выведет сообщение о том, что в следующий раз при сжатии данного файла можно использовать более короткую длину записи.)
    -s, --silent
    Молчаливый режим. Сообщения выводятся только при возникновении ошибок.
    -t, --test
    Сжатие таблицы не выполняется, происходит только проверка процедуры сжатия.
    -T dir_name, --tmp_dir=dir_name
    Указанная директория используется как местоположение для создания временной таблицы.
    -v, --verbose
    Расширенный режим вывода сообщений. Выводится информация о состоянии процесса и результаты сжатия.
    -V, --version
    Отображает информацию о версии и завершает работу.
    -w, --wait
    Если таблица уже используется, подождать повторить попытку. Если сервер mysqld был вызван с опцией --skip-locking, то не самая лучшая идея - вызывать myisampack, если таблица может модифицироваться во время процесса сжатия.

    Последовательность приведенных ниже команд иллюстрирует типичный сеанс сжатия таблицы:

    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm
    
    shell> myisamchk -dvv station
    
    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-02-02  3:06:43
    Data records:              1192  Deleted blocks:              0
    Datafile: Parts:           1192  Deleted data:                0
    Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
    Max datafile length:   54657023  Max keyfile length:   33554431
    Recordlength:               834
    Record format: Fixed length
    
    table description:
    Key Start Len Index   Type                       Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long              1024       1024          1
    2   32    30  multip. text                      10240       1024          1
    
    Field Start Length Type
    1     1     1
    2     2     4
    3     6     4
    4     10    1
    5     11    20
    6     31    1
    7     32    30
    8     62    35
    9     97    35
    10    132   35
    11    167   4
    12    171   16
    13    187   35
    14    222   4
    15    226   16
    16    242   20
    17    262   20
    18    282   20
    19    302   30
    20    332   4
    21    336   4
    22    340   1
    23    341   8
    24    349   8
    25    357   8
    26    365   2
    27    367   2
    28    369   4
    29    373   4
    30    377   1
    31    378   2
    32    380   8
    33    388   4
    34    392   4
    35    396   4
    36    400   4
    37    404   1
    38    405   4
    39    409   4
    40    413   4
    41    417   4
    42    421   4
    43    425   4
    44    429   20
    45    449   30
    46    479   1
    47    480   1
    48    481   79
    49    560   79
    50    639   79
    51    718   79
    52    797   8
    53    805   1
    54    806   1
    55    807   20
    56    827   4
    57    831   4
    
    shell> myisampack station.MYI
    Compressing station.MYI: (1192 records)
    - Calculating statistics
    
    normal:     20  empty-space:      16  empty-zero:        12  empty-fill:  11
    pre-space:   0  end-space:        12  table-lookups:      5  zero:         7
    Original trees:  57  After join: 17
    - Compressing file
    87.14%
    
    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm
    
    shell> myisamchk -dvv station
    
    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-04-17 19:04:26
    Data records:              1192  Deleted blocks:              0
    Datafile: Parts:           1192  Deleted data:                0
    Datafilepointer (bytes):      3  Keyfile pointer (bytes):     1
    Max datafile length:   16777215  Max keyfile length:     131071
    Recordlength:               834
    Record format: Compressed
    
    table description:
    Key Start Len Index   Type                       Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long             10240       1024          1
    2   32    30  multip. text                      54272       1024          1
    
    Field Start Length Type                         Huff tree  Bits
    1     1     1      constant                             1     0
    2     2     4      zerofill(1)                          2     9
    3     6     4      no zeros, zerofill(1)                2     9
    4     10    1                                           3     9
    5     11    20     table-lookup                         4     0
    6     31    1                                           3     9
    7     32    30     no endspace, not_always              5     9
    8     62    35     no endspace, not_always, no empty    6     9
    9     97    35     no empty                             7     9
    10    132   35     no endspace, not_always, no empty    6     9
    11    167   4      zerofill(1)                          2     9
    12    171   16     no endspace, not_always, no empty    5     9
    13    187   35     no endspace, not_always, no empty    6     9
    14    222   4      zerofill(1)                          2     9
    15    226   16     no endspace, not_always, no empty    5     9
    16    242   20     no endspace, not_always              8     9
    17    262   20     no endspace, no empty                8     9
    18    282   20     no endspace, no empty                5     9
    19    302   30     no endspace, no empty                6     9
    20    332   4      always zero                          2     9
    21    336   4      always zero                          2     9
    22    340   1                                           3     9
    23    341   8      table-lookup                         9     0
    24    349   8      table-lookup                        10     0
    25    357   8      always zero                          2     9
    26    365   2                                           2     9
    27    367   2      no zeros, zerofill(1)                2     9
    28    369   4      no zeros, zerofill(1)                2     9
    29    373   4      table-lookup                        11     0
    30    377   1                                           3     9
    31    378   2      no zeros, zerofill(1)                2     9
    32    380   8      no zeros                             2     9
    33    388   4      always zero                          2     9
    34    392   4      table-lookup                        12     0
    35    396   4      no zeros, zerofill(1)               13     9
    36    400   4      no zeros, zerofill(1)                2     9
    37    404   1                                           2     9
    38    405   4      no zeros                             2     9
    39    409   4      always zero                          2     9
    40    413   4      no zeros                             2     9
    41    417   4      always zero                          2     9
    42    421   4      no zeros                             2     9
    43    425   4      always zero                          2     9
    44    429   20     no empty                             3     9
    45    449   30     no empty                             3     9
    46    479   1                                          14     4
    47    480   1                                          14     4
    48    481   79     no endspace, no empty               15     9
    49    560   79     no empty                             2     9
    50    639   79     no empty                             2     9
    51    718   79     no endspace                         16     9
    52    797   8      no empty                             2     9
    53    805   1                                          17     1
    54    806   1                                           3     9
    55    807   20     no empty                             3     9
    56    827   4      no zeros, zerofill(2)                2     9
    57    831   4      no zeros, zerofill(1)                2     9
    

    Ниже приведено описание вывода myisampack:

    normal
    Количество столбцов, для которых не используется никакого дополнительного сжатия.
    empty-space
    Количество столбцов, содержащих пустые значения; эти занимают по 1 биту.
    empty-zero
    Количество целочисленных столбцов, в которых содержатся только двоичные нули (ascii 0); каждый из них будет занимать 1 бит
    empty-fill
    Количество целочисленных столбцов, значения которых не полностью занимают отведенную для них разрядность в байтах; тип этих столбцов изменяется на тип с меньшей разрядностью(например, столбец INTEGER может быть изменен на MEDIUMINT).
    pre-space
    Количество десятичных столбцов, которые хранятся с начальными пробелами. В этом случае каждое значение будет содержать число ведущих пробелов.
    end-space
    Количество столбцов, имеющих много оконечных пробелов. В этом случае каждое значение будет содержать число таких пробелов.
    table-lookup
    Столбец имеет только небольшое количество различающихся значений, которые перед сжатием Хаффмана (Huffman) конвертируются в ENUM.
    zero
    Количество столбцов, все значения которых являются нулями.
    Original trees
    Начальное количество деревьев Хаффмана.
    After join
    Количество различных деревьев Хаффмана, оставленных после соединения деревьев для сохранения немного пространства в заголовках.

    После сжатия таблицы myisamchk -dvv выводит дополнительную информацию по каждому полю:

    Type
    Тип поля может содержать следующие дескрипторы:
    constant
    Все строки содержат одинаковое значение.
    no endspace
    Не сохраняются замыкающие пробелы.
    no endspace, not_always
    Не сохраняются замыкающие пробелы и не производится сжатие за счет замыкающих пробелов для всех значений.
    no endspace, no empty
    Не сохраняются замыкающие пробелы. Не сохраняются пустые значения.
    table-lookup
    Столбец был преобразован к ENUM.
    zerofill(n)
    В значении n главных байтов всегда являются 0 и не сохранены.
    no zeros
    Не сохраняются нули.
    always zero
    Значения 0 хранятся в 1 бите.
    Huff tree
    Дерево Хаффмана, связанное с полем.
    Bits
    Количество битов, используемых в дереве Хаффмана.

    После запуска pack_isam/myisampack нужно запустить isamchk/myisamchk для повторного создания индекса. В это время можно также отсортировать индексные блоки и создать статистику, необходимую для более эффективной работы оптимизатора MySQL:

    myisamchk -rq --analyze --sort-index table_name.MYI
    isamchk -rq --analyze --sort-index table_name.ISM
    

    После установки сжатой таблицы в директорию базы данных MySQL нужно проделать операцию mysqladmin flush-tables, чтобы сервер mysqld начал использовать новую таблицу.

    Для распаковки сжатой таблицы можно использовать опцию --unpack isamchk или myisamchk.




Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости