myisampack
は MyISAM
テーブルの圧縮に、pack_isam
は ISAM
テーブルの圧縮に使用します。ISAM
テーブルは廃止されているため、ここでは
myisampack
に限って話を進めますが、myisampack
について説明することはすべて、pack_isam
にも当てはまります。
myisampack
は、テーブル内の各カラムを個別に圧縮します。テーブルを開いたとき、カラムを展開するための情報がメモリに読み込まれます。これにより、個々のレコードにアクセスする際のパフォーマンスが向上します。この場合、Stacker
を MS-DOS
で使用するときのような大きなディスクブロックではなく、1
つのレコードだけを解凍するだけで済みます。
通常、myisampack
はデータファイルを 40% 〜 70% 圧縮します。
MySQL
は、圧縮テーブルでメモリマッピング(mmap()
)を使用し、mmap()
が機能しない場合は、通常のファイルの読み取り/書き込み使用法に戻ります。
以下に注意してください。
パック後、テーブルは読み取り専用になる。これは、CD にパックされたテーブルへのアクセスなど、読み取り専用でいいとの判断からそうしているものである。パックされたテーブルへの書き込み機能の実現も開発計画には入っているが、優先順位は高くない。
myisampack
は、BLOB
カラムまたは TEXT
カラムもパックできる。 古い
pack_isam
(ISAM
テーブル用)ではパックできない。
myisampack
は以下のコマンドで起動します。
shell> myisampack [options] filename ...
各ファイル名は、インデックス(.MYI
)ファイル名になっていることが必要です。データディレクトリがカレントディレクトリでなければ、ファイルのパスを指定してください。.MYI
拡張子は省略可能です。
myisampack
は、以下のオプションをサポートします。
-b, --backup
テーブルのバックアップを
tbl_name.OLD
として作成する。
-#, --debug=debug_options
デバッグログを出力する。debug_options
文字列には、'd:t:o,filename'
がよく使用される。
-f, --force
テーブルが大きくなってしまう場合、テンポラリファイルが存在する場合でもテーブルのパックを強制する。myisampack
は、テーブルの圧縮中、tbl_name.TMD
という名前のテンポラリファイルを生成する。myisampack
を強制終了した場合、.TMD
ファイルが削除されない場合がある。通常、tbl_name.TMD
があれば、myisampack
はエラーを出力して終了する。--force
を使用すると、テンポラリファイルの有無に関わらず
myisampack
はテーブルをパックする。
-?, --help
ヘルプメッセージを表示して終了する。
-j big_tbl_name, --join=big_tbl_name
コマンドラインで指定されたすべてのテーブルを結合して
1 つのテーブル big_tbl_name
にする。結合するテーブルはすべて、同一(同じカラム名、同じ型、同じインデックスなど)のテーブルであることが必要である。
-p #, --packlength=#
レコード長保存サイズをバイト単位で指定する。値は
1、2、または 3
であることが必要。myisampack
は、すべてのレコードを 1、2、または 3
バイトの長さポインタで保存する。ほとんどの場合、myisampack
はファイルをパックする前に、正しい長さを判断できるが、パック中にさらに短くてもよいことを認識する場合がある。この場合、myisampack
は、次回同じファイルをパックするときに、レコード長を短くできるというメモを出力する。
-s, --silent
サイレントモード。エラー発生時のみ出力する。
-t, --test
実際にはテーブルをパックせず、パックテストのみ実行する。
-T dir_name, --tmp_dir=dir_name
テンポラリテーブルを書き込むディレクトリを指定する。
-v, --verbose
冗長モード。パックの進捗および結果に関する情報を出力する。
-V, --version
バージョン情報を表示して終了する。
-w, --wait
テーブルが使用中の場合、待機して再試行する。mysqld
サーバが --skip-external-locking
オプションで起動しいる場合、パッキングプロセス中にテーブルが更新される可能性があれば、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% 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 Datafilepointer (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
によって出力される情報について説明します。
normal
パックが使用されなかったカラムの数。
empty-space
値が空白スペースのみのカラムの数。これらは 1 ビットになる。
empty-zero
値がバイナリの 0 のみのカラムの数。これらは 1 ビットになる。
empty-fill
整数カラムで、その型の全バイト範囲を占めていないカラムの数。これらは、より小さな型に変換される(たとえば、INTEGER
カラムを MEDIUMINT
に変更する)。
pre-space
数値カラムのうち、値の先頭に空白スペースがあるカラムの数。この場合、各値には先頭スペースのカウントが含まれる。
end-space
末尾に空白スペースがあるカラムの数。この場合、各値には末尾スペースのカウントが含まれる。
table-lookup
カラムに複数の値が少ししかなく、ハフマン圧縮の前に
ENUM
に変換された。
zero
すべての値がゼロであるカラムの数。
Original trees
ハフマンツリーの初期番号。
After join
領域を節約するためにツリーを結合した後に残った、独立したハフマンツリーの数。
テーブルが圧縮された後で myisamchk
-dvv
を実行すると、各フィールドについての以下の追加情報が出力されます。
Type
フィールド型には以下の記述子が入る。
constant
すべてのレコードが同じ値。
no endspace
エンドスペースを保存しない。
no endspace, not_always
エンドスペースを保存せず、すべての値でエンドスペース圧縮を実行しない。
no endspace, no empty
エンドスペースを保存しない。空白値を保存しない。
table-lookup
カラムが ENUM
に変換された。
zerofill(n)
値内の最も重要な n
バイトは常に 0 なので、保存しない。
no zeros
ゼロを保存しない。
always zero
0 値を 1 ビットで保存する。
Huff tree
フィールドに関連付けられているハフマンツリー。
Bits
ハフマンツリーで使用されているビット数。
pack_isam
または
myisampack
を実行後、isamchk
または
myisamchk
を実行してインデックスを再生成する必要があります。このとき、MySQL
オプティマイザの効率性を上げるために、インデックスブロックをソートし、統計を作成しておくこともできます。
myisamchk -rq --analyze --sort-index table_name.MYI isamchk -rq --analyze --sort-index table_name.ISM
パックされたテーブルを MySQL
データベースディレクトリにインストールした後、mysqladmin
flush-tables
を実行して、mysqld
が新しいテーブルを使用して起動するようにしてください。
パックされたテーブルをアンパックするには、--unpack
オプションで isamchk
または
myisamchk
を実行します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.