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