myisampackユーティリティはMyISAM
テーブルを圧縮します。myisampackはテーブル内の各カラムを別個に圧縮することで作動します。通常、myisampackは40%-70%データファイルをパックします。
テーブルが後で使用される場合、カラムの解凍に必要な情報をサーバがメモリ内に読み込みます。これにより個別の行をアクセスする際のパフォーマンスが向上します。これは1つの行のみ解凍するだけでことたりるからです。
MySQLは圧縮されたテーブルでメモリのマッピングが可能な場合、mmap()
を使用します。もしmmap()
が使用できない場合、MySQLは普通のファイル読み込み・書き込みオペレーションを使用します。
以下の点に注意してください。
もしmysqldサーバが外部ロックが無効化された状態で起動された場合、パックの最中にテーブルが更新される可能性があるので、myisampackの起動はお勧めできません。サーバが停止している最中にテーブルを圧縮するのが安全です。
テーブルをパックした場合、読み取り専用となります。通常これは意図して行います(たとえばCD内のパックされたテーブルにアクセスする際)。パックされたテーブル内で書き込みを許容できるようにする予定はありますが、優先順位は高くありません。
myisampackはBLOB
あるいはTEXT
カラムをパックできます。(ISAM
テーブルの古いpack_isamプログラムにはこの機能はありませんでした。)
myisampackは以下のように起動してください。
shell> myisampack [options
] file_name
...
各ファイル名アーギュメントはインデックスファイル(.MYI
)
名であるべきです。ユーザがデータベースディレクトリにいない場合、ファイルへのパスネームを特定してください。.MYI
拡張の省略は許容されています。
myisampackを使用してテーブルを圧縮した後、インデックスを再生するためmyisamchk -rqを使用してください。 項7.4. 「myisamchk — MyISAM テーブル メンテナンス ユーティリティ」.
myisampackは次のオプションをサポートします。
ヘルプ メッセージを表示し、閉じます。
を使用して各テーブルのデータファイルのバックアップを作成します。
tbl_name
.OLD
キャラクタ セットがインストールされるディレクトリです。項4.10.1. 「データおよびソート用キャラクタ セット」 を参照してください。
--debug[=
,
debug_options
]-#
[
debug_options
]
デバッグのログを書き込みます。debug_options
文字列は大抵
'd:t:o,
になります。
file_name
'
元のテーブルより大きくなるか、以前のmyisampack起動からのインターミディートファイルが存在する場合も、パックされたテーブルを生成します。(myisampackは、テーブル圧縮時、
と名づけられたインターミディエートファイルをデータベースディレクトリ内に作成します。myisampackを抹消した場合、tbl_name
.TMD.TMD
ファイルは削除されていないかもしれません。)通常、myisampackは
が存在する場合、エラーが発生し閉じます。tbl_name
.TMD--force
では、myisampackはかまわずテーブルをパックします。
--join=
,
big_tbl_name
-j
big_tbl_name
コマンドライン上の全テーブルを1つのテーブルbig_tbl_name
に結合します。結合されるテーブルは、必ず同一の構成でなければいけません(同一カラム名、型、同一インデックス等など)。
バイトで行長さ保存サイズを特定します。値は1、2、あるいは3であるべきです。 myisampackは全ての行を1、2、あるいは3バイトの長さポインタで記憶します。通常、myisampackはファイルのパックをはじめる前に正しい長さの値を割り出せますが、さらに短い長さを使用することができた場合でも、パック処理の最中に気づかない可能性がありあます。この場合、myisampackは次回同じファイルをパックする際、さらに短い行長さを使用することができることを示すノートをプリントします。
サイレントモード。エラーが発生したときのみアウトプットを書き込みます。
実際にテーブルをパックせず、パックのテストを行います。
名づけられたディレクトリを、myisampackがテンポラリファイルを作成する場所に使用します。
Verbose モードパックオペレーションの進捗具合と結果を示す情報を書き出します。
バージョン情報を表示し、閉じます。
テーブルが使用中の場合、待ってから再度試みます。もしmysqldサーバが外部ロックが無効化された状態で起動された場合、パックの最中にテーブルが更新される可能性があるので、myisampackの起動はお勧めできません。
以下のコマンドシーケンスは典型的なテーブル圧縮セッションを表しています。
shell>ls -l station.*
-rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell>myisamchk -dvv station
MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-02-02 3:06:43 Data records: 1192 Deleted blocks: 0 Datafile parts: 1192 Deleted data: 0 Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2 Max datafile length: 54657023 Max keyfile length: 33554431 Recordlength: 834 Record format: Fixed length table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 1024 1024 1 2 32 30 multip. text 10240 1024 1 Field Start Length Type 1 1 1 2 2 4 3 6 4 4 10 1 5 11 20 6 31 1 7 32 30 8 62 35 9 97 35 10 132 35 11 167 4 12 171 16 13 187 35 14 222 4 15 226 16 16 242 20 17 262 20 18 282 20 19 302 30 20 332 4 21 336 4 22 340 1 23 341 8 24 349 8 25 357 8 26 365 2 27 367 2 28 369 4 29 373 4 30 377 1 31 378 2 32 380 8 33 388 4 34 392 4 35 396 4 36 400 4 37 404 1 38 405 4 39 409 4 40 413 4 41 417 4 42 421 4 43 425 4 44 429 20 45 449 30 46 479 1 47 480 1 48 481 79 49 560 79 50 639 79 51 718 79 52 797 8 53 805 1 54 806 1 55 807 20 56 827 4 57 831 4 shell>myisampack station.MYI
Compressing station.MYI: (1192 records) - Calculating statistics normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11 pre-space: 0 end-space: 12 table-lookups: 5 zero: 7 Original trees: 57 After join: 17 - Compressing file 87.14% Remember to run myisamchk -rq on compressed tables shell>ls -l station.*
-rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell>myisamchk -dvv station
MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-04-17 19:04:26 Data records: 1192 Deleted blocks: 0 Datafile parts: 1192 Deleted data: 0 Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1 Max datafile length: 16777215 Max keyfile length: 131071 Recordlength: 834 Record format: Compressed table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 10240 1024 1 2 32 30 multip. text 54272 1024 1 Field Start Length Type Huff tree Bits 1 1 1 constant 1 0 2 2 4 zerofill(1) 2 9 3 6 4 no zeros, zerofill(1) 2 9 4 10 1 3 9 5 11 20 table-lookup 4 0 6 31 1 3 9 7 32 30 no endspace, not_always 5 9 8 62 35 no endspace, not_always, no empty 6 9 9 97 35 no empty 7 9 10 132 35 no endspace, not_always, no empty 6 9 11 167 4 zerofill(1) 2 9 12 171 16 no endspace, not_always, no empty 5 9 13 187 35 no endspace, not_always, no empty 6 9 14 222 4 zerofill(1) 2 9 15 226 16 no endspace, not_always, no empty 5 9 16 242 20 no endspace, not_always 8 9 17 262 20 no endspace, no empty 8 9 18 282 20 no endspace, no empty 5 9 19 302 30 no endspace, no empty 6 9 20 332 4 always zero 2 9 21 336 4 always zero 2 9 22 340 1 3 9 23 341 8 table-lookup 9 0 24 349 8 table-lookup 10 0 25 357 8 always zero 2 9 26 365 2 2 9 27 367 2 no zeros, zerofill(1) 2 9 28 369 4 no zeros, zerofill(1) 2 9 29 373 4 table-lookup 11 0 30 377 1 3 9 31 378 2 no zeros, zerofill(1) 2 9 32 380 8 no zeros 2 9 33 388 4 always zero 2 9 34 392 4 table-lookup 12 0 35 396 4 no zeros, zerofill(1) 13 9 36 400 4 no zeros, zerofill(1) 2 9 37 404 1 2 9 38 405 4 no zeros 2 9 39 409 4 always zero 2 9 40 413 4 no zeros 2 9 41 417 4 always zero 2 9 42 421 4 no zeros 2 9 43 425 4 always zero 2 9 44 429 20 no empty 3 9 45 449 30 no empty 3 9 46 479 1 14 4 47 480 1 14 4 48 481 79 no endspace, no empty 15 9 49 560 79 no empty 2 9 50 639 79 no empty 2 9 51 718 79 no endspace 16 9 52 797 8 no empty 2 9 53 805 1 17 1 54 806 1 3 9 55 807 20 no empty 3 9 56 827 4 no zeros, zerofill(2) 2 9 57 831 4 no zeros, zerofill(1) 2 9
myisampackは以下の種類の情報を表示します。
ノーマル
余分なパックが使用されていないカラムの数。
empty-space
スペースの値のみ含むカラムの数これらは1ビットの容量を占めています。
empty-zero
バイナリゼロの値のみ含むカラムの数これらは1ビットの容量を占めています。
empty-fill
それぞれの型のバイトレンジを全て占領しない整数カラムの数。これらは小さいタイプに変えられます。例えば、BIGINT
カラム
(8バイト)の全ての値が-128
から 127
の範囲内にある場合は、このカラムを
TINYINT
カラム(1バイト)として格納する事ができます。
pre-space
リードスペースで記憶される小数点カラムの数。この場合、各値はリードスペースの数に対して数値を含んでいます。
end-space
トレールスペースを多く含むカラムの数。この場合、各値はトレールスペースの数に対して数値を含んでいます。
table-lookup
ハフマン圧縮の前にENUM
に変換された、少量の異なる値が絡むにありました。
zero
全ての値がゼロのカラムの数です。
オリジナルトリー
もともとのハフマントリーの数です。
アフタージョイン(結合)
ヘッダースペース温存のため、トリーの結合の後に残った明確なハフマントリーの数です。
テーブルが圧縮された後、myisamchk -dvvは各カラムの追加情報をプリントします。
タイプ
データ型。この値は以下のどれかの記述子を含んでいます。
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
ハフマントリーで使用されているビット数です。
myisampack起動後、インデックスを再作成するにはmyisamchkを起動しなければいけません。このとき、MySQLオプティマイザの作動効率化を図りたい場合、インデックスブロックのソートと統計の作成を行うことができます。
shell> myisamchk -rq --sort-index --analyze tbl_name
.MYI
MySQLデータベースディレクトリにパックされたテーブルをインストールした後、mysqldに新しいテーブルの使用を強制するため、mysqladmin flush-tablesを実行してください。
パックされたテーブルをアンパックする場合、myisamchkに対して--unpack
オプションを使用してください。