このページは機械翻訳したものです。
MyISAM テーブル情報またはそれに関する統計を取得するには、次に示すコマンドを使用します。 これらのコマンドの出力は、このセクションのあとの方で説明します。
-
myisamchk -d
tbl_namemyisamchk を 「describe モード」 で実行し、テーブル情報を生成します。 外部ロックが無効になっている 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 fileMyISAM(インデックス) ファイルの名前。 -
Record formatテーブルの行を保存するために使用される形式。 前述の例では
Fixed lengthを使用しています。 ほかの値には、CompressedおよびPackedがあります。 (PackedはSHOW TABLE STATUSレポートでDynamicとレポートされるものに対応します。) -
Chararacter setテーブルのデフォルト文字セット。
-
File-versionMyISAM形式のバージョン。 常に 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動的行フォーマットでは、これはデータブロックの数を示します。 断片化レコードがない最適化されたテーブルでは、これは
データレコードと同じです。 -
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インデックスのこの部分のデータ型。
packed、stripped、またはemptyのいずれかの値のMyISAMデータ型です。 -
Rootルートインデックスブロックのアドレス。
-
Blocksize各インデックスブロックのサイズ。 デフォルトでは 1024 ですが、この値は MySQL がソースからビルドされる場合はコンパイル時に変更できます。
-
Rec/keyこれはオプティマイザによって使用される統計値です。 このインデックスで、値当たりにいくつの行があるかを示します。 一意のインデックスでは値は常に 1 です。 これは、テーブルのロード (または大きな変更) のあとに myisamchk -a で更新される場合があります。 まったく更新されない場合はデフォルト値の 30 が指定されます。
出力の最後の部分は、各カラムの情報を示します。
-
Fieldカラム番号。
-
Startテーブルの行の中でのカラムのバイト位置。
-
Lengthカラムの長さ (バイト単位)。
-
Nullpos、NullbitNULLを取れるカラムでは、MyISAMはNULL値をバイト内のフラグとして保存します。 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 で再構成されたばかりの場合は、値が非常に高く (理論上の最大値に非常に近く) なります。
-
PackedMySQL は、共通のサフィクスを持つキー値のパックを試行します。 これは、
CHARカラムおよびVARCHARカラムのインデックスにのみ使用できます。 左端に同様の部分を持つインデックス付きの長い文字列では、使用されるスペースをこれによって大幅に削減できる場合があります。 前記の例では 2 番目のキーは長さが 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は、このようなポインタすべてが使用しているストレージ量の合計です。