Spec-Zone.ru › MySQL 9.2

6.6.4.5 Получение информации о таблице с помощью myisamchk

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

  • myisamchk -d tbl_name

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

  • myisamchk -dv tbl_name

    Добавление -v запускает myisamchk в режиме подробной информации, чтобы получить больше информации о таблице. Добавление -v второй раз выведет еще больше информации.

  • myisamchk -eis tbl_name

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

  • myisamchk -eiv tbl_name

    Это как -eis, но сообщает, что делается.

Аргумент tbl_name может быть именем таблицы MyISAM или именем ее файла индекса, как описано в разделе 6.6.4, «myisamchk — MyISAM Table-Maintenance Utility». Можно указать несколько аргументов tbl_name.

Предположим, что таблица с именем person имеет следующую структуру. (Опция таблицы MAX_ROWS включена, чтобы в примере вывода myisamchk, показанном ниже, некоторые значения были меньше и лучше подходили к формату вывода.)

CREATE TABLE person
(
  id         INT NOT NULL AUTO_INCREMENT,
  last_name  VARCHAR(20) NOT NULL,
  first_name VARCHAR(20) NOT NULL,
  birth      DATE,
  death      DATE,
  PRIMARY KEY (id),
  INDEX (last_name, first_name),
  INDEX (birth)
) MAX_ROWS = 1000000 ENGINE=MYISAM;

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

-rw-rw----  1 mysql  mysql  9347072 Aug 19 11:47 person.MYD
-rw-rw----  1 mysql  mysql  6066176 Aug 19 11:47 person.MYI

Пример вывода команды myisamchk -dvv:

MyISAM file:         person
Record format:       Packed
Character set:       utf8mb4_0900_ai_ci (255)
File-version:        1
Creation time:       2017-03-30 21:21:30
Status:              checked,analyzed,optimized keys,sorted index pages
Auto increment key:              1  Last value:                306688
Data records:               306688  Deleted blocks:                 0
Datafile parts:             306688  Deleted data:                   0
Datafile pointer (bytes):        4  Keyfile pointer (bytes):        3
Datafile length:           9347072  Keyfile length:           6066176
Max datafile length:    4294967294  Max keyfile length:   17179868159
Recordlength:                   54

table description:
Key Start Len Index   Type                     Rec/key         Root  Blocksize
1   2     4   unique  long                           1                    1024
2   6     80  multip. varchar prefix                 0                    1024
    87    80          varchar                        0
3   168   3   multip. uint24 NULL                    0                    1024

Field Start Length Nullpos Nullbit Type
1     1     1
2     2     4                      no zeros
3     6     81                     varchar
4     87    81                     varchar
5     168   3      1       1       no zeros
6     171   3      1       2       no zeros

Здесь приведены объяснения типов информации, которые выводит myisamchk. «Файл ключей» относится к файлу индекса. «Запись» и «строка» — синонимы, как и «поле» и «колонка».

Начальная часть описания таблицы содержит следующие значения:

  • MyISAM file

    Имя файла MyISAM (индекса).

  • Record format

    Формат, используемый для хранения строк таблицы. Приведенные примеры используют Fixed length. Другие возможные значения — Compressed и Packed. (Packed соответствует тому, что SHOW TABLE STATUS сообщает как Dynamic.)

  • Chararacter set

    Значение по умолчанию набора символов таблицы.

  • File-version

    Версия формата MyISAM. Всегда 1.

  • Creation time

    Дата создания файла данных.

  • Recover time

    Дата последней реконструкции файла индекса/данных.

  • Status

    Флаги состояния таблицы. Возможные значения — crashed, open, changed, analyzed, optimized keys и sorted index pages.

  • Auto increment key, Last value

    Номер ключа, связанный с колонкой AUTO_INCREMENT таблицы, и последнее сгенерированное значение для этой колонки. Эти поля не отображаются, если такой колонки нет.

  • Data records

    Количество строк в таблице.

  • Deleted blocks

    Сколько удаленных блоков все еще занимают выделенное место. Вы можете оптимизировать таблицу, чтобы минимизировать этот объем. См. раздел 9.6.4, «Оптимизация таблиц MyISAM».

  • Datafile parts

    Для динамического формата строк это указывает, сколько блоков данных существует. Для оптимизированной таблицы без фрагментированных строк это то же самое, что и Data records.

  • Deleted data

    Сколько байтов невостребованных удаленных данных. Вы можете оптимизировать таблицу, чтобы минимизировать этот объем. См. раздел 9.6.4, «Оптимизация таблиц MyISAM».

  • Datafile pointer

    Размер указателя на файл данных в байтах. Обычно 2, 3, 4 или 5 байт. Большинство таблиц справляются с 2 байтами, но это пока нельзя контролировать из MySQL.

  • Keyfile pointer

    Размер указателя на файл индекса в байтах. Обычно 1, 2 или 3 байта. Большинство таблиц справляются с 2 байтами, но это вычисляется автоматически MySQL. Это всегда адрес блока.

  • Max datafile length

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

  • Max keyfile length

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

  • Recordlength

    Размер каждой строки в байтах.

В части вывода table description содержится список всех ключей в таблице. Для каждого ключа myisamchk отображает низкоуровневую информацию:

  • Key

    Номер этого ключа. Это значение отображается только для первой колонки ключа. Если этого значения нет, строка соответствует второй или последующей колонке составного ключа. Для показанной в примере таблицы есть две строки table description для второго индекса. Это указывает на то, что это составной индекс с двумя частями.

  • Start

    С какого места в строке начинается эта часть индекса.

  • Len

    Длина этой части индекса. Для упакованных чисел она должна всегда быть полной длиной колонки. Для строк она может быть короче полной длины индексированной колонки, потому что вы можете индексировать префикс колонки со строковым типом. Общая длина составного ключа — сумма значений Len для всех частей ключа.

  • Index

    Может ли значение ключа существовать несколько раз в индексе. Возможные значения — unique или multip. (множественные).

  • Type

    Тип данных этой части индекса. Это тип данных MyISAM с возможными значениями packed, stripped или empty.

  • Root

    Адрес корневого блока индекса.

  • Blocksize

    Размер каждого блока индекса. По умолчанию это 1024, но значение может быть изменено во время компиляции MySQL из исходного кода.

  • Rec/key

    Это статистическое значение, используемое оптимизатором. Оно показывает, сколько строк приходится на одно значение для этого индекса. Уникальный индекс всегда имеет значение 1. Это может быть обновлено после загрузки (или значительного изменения) таблицы с помощью myisamchk -a. Если это не обновляется совсем, задается значение по умолчанию 30.

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

  • Field

    Номер столбца.

  • Start

    Байтовый позиция столбца в строках таблицы.

  • Length

    Длина столбца в байтах.

  • Nullpos, Nullbit

    Для столбцов, которые могут быть NULL, MyISAM хранит значения NULL в качестве флага в байте. В зависимости от количества столбцов, допускающих NULL, может использоваться один или несколько байтов. Значения Nullpos и Nullbit, если не пустые, указывают, какой байт и бит содержит флаг, указывающий, является ли столбец NULL.

    Позиция и количество байтов, используемых для хранения флагов NULL, показаны в строке для поля 1. Именно поэтому для таблицы person есть шесть строк с Field, хотя в ней только пять столбцов.

  • 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

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

Поля Huff tree и Bits отображаются, если таблица была сжата с помощью myisampack. См. Раздел 6.6.6, «myisampack — Генерация сжатых, только для чтения таблиц MyISAM», для примера этой информации.

Пример вывода myisamchk -eiv:

Checking MyISAM file: person
Data records:  306688   Deleted blocks:       0
- check file-size
- check record delete-chain
No recordlinks
- check key delete-chain
block_size 1024:
- check index reference
- check data record references index: 1
Key:  1:  Keyblocks used:  98%  Packed:    0%  Max levels:  3
- check data record references index: 2
Key:  2:  Keyblocks used:  99%  Packed:   97%  Max levels:  3
- check data record references index: 3
Key:  3:  Keyblocks used:  98%  Packed:  -14%  Max levels:  3
Total:    Keyblocks used:  98%  Packed:   89%

- check records and index references
*** LOTS OF ROW NUMBERS DELETED ***

Records:            306688  M.recordlength:       25  Packed:            83%
Recordspace used:       97% Empty space:           2% Blocks/Record:   1.00
Record blocks:      306688  Delete blocks:         0
Record data:       7934464  Deleted data:          0
Lost space:         256512  Linkdata:        1156096

User time 43.08, System time 1.68
Maximum resident set size 0, Integral resident set size 0
Non-physical pagefaults 0, Physical pagefaults 0, Swaps 0
Blocks in 0 out 7, Messages in 0 out 0, Signals 0
Voluntary context switches 0, Involuntary context switches 0
Maximum memory usage: 1046926 bytes (1023k)

Вывод myisamchk -eiv включает следующую информацию:

  • Data records

    Количество строк в таблице.

  • Deleted blocks

    Сколько удаленных блоков по-прежнему занимают выделенное пространство. Вы можете оптимизировать таблицу, чтобы свести это пространство к минимуму. См. Раздел 9.6.4, «Оптимизация таблиц MyISAM».

  • Key

    Номер ключа.

  • Keyblocks used

    Какой процент ключевых блоков используется. Когда таблица только что была перестроена с помощью myisamchk, значения очень высокие (очень близки к теоретическому максимуму).

  • Packed

    MySQL пытается упаковать ключевые значения, у которых есть общий суффикс. Это может быть использовано только для индексов столбцов CHAR и VARCHAR. Для длинных индексированных строк, имеющих похожие левые части, это может значительно уменьшить занимаемое пространство. В приведенном выше примере второй ключ имеет длину 40 байтов, и достигается снижение занимаемого пространства на 97%.

  • Max levels

    Насколько глубока B-дерево для этого ключа. У больших таблиц с длинными ключевыми значениями получаются высокие значения.

  • Records

    Количество строк в таблице.

  • M.recordlength

    Средняя длина строки. Это точная длина строки для таблиц с фиксированной длиной строк, так как все строки имеют одинаковую длину.

  • Packed

    MySQL удаляет пробелы из конца строк. Значение Packed указывает процент экономии, достигнутый благодаря этому.

  • Recordspace used

    Какой процент файла данных используется.

  • Empty space

    Какой процент файла данных не используется.

  • Blocks/Record

    Среднее количество блоков на строку (то есть, сколько ссылок состоит из фрагментированной строки). Для таблиц с фиксированным форматом это всегда 1,0. Это значение должно оставаться как можно ближе к 1,0. Если оно становится слишком большим, вы можете перестроить таблицу. См. Раздел 9.6.4, «Оптимизация таблиц MyISAM».

  • Recordblocks

    Сколько блоков (ссылок) используется. Для таблиц с фиксированным форматом это то же самое, что и количество строк.

  • Deleteblocks

    Сколько блоков (ссылок) удалено.

  • Recorddata

    Сколько байтов в файле данных используется.

  • Deleted data

    Сколько байтов в файле данных удалено (не используется).

  • Lost space

    Если строка обновляется до меньшей длины, теряется некоторое пространство. Это сумма всех таких потерь в байтах.

  • Linkdata

    При использовании динамического формата таблицы фрагменты строк связаны указателями (от 4 до 7 байтов каждый). Linkdata — сумма объема памяти, используемого всеми такими указателями.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/myisamchk-table-info.html

Spec-Zone.ru

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