4.4.8 Получение информации о таблице

Команды, представленные в этом разделе, используются для получения описания таблицы или статистики по таблице. Более подробное выборочное разъяснение вывода этих команд будет приведено ниже:

  • myisamchk -d tbl_name Выполняет myisamchk в "описательном режиме" для вывода описания таблицы. Если MySQL использует опцию --skip-locking, то myisamchk может сообщить об ошибке для таблицы, обновляемой во время исполнения утилиты. Однако поскольку myisamchk не меняет таблицы в описательном режиме, то никакого риска разрушения данных нет.
  • myisamchk -d -v tbl_name Для выдачи дополнительной информации по действиям, выполняемым утилитой myisamchk, добавляется -v для указания расширенного режима вывода сообщений.
  • myisamchk -eis tbl_name Отображается только наиболее важная информация из таблицы. Работает медленно вследствие того, что приходится считывать всю таблицу.
  • myisamchk -eiv tbl_name То же, что и -eis, но с сообщением о выполняемых действиях.

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

MyISAM file:     company.MYI
Record format:   Fixed length
Data records:    1403698  Deleted blocks:         0
Recordlength:    226

table description:
Key Start Len Index   Type
1   2     8   unique  double
2   15    10  multip. text packed stripped
3   219   8   multip. double
4   63    10  multip. text packed stripped
5   167   2   multip. unsigned short
6   177   4   multip. unsigned long
7   155   4   multip. text
8   138   4   multip. unsigned long
9   177   4   multip. unsigned long
    193   1           text

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

MyISAM file:         company
Record format:       Fixed length
File-version:        1
Creation time:       1999-10-30 12:12:51
Recover time:        1999-10-31 19:13:01
Status:              checked
Data records:           1403698  Deleted blocks:              0
Datafile parts:         1403698  Deleted data:                0
Datafilepointer (bytes):      3  Keyfile pointer (bytes):     3
Max datafile length: 3791650815  Max keyfile length: 4294967294
Recordlength:               226

table description:
Key Start Len Index   Type                  Rec/key     Root Blocksize
1   2     8   unique  double                      1 15845376      1024
2   15    10  multip. text packed stripped        2 25062400      1024
3   219   8   multip. double                     73 40907776      1024
4   63    10  multip. text packed stripped        5 48097280      1024
5   167   2   multip. unsigned short           4840 55200768      1024
6   177   4   multip. unsigned long            1346 65145856      1024
7   155   4   multip. text                     4995 75090944      1024
8   138   4   multip. unsigned long              87 85036032      1024
9   177   4   multip. unsigned long             178 96481280      1024
    193   1           text

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

Checking MyISAM file: company
Key:  1:  Keyblocks used:  97%  Packed:    0%  Max levels:  4
Key:  2:  Keyblocks used:  98%  Packed:   50%  Max levels:  4
Key:  3:  Keyblocks used:  97%  Packed:    0%  Max levels:  4
Key:  4:  Keyblocks used:  99%  Packed:   60%  Max levels:  3
Key:  5:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
Key:  6:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
Key:  7:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
Key:  8:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
Key:  9:  Keyblocks used:  98%  Packed:    0%  Max levels:  4
Total:    Keyblocks used:  98%  Packed:   17%

Records:          1403698    M.recordlength:     226
Packed:             0%
Recordspace used:     100%   Empty space:          0%
Blocks/Record:   1.00
Record blocks:    1403698    Delete blocks:        0
Recorddata:     317235748    Deleted data:         0
Lost space:             0    Linkdata:             0

User time 1626.51, System time 232.36
Maximum resident set size 0, Integral resident set size 0
Non physical pagefaults 0, Physical pagefaults 627, Swaps 0
Blocks in 0 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 639, Involuntary context switches 28966

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

Checking MyISAM file: company
Data records: 1403698   Deleted blocks:       0
- check file-size
- check delete-chain
block_size 1024:
index  1:
index  2:
index  3:
index  4:
index  5:
index  6:
index  7:
index  8:
index  9:
No recordlinks
- check index reference
- check data record references index: 1
Key:  1:  Keyblocks used:  97%  Packed:    0%  Max levels:  4
- check data record references index: 2
Key:  2:  Keyblocks used:  98%  Packed:   50%  Max levels:  4
- check data record references index: 3
Key:  3:  Keyblocks used:  97%  Packed:    0%  Max levels:  4
- check data record references index: 4
Key:  4:  Keyblocks used:  99%  Packed:   60%  Max levels:  3
- check data record references index: 5
Key:  5:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
- check data record references index: 6
Key:  6:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
- check data record references index: 7
Key:  7:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
- check data record references index: 8
Key:  8:  Keyblocks used:  99%  Packed:    0%  Max levels:  3
- check data record references index: 9
Key:  9:  Keyblocks used:  98%  Packed:    0%  Max levels:  4
Total:    Keyblocks used:   9%  Packed:   17%

- check records and index references
[кое-что опущено для краткости]

Records:          1403698    M.recordlength:     226   Packed:             0%
Recordspace used:     100%   Empty space:          0%  Blocks/Record:   1.00
Record blocks:    1403698    Delete blocks:        0
Recorddata:     317235748    Deleted data:         0
Lost space:             0    Linkdata:             0

User time 1639.63, System time 251.61
Maximum resident set size 0, Integral resident set size 0
Non physical pagefaults 0, Physical pagefaults 10580, Swaps 0
Blocks in 4 out 0, Messages in 0 out 0, Signals 0
Voluntary context switches 10604, Involuntary context switches 122798

Для использованной в предыдущих примерах таблицы размеры файла данных и индексного файла были следующими:

-rw-rw-r-- 1 monty tcx 317235748 Jan 12 17:30 company.MYD
-rw-rw-r-- 1 davida tcx 96482304 Jan 12 18:35 company.MYM

Ниже приводятся пояснения по различным типам выдаваемой myisamchk информации. ``keyfile'' означает индексный файл. ``Record'' (запись) и ``row'' (строка) являются синонимами:

  • ISAM file - Имя (индексного) файла ISAM.
  • Isam-version - Версия формата ISAM. На данный момент всегда 2.
  • Creation time - Время создания файла данных.
  • Recover time - Дата последнего восстановления индексного файла/файла данных.
  • Data records - Количество записей в таблице.
  • Deleted blocks - Количество удаленных блоков, пространство для которых все еще зарезервировано. Таблицу можно оптимизировать для сведения к минимуму этого пространства (see section 4.4.6.10 Оптимизация таблиц).
  • Datafile parts - Для динамического формата записей показывает количество блоков данных. Для оптимизированной таблицы без фрагментированных записей совпадает с Data records.
  • Deleted data - Количество байтов удаленных данных, которые не были затребованы. Можно оптимизировать таблицу, чтобы сделать этот объем минимальным (see section 4.4.6.10 Оптимизация таблиц).
  • Data file pointer - Размер указателя в файле данных (в байтах). Обычно это 2, 3, 4 или 5 байтов. Для большинства таблиц достаточно 2 байтов, но назначение размера пока невозможно контролировать из MySQL. Для фиксированных таблиц указатель - это адрес записи, а для динамических - адрес байта.
  • Keyfile pointer - Размер указателя индексного файла в байтах. Обычно составляет 1, 2 или 3 байта. Для большинства таблиц хватает 2 байтов, но размер автоматически вычисляется MySQL. Указатель всегда является адресом блока.
  • Max datafile length - Максимальный размер файла данных таблицы (`.MYD'-файл) в байтах.
  • Max keyfile length - Максимальный размер индексного файла таблицы (`.MYI-файла') в байтах.
  • Recordlength - Размер отдельной записи в байтах.
  • Record format - Формат, используемый для хранения строк таблицы. В примерах, приведенных выше, использовался формат Fixed length. Другие возможные значения: Compressed и Packed.
  • table description - Список всех ключей в таблице. Для каждого ключа представляется некоторая низкоуровневая информация:
    • Key Номер данного ключа.
    • Start Место в записи, где начинается данная часть индекса.
    • Len Длина данной части индекса. Для упакованных чисел длина всегда должна равняться полной длине для столбца. Для строк длина может быть меньше полной длины индексированной колонки, поскольку допускается индексирование префикса столбца со значениями строками.
    • Индекс unique или multip. (multiple - повторяющийся/многократный) Показывает, может ли одно значение встречаться в индексе многократно.
    • Type Тип данных данной части индекса. Это тип данных ISAM с возможными вариантами - packed, stripped и empty.
    • Root Адрес корневого индексного блока.
    • Blocksize Размер каждого индексного блока. По умолчанию равен 1024, но значение можно изменить во время компиляции.
    • Rec/key Статистическое значение, используемое оптимизатором. Оно показывает, сколько записей приходится на одно значение для данного ключа. Для уникального ключа это соотношение всегда 1. Значение может быть обновлено после загрузки таблицы (или значительного ее изменения) посредством myisamchk -a. Если соотношение совсем не обновляется, то по умолчанию принимается значение 30.
  • В первом из приведенных примеров 9-й ключ является составным с двумя частями.
  • Keyblocks used - Процент использованных блоков ключей. Поскольку для примера была взята таблица, совсем недавно реорганизованная при помощи myisamchk, то значения очень высоки (очень близки к теоретическому максимуму).
  • Packed - MySQL пытается упаковывать ключи с общим суффиксом. Это может быть использовано только для ключей типа CHAR/VARCHAR/DECIMAL. Для длинных строк, таких как имена, при помощи упаковки можно значительно уменьшить занимаемое ими место. В третьем из приведенных примеров 4-й ключ состоит из 10 символов и для него достигнуто 60%-е уменьшение в объеме.
  • Max levels - Глубина B-дерева для данного ключа. В больших таблицах с длинными ключами значение является большим.
  • Records Количество строк в таблице.
  • M.recordlength - Средняя длина записи. Для таблиц с фиксированной длиной записи равняется точной длине записи.
  • Packed - MySQL отбрасывает пробелы в конце строк. Значение Packed указывает на процент достигнутой этим экономии.
  • Recordspace used - Процент использования файла данных.
  • Empty space - На сколько процентов файл данных не использован.
  • Blocks/Record - Среднее число блоков на запись (т.е. из какого числа связей состоит фрагментированная запись). Отношение всегда 1,0 для таблиц фиксированного формата. Важно, чтобы это значение было как можно ближе к 1,0. Если значение становится слишком большим, можно реорганизовать таблицу с помощью myisamchk. Обращайтесь к разделу See section 4.4.6.10 Оптимизация таблиц.
  • Recordblocks - Количество использованных блоков (связей). Для фиксированного формата совпадает с количеством записей.
  • Deleteblocks - Количество удаленных блоков (связей).
  • Recorddata - Количество использованных байтов в файле данных.
  • Deleted data - Количество удаленных (неиспользуемых) байтов в файле данных.
  • Lost space - Если запись при обновлении уменьшается, то теряется некоторое пространство. Данное значение является суммой всех таких потерь в байтах.
  • Linkdata - При использовании динамического формата таблиц фрагменты записи связываются с помощью указателей (каждый от 4 до 7 байтов). Linkdata - общий объем памяти, занимаемый всеми такими указателями.

Если таблица была сжата при помощи myisampack, то myisamchk -d выдает дополнительную информацию о каждом столбце в таблице. Обращайтесь к разделу See section 4.7.4 myisampack, MySQL-генератор сжатых таблиц (только для чтения), где приведен пример такой информации и пояснение к ней.