Das Hilfsprogramm myisampack komprimiert
MyISAM
-Tabellen. Es komprimiert dabei jede
Spalte in der Tabelle separat. Normalerweise erzielt
myisampack für die Datendatei
Komprimierungsraten von 40 bis 70 Prozent.
Wird die Tabelle später verwendet, dann liest der Server die zur Dekomprimierung der Spalten erforderlichen Angaben in den Speicher ein. Hierdurch wird die Leistungsfähigkeit beim Zugriff auf einzelne Datensätze erheblich verbessert, da Sie nur genau einen Datensatz dekomprimieren müssen.
Sofern möglich, verwendet MySQL mmap()
für die Speicherzuordnung bei komprimierten Tabellen.
Funktioniert mmap()
nicht, dann nutzt MySQL
ersatzweise normale Schreib- und Leseoperationen für Dateien.
Beachten Sie bitte Folgendes:
Wenn der mysqld-Server mit deaktivierter externer Sperrung aufgerufen wurde, sollte myisampack nicht aufgerufen werden, sofern die Möglichkeit besteht, dass die Tabelle während des Komprimierungsvorgangs durch den Server aktualisiert werden könnte. Am besten wird der Server vor der Komprimierung der Tabellen beendet.
Wenn eine Tabelle gepackt wurde, ist sie schreibgeschützt. Dies ist normalerweise auch beabsichtigt (z. B. beim Zugriff auf komprimierte Tabellen auf einer CD). Die Möglichkeit, in eine gepackte Tabelle zu schreiben, ist von uns zur mittel- bis langfristigen Implementierung vorgesehen.
myisampack kann
BLOB
- oder
TEXT
-Spalten packen. (Das ältere
Programm pack_isam für
ISAM
-Tabellen bot diese Möglichkeit
nicht.)
Rufen Sie myisampack wie folgt auf:
shell> myisampack [options
] file_name
...
Jedes Dateinamensargument sollte der Name einer Indexdatei
(.MYI
-Datei) sein. Wenn Sie sich nicht im
Datenbankverzeichnis befinden, sollten Sie auch den Pfadnamen
zu der Datei angeben. Die Erweiterung
.MYI
dürfen Sie nach Belieben weglassen.
Nachdem Sie eine Tabelle mit myisampack komprimiert haben, sollten Sie myisamchk -rq zur Neuerstellung der Indizes verwenden. Siehe Abschnitt 8.2, „myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM“.
myisampack unterstützt die folgenden Optionen:
--help
, -?
Zeigt eine Hilfemeldung an und wird dann beendet.
--backup
, -b
Erstellt ein Backup der Datendateien aller Tabellen. Die
Sicherungsdateien erhalten den Namen
.
tbl_name
.OLD
--debug[=
,
debug_options
]-#
[
debug_options
]
Schreibt ein Debuglog. Der String
debug_options
heißt häufig
'd:t:o,
.
file_name
'
--force
, -f
Erzeugt auch dann eine gepackte Tabelle, wenn diese
größer als die Ursprungstabelle wird oder noch eine
Zwischendatei von myisampack vorhanden
ist. (myisampack erzeugt im Verlauf der
Komprimierung eine Zwischendatei namens
im Datenbankverzeichnis. Wenn Sie
myisampack terminieren, dann wird die
tbl_name
.TMD.TMD
-Datei unter Umständen nicht
gelöscht.) Normalerweise wird
myisampack mit einem Fehler beendet,
wenn es eine vorhandene Datei
findet. Mit tbl_name
.TMD--force
packt
myisampack die Tabelle jedoch in jedem
Fall.
--join=
,
big_tbl_name
-j
big_tbl_name
Fasst alle auf der Befehlszeile aufgeführten Tabellen zu
einer großen Tabelle
big_tbl_name
zusammen. Alle
Tabellen, die zusammengefasst werden sollen,
müssen eine identische Struktur
aufweisen (d. h. gleiche Spaltennamen und -typen, gleiche
Indizes usw.).
--packlength=
,
len
-p
len
Gibt die Speichergröße für die Datensatzlänge (in Byte) an. Der Wert darf zwischen 1 und 3 liegen. myisampack speichert alle Datensätze mit 1, 2 oder 3 Byte langen Längenzeigern. In den meisten normalen Fällen kann myisampack den korrekten Längenwert bestimmen, bevor es mit dem Packen der Datei beginnt. Es kann allerdings während des Packvorgangs feststellen, dass es eine geringere Länge hätte verwenden können. In diesem Fall gibt myisampack einen Hinweis aus, dass Sie, wenn Sie dieselbe Datei beim nächsten Mal packen, eine geringere Datensatzlänge verwenden können.
--silent
, -s
Stummer Modus. Eine Ausgabe erfolgt nur, wenn ein Fehler auftritt.
--test
, -t
Die Tabelle wird nicht gepackt, sondern das Packen wird lediglich geprüft.
--tmpdir=
,
path
-T
path
Verwendet das angegebene Verzeichnis als Position, an der myisamchk Temporärdateien erstellt.
--verbose
, -v
Ausführlicher Modus. Gibt Informationen zum Fortschritt des Komprimierungsvorgangs und -ergebnisses aus.
--version
, -V
Zeigt die Versionsinformation an und wird dann beendet.
--wait
, -w
Sorgt dafür, dass der Packvorgang nach einer Wartezeit neu versucht wird, wenn die Tabelle gerade verwendet wird. Wenn der mysqld-Server mit deaktivierter externer Sperrung aufgerufen wurde, sollte myisampack nicht aufgerufen werden, sofern die Möglichkeit besteht, dass die Tabelle während des Komprimierungsvorgangs durch den Server aktualisiert werden könnte.
Die nachfolgend gezeigte Befehlsfolge veranschaulicht eine typische Tabellenkomprimierungssitzung:
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 zeigt die folgenden Informationen an:
normal
Anzahl der Spalten, für die keine zusätzliche Komprimierung verwendet wird.
empty-space
Anzahl der Spalten, die ausschließlich aus Leerzeichen bestehende Werte enthalten. Diese benötigen genau ein Bit.
empty-zero
Anzahl der Spalten, die ausschließlich aus binären Nullen bestehende Werte enthalten. Diese benötigen genau 1 Bit.
empty-fill
Anzahl der Integer-Spalten, die nicht den gesamten
Bytebereich des entsprechenden Typs besetzen. Diese werden
auf einen kleineren Typ umgestellt. So kann beispielsweise
eine BIGINT
-Spalte (8 Byte) als
TINYINT
-Spalte (1 Byte) gespeichert
werden, wenn alle in ihr enthaltenen Werte zwischen
-128
und 127
liegen.
pre-space
Anzahl der Dezimalspalten, die mit Leerzeichen am Anfang gespeichert werden. In diesem Fall enthält jeder Wert die Anzahl dieser Leerzeichen.
end-space
Anzahl der Spalten, die viele Leerzeichen am Ende aufweisen. In diesem Fall enthält jeder Wert die Anzahl dieser Leerzeichen.
table-lookup
Die Spalte enthielt nur eine kleine Anzahl verschiedener
Werte und wurde deswegen vor der Komprimierung in eine
ENUM
-Spalte konvertiert.
zero
Anzahl der Spalten, in der alle Werte null sind.
Original trees
Anfängliche Anzahl der Huffman-Bäume.
After join
Anzahl der separaten Huffman-Bäume, die nach dem Verknüpfen von Bäumen zum Zwecke der Speicherersparnis übrig bleiben.
Nachdem eine Tabelle komprimiert wurde, zeigt myisamchk -dvv zusätzliche Informationen zu allen Tabellenspalten an:
Type
Der Datentyp. Der Wert kann die folgenden Deskriptoren enthalten:
constant
Alle Datensätze haben denselben Wert.
no endspace
Leerzeichen am Ende nicht speichern.
no endspace, not_always
Leerzeichen am Ende nicht speichern, für alle Werte keine Komprimierung für Leerzeichen am Ende durchführen.
no endspace, no empty
Leerzeichen am Ende nicht speichern. Leere Werte nicht speichern.
table-lookup
Die Spalte wurde in eine
ENUM
-Spalte konvertiert.
zerofill(
N
)
Die N
höchstwertigen Bytes
im Wert sind immer 0 und werden nicht gespeichert.
no zeros
Nullen nicht speichern.
always zero
Nullwerte werden nur mit einem Bit gespeichert.
Huff tree
Anzahl der mit der Spalte verknüpften Huffman-Bäume.
Bits
Anzahl der im Huffman-Baum verwendeten Bits.
Nachdem Sie myisampack ausgeführt haben, müssen Sie myisamchk starten, um die Indizes neu zu erstellen. Zur gleichen Zeit können Sie auch die Indexblöcke sortieren und Statistiken erstellen, die der MySQL-Optimierer benötigt, um effizienter arbeiten zu können:
shell> myisamchk -rq --sort-index --analyze tbl_name
.MYI
Nachdem Sie die gepackte Tabelle im MySQL-Datenbankverzeichnis installiert haben, sollten Sie mysqladmin flush-tables ausführen, um die Verwendung der neuen Tabelle durch mysqld zu erzwingen.
Um eine gepackte Tabelle zu entpacken, verwenden Sie die
Option --unpack
für
myisamchk.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.