About Reference:アバウトリファレンス

当サイトはPHPなどのサーバーサイドスクリプトや、
MySQLなどのデータベースプログラミングのマニュアルサイトです。
WEBアプリケーションの開発やこれからWEBプログラミングを覚えたい!
というような方々のお手伝いが出来れば幸いです。

日本語 MySQL マニュアル

4.8.4. myisampack(MySQL 圧縮読み取り専用テーブルジェネレータ)

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_isamISAM テーブル用)ではパックできない。

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 を実行します。


Converted by OpenCage. Base data is http://dev.mysql.com/doc/mysql/ja/.