Spec-Zone.ru › MySQL 5.7

4.6.3.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, либо именем файла индекса, как описано в разделе 4.6.3, «myisamchk — Утилита обслуживания таблиц MyISAM». Можно указать несколько аргументов 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:       latin1_swedish_ci (8)
File-version:        1
Creation time:       2009-08-19 16:47:41
Recover time:        2009-08-19 16:47:56
Status:              checked,analyzed,optimized keys
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        99328       1024
2   6     20  multip. varchar prefix           512      3563520       1024
    27    20          varchar                  512
3   48    3   multip. uint24 NULL           306688      6065152       1024

Field Start Length Nullpos Nullbit Type
1     1     1
2     2     4                      no zeros
3     6     21                     varchar
4     27    21                     varchar
5     48    3      1       1       no zeros
6     51    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

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

  • Datafile parts

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

  • Deleted data

    Количество байтов необработанных удалённых данных. Можно оптимизировать таблицу для минимизации этого пространства. См. раздел 7.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. См. раздел 4.6.5, «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

    Сколько удалённых блоков всё ещё занимают выделенное место. Вы можете оптимизировать таблицу, чтобы минимизировать это место. См. раздел 7.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. Если оно становится слишком большим, можно перестроить таблицу. См. раздел 7.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-5.7-en/myisamchk-table-info.html

Spec-Zone.ru

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