Spec-Zone.ru › MySQL 9.2

6.6.6 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 для перестроения индексов. Раздел 6.6.4, «myisamchk — Утилита обслуживания таблиц MyISAM».

myisampack поддерживает следующие опции. Также он читает файлы параметров и поддерживает опции для обработки, описанные в Разделе 6.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
    Тип Имя каталога

    Каталог, где установлены кодировки символов. См. Раздел 12.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

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

$> 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-9.2-en/myisampack.html

Spec-Zone.ru

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