MySQL 8.0 リファレンスマニュアル


4.6.4.5 myisamchk によるテーブル情報の取得

MyISAM テーブル情報またはそれに関する統計を取得するには、次に示すコマンドを使用します。 これらのコマンドの出力は、このセクションのあとの方で説明します。

  • myisamchk -d tbl_name

    myisamchkdescribe モード で実行し、テーブル情報を生成します。 外部ロックが無効になっている MySQL サーバーを起動した場合には、myisamchk は、実行中に更新があったテーブルに対してエラーをレポートすることがあります。 ただし、describe モードでは myisamchk はテーブルを変更しないため、データが破損される危険はありません。

  • myisamchk -dv tbl_name

    -v を追加すると、myisamchk は詳細モードで実行され、テーブルについてより多くの情報を生成します。 -v をもう一度使用するとさらに多くの情報が生成されます。

  • myisamchk -eis tbl_name

    テーブルからのもっとも重要な情報のみを表示します。 この操作はテーブル全体を読み取る必要があるため、時間がかかります。

  • myisamchk -eiv tbl_name

    これは -eis と同様ですが、進行中の処理が表示されます。

tbl_name 引数は、セクション4.6.4「myisamchk — MyISAM テーブルメンテナンスユーティリティー」で説明するように、MyISAM テーブルの名前か、またはそのインデックスファイル名のいずれかです。 複数の tbl_name 引数を指定できます。

person という名前のテーブルの構造が、次のようになっているとします。 (あとに示す myisamchk からの出力例で、一部の値がより小さく、出力形式に適合しやすいように、MAX_ROWS テーブルオプションが含まれます。)

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 が生成する情報のタイプについて次に説明します。 Keyfile とはインデックスファイルのことです。 レコードフィールドカラムは、それぞれシノニムです。

テーブル情報の最初の部分には次の値が含まれます。

  • MyISAM file

    MyISAM (インデックス) ファイルの名前。

  • Record format

    テーブルの行を保存するために使用される形式。 前述の例では Fixed length を使用しています。 ほかの値には、Compressed および Packed があります。 (PackedSHOW TABLE STATUS レポートで Dynamic とレポートされるものに対応します。)

  • Chararacter set

    テーブルのデフォルト文字セット。

  • File-version

    MyISAM 形式のバージョン。 常に 1。

  • Creation time

    いつデータファイルが作成されたか。

  • Recover time

    インデックスファイル/データファイルが最後にいつ再構成されたか。

  • Status

    テーブルのステータスフラグ。 可能な値は crashedopenchangedanalyzedoptimized keys、および sorted index pages です。

  • Auto increment keyLast value

    テーブルの AUTO_INCREMENT カラムに関連付けられたキー番号、およびこのカラムに対して直近に生成された値。 そのようなカラムがない場合はこのフィールドは表示されません。

  • Data records

    テーブル内の行数。

  • Deleted blocks

    削除されたブロックで、スペースがまだ予約されているものの数。 テーブルを最適化してこのスペースを最小化できます。 セクション7.6.4「MyISAM テーブルの最適化」を参照してください。

  • Datafile parts

    動的行フォーマットでは、これはデータブロックの数を示します。 断片化レコードがない最適化されたテーブルでは、これはデータレコードと同じです。

  • 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

    このキーの番号。 この値は、キーの最初のカラムに関してのみ表示されます。 この値が欠落している場合、行は複数カラムキーの 2 番目以降のカラムに対応します。 例に示したテーブルでは、2 番目のインデックスについて 2 つの table description 行があります。 これは、2 つの部分で構成されるマルチパートインデックスであることを示しています。

  • Start

    インデックスのこの部分が行の中のどこで始まるか。

  • Len

    インデックスのこの部分の長さ。 パックされた番号では、これは常にカラム全体の長さであるはずです。 文字列では、文字列カラムのプリフィクスにインデックスを付けることができるため、インデックスされるカラム全体の長さより短い場合があります。 マルチパートキーの合計の長さは、すべてのキーパートの Len 値の合計です。

  • Index

    キー値がインデックス内に複数回存在できるかどうか。 可能な値は unique または multip (multiple) です。

  • Type

    インデックスのこの部分のデータ型。 packedstripped、または empty のいずれかの値の MyISAM データ型です。

  • Root

    ルートインデックスブロックのアドレス。

  • Blocksize

    各インデックスブロックのサイズ。 デフォルトでは 1024 ですが、この値は MySQL がソースからビルドされる場合はコンパイル時に変更できます。

  • Rec/key

    これはオプティマイザによって使用される統計値です。 このインデックスで、値当たりにいくつの行があるかを示します。 一意のインデックスでは値は常に 1 です。 これは、テーブルのロード (または大きな変更) のあとに myisamchk -a で更新される場合があります。 まったく更新されない場合はデフォルト値の 30 が指定されます。

出力の最後の部分は、各カラムの情報を示します。

  • Field

    カラム番号。

  • Start

    テーブルの行の中でのカラムのバイト位置。

  • Length

    カラムの長さ (バイト単位)。

  • NullposNullbit

    NULL を取れるカラムでは、MyISAMNULL 値をバイト内のフラグとして保存します。 Null にできるカラムがいくつあるかによって、このために使用されるバイトが 1 またはそれ以上ある場合があります。 Nullpos 値および Nullbit 値が空でない場合は、カラムが NULL かどうかを示すフラグが、どのバイトおよびビットに含まれるかを示します。

    NULL フラグを保存するために使用される位置とバイト数は、フィールド 1 の行に示されます。 person テーブルには 5 つのカラムしかないのに Field 行が 6 個あるのはこのためです。

  • Type

    データ型。 この値は次のいずれかのディスクリプタを含むことがあります。

    • constant

      すべての行は同じ値を持っています。

    • no endspace

      エンドスペースを保存しません。

    • no endspace, not_always

      エンドスペースを保存せず、またすべての値にエンドスペース圧縮を行いません。

    • no endspace, no empty

      エンドスペースを保存しません。 空の値を保存しません。

    • table-lookup

      カラムは ENUM に変換されました。

    • zerofill(N)

      値の中の最上位の N バイトは常に 0 であり、保存されません。

    • no zeros

      ゼロを保存しません。

    • always zero

      ゼロ値は 1 ビットを使用して保存されます。

  • Huff tree

    カラムに関連しているハフマンツリーの数。

  • Bits

    ハフマンツリーで使用されているビット数。

Huff tree フィールドおよび Bits フィールドは、テーブルが myisampack で圧縮されている場合に表示されます。 この情報の例は、セクション4.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

    削除されたブロックで、スペースがまだ予約されているものの数。 テーブルを最適化してこのスペースを最小化できます。 セクション7.6.4「MyISAM テーブルの最適化」を参照してください。

  • Key

    キー番号。

  • Keyblocks used

    キーブロックの何パーセントが使用されているか。 テーブルが myisamchk で再構成されたばかりの場合は、値が非常に高く (理論上の最大値に非常に近く) なります。

  • Packed

    MySQL は、共通のサフィクスを持つキー値のパックを試行します。 これは、CHAR カラムおよび VARCHAR カラムのインデックスにのみ使用できます。 左端に同様の部分を持つインデックス付きの長い文字列では、使用されるスペースをこれによって大幅に削減できる場合があります。 前記の例では 2 番目のキーは長さが 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 は、このようなポインタすべてが使用しているストレージ量の合計です。


関連キーワード:  テーブル, myisamchk, カラム, バイト, インデックス, 情報, プログラム, キー, スペース, サーバー