Spec-Zone.ru › MySQL 5.7

4.6.5 myisampack — Генерация сжатых, только для чтения таблиц MyISAM

Утилита myisampack сжимает MyISAM таблицы. myisampack работает, сжимая каждый столбец в таблице по отдельности. Обычно myisampack сжимает файл данных на 40–70%.

При последующем использовании таблицы сервер загружает в память информацию, необходимую для распаковки столбцов. Это приводит к значительно лучшему быстродействию при доступе к отдельным строкам, так как нужно распаковать только одну строку.

MySQL использует mmap(), когда это возможно, для использования сопоставления памяти со сжатыми таблицами. Если mmap() не работает, MySQL использует обычные операции чтения/записи файлов.

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

  • Если сервер mysqld был запущен с отключёнными внешними блокировками, не рекомендуется вызывать myisampack, если таблица может быть обновлена сервером во время процесса упаковки. Безопаснее всего сжимать таблицы с остановленным сервером.

  • После упаковки таблица становится только для чтения. Это обычно предполагается (например, при доступе к упакованным таблицам на компакт-диске).

  • myisampack не поддерживает разграниченные таблицы.

Вызов myisampack выглядит так:

myisampack [options] file_name ...

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

После сжатия таблицы с помощью myisampack используйте myisamchk -rq для перестроения индексов. Раздел 4.6.3, «myisamchk — Утилита обслуживания таблиц MyISAM».

myisampack поддерживает следующие параметры. Также он читает файлы параметров и поддерживает параметры для их обработки, описанные в Разделе 4.2.2.3, «Параметры командной строки, влияющие на обработку файла параметров».

END_OF_DOCUMENT_MARKER
  • --help, -?

    Формат командной строки --help

    Отобразить сообщение справки и выйти.

  • --backup, -b

    Формат командной строки --backup

    Создать резервную копию файла данных каждой таблицы с использованием имени tbl_name.OLD.

  • --character-sets-dir=dir_name

    Формат командной строки --character-sets-dir=dir_name
    Тип Имя каталога

    Каталог, в котором установлены наборы символов. См. Раздел 10.15, «Настройка наборов символов».

  • --debug[=debug_options], -# [debug_options]

    Формат командной строки --debug[=debug_options]
    Тип Строка
    Значение по умолчанию d:t:o

    Запись отладочного журнала. Типичная строка debug_options имеет вид d:t:o,file_name. По умолчанию используется значение d:t:o.

    Этот параметр доступен только в том случае, если MySQL был скомпилирован с помощью WITH_DEBUG. Бинарные релизы MySQL, предоставляемые компанией Oracle, не компилируются с использованием этого параметра.

  • --force, -f

    Формат командной строки --force

    Сжать таблицу, даже если она станет больше исходной или если промежуточный файл из предыдущего вызова myisampack существует. (myisampack создаёт промежуточный файл с именем tbl_name.TMD в каталоге базы данных во время сжатия таблицы. Если вы прервёте работу myisampack, файл .TMD может не быть удалён.) Обычно myisampack завершается с ошибкой, если находит, что файл tbl_name.TMD существует. С помощью параметра --force myisampack сжимает таблицу в любом случае.

  • --join=big_tbl_name, -j big_tbl_name

    Формат командной строки --join=big_tbl_name
    Тип Строка

    Объединить все таблицы, перечисленные в командной строке, в одну сжатую таблицу big_tbl_name. Все таблицы, которые будут объединены, должны иметь одинаковую структуру (одинаковые имена столбцов и типы, одинаковые индексы и так далее).

    big_tbl_name не должен существовать до выполнения операции объединения. Все исходные таблицы, перечисленные в командной строке для слияния в big_tbl_name, должны существовать. Исходные таблицы читаются для операции объединения, но не изменяются.

  • --silent, -s

    Формат командной строки --silent

    Без вывода. Вывод записывается только при возникновении ошибок.

  • --test, -t

    Формат командной строки --test

    Не производить фактического сжатия таблицы, а только проверить возможность её сжатия.

  • --tmpdir=dir_name, -T dir_name

    Формат командной строки --tmpdir=dir_name
    Тип Имя каталога

    Использовать указанный каталог в качестве места для создания временных файлов myisampack.

  • --verbose, -v

    Формат командной строки --verbose

    Режим подробного вывода. Записывать информацию о ходе операции сжатия и её результатах.

  • --version, -V

    Формат командной строки --version

    Отобразить информацию о версии и выйти.

  • --wait, -w

    Формат командной строки --wait

    Ожидать и повторять попытки, если таблица используется. Если сервер mysqld был запущен с отключением внешнего блокирования, не рекомендуется вызывать myisampack, если таблица может быть обновлена сервером во время процесса сжатия.

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

$> ls -l station.*
-rw-rw-r--   1 jones    my         994128 Apr 17 19:00 station.MYD
-rw-rw-r--   1 jones    my          53248 Apr 17 19:00 station.MYI
-rw-rw-r--   1 jones    my           5767 Apr 17 19:00 station.frm

$> 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

$> 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%
Remember to run myisamchk -rq on compressed tables

$> myisamchk -rq station
- check record delete-chain
- recovering (with sort) MyISAM-table 'station'
Data records: 1192
- Fixing index 1
- Fixing index 2

$> mysqladmin -uroot flush-tables

$> ls -l station.*
-rw-rw-r--   1 jones    my         127874 Apr 17 19:00 station.MYD
-rw-rw-r--   1 jones    my          55296 Apr 17 19:04 station.MYI
-rw-rw-r--   1 jones    my           5767 Apr 17 19:00 station.frm

$> 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
Datafile pointer (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

    Количество столбцов, содержащих значения, состоящие только из пробелов. Они занимают один бит.

  • empty-zero

    Количество столбцов, содержащих значения, состоящие только из нулей в двоичном формате. Они занимают один бит.

  • empty-fill

    Количество целочисленных столбцов, которые не занимают весь диапазон байтов своего типа. Они изменяются на тип меньшего размера. Например, столбец BIGINT (восемь байтов) может быть сохранён как столбец TINYINT (один байт), если все его значения находятся в диапазоне от -128 до 127.

  • pre-space

    Количество десятичных столбцов, которые хранятся с ведущими пробелами. В этом случае каждое значение содержит счётчик количества ведущих пробелов.

  • end-space

    Количество столбцов, имеющих много хвостовых пробелов. В этом случае каждое значение содержит счётчик количества хвостовых пробелов.

  • table-lookup

    В столбце было небольшое количество различных значений, которые были преобразованы в ENUM перед сжатием Хаффмана.

  • zero

    Количество столбцов, все значения которых равны нулю.

  • Original trees

    Начальное количество деревьев Хаффмана.

  • After join

    Количество оставшихся уникальных деревьев Хаффмана после объединения деревьев для экономии места в заголовке.

После сжатия таблицы строки Field, отображаемые командой 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

      Нулевые значения хранятся с использованием одного бита.

  • Huff tree

    Номер дерева Хаффмана, связанного со столбцом.

  • Bits

    Количество битов, используемых в дереве Хаффмана.

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

myisamchk -rq --sort-index --analyze tbl_name.MYI

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

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/myisampack.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API