6.6.4.5 Получение информации о таблице с помощью myisamchk
Для получения описания таблицы MyISAM или статистики о ней используйте команды, показанные здесь. Вывод этих команд объясняется позже в этом разделе.
-
Запускает myisamchk в режиме описания для получения описания вашей таблицы. Если вы запускаете сервер MySQL с отключенным внешним блокированием, myisamchk может сообщить об ошибке для таблицы, которая обновляется во время его работы. Однако, поскольку myisamchk не изменяет таблицу в режиме описания, нет риска уничтожения данных.
-
Добавление
-vзапускает myisamchk в режиме подробной информации, чтобы получить больше информации о таблице. Добавление-vвторой раз выведет еще больше информации. -
Показывается только самая важная информация из таблицы. Эта операция медленная, потому что ей необходимо прочитать всю таблицу.
-
Это как
-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, значения очень высокие (очень близки к теоретическому максимуму).
-
PackedMySQL пытается упаковать ключевые значения, у которых есть общий суффикс. Это может быть использовано только для индексов столбцов
CHARиVARCHAR. Для длинных индексированных строк, имеющих похожие левые части, это может значительно уменьшить занимаемое пространство. В приведенном выше примере второй ключ имеет длину 40 байтов, и достигается снижение занимаемого пространства на 97%. -
Max levelsНасколько глубока B-дерево для этого ключа. У больших таблиц с длинными ключевыми значениями получаются высокие значения.
-
RecordsКоличество строк в таблице.
-
M.recordlengthСредняя длина строки. Это точная длина строки для таблиц с фиксированной длиной строк, так как все строки имеют одинаковую длину.
-
PackedMySQL удаляет пробелы из конца строк. Значение
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.