Eine Strukturvariable unterscheidet sich in zweierlei Hinsicht von einer regulären Systemvariablen:
Ihr Wert ist eine Struktur mit Komponenten, die Serverparameter angeben, welche als zusammengehörig zu betrachten sind.
Es kann mehrere Instanzen eines gegebenen Strukturvariablentyps geben. Jede Instanz hat einen anderen Namen und verweist auf eine andere Ressource, die vom Server verwaltet wird.
MySQL 5.1 unterstützt genau einen Typ von Strukturvariablen. Dieser gibt Parameter an, die den Betrieb von Schlüssel-Caches regeln. Eine Strukturvariable für Schlüssel-Caches hat die folgenden Komponenten:
key_buffer_size
key_cache_block_size
key_cache_division_limit
key_cache_age_threshold
In diesem Abschnitt beschreiben wir die Syntax, mit der
Strukturvariablen referenziert werden.
Schlüssel-Cache-Variablen werden zwar für Syntaxbeispiele
verwendet; die einzelnen Details dazu, wie Schlüssel-Caches
funktionieren, finden Sie jedoch an anderer Stelle in
Abschnitt 7.4.6, „Der MyISAM
-Schlüssel-Cache“.
Um eine Komponente einer Strukturvariableninstanz zu
referenzieren, können Sie einen zusammengesetzten Namen des
Formats
instance_name.component_name
verwenden. Ein paar Beispiele:
hot_cache.key_buffer_size hot_cache.key_cache_block_size cold_cache.key_cache_block_size
Für jede strukturierte Systemvariable ist immer eine
Instanz mit dem Namen default
vordefiniert. Wenn Sie eine Komponente einer
Strukturvariable ohne einen Instanznamen referenzieren, wird
die Instanz default
verwendet. Auf diese
Weise referenzieren
default.key_buffer_size
und
key_buffer_size
dieselbe Systemvariable.
Strukturvariableninstanzen und Komponenten gehorchen den folgenden Benennungsregeln:
Für einen gegebenen Strukturvariablentyp muss jede
Instanz einen Namen haben, der
innerhalb der Variablen dieses Typs
eindeutig ist. Typenübergreifend
hingegen müssen die Instanznamen nicht eindeutig sein.
So gibt es für jede Strukturvariable eine Instanz
namens default
– der Name
default
ist also keineswegs
typübergreifend eindeutig.
Die Namen der Komponenten jedes Strukturvariablentyps muss über alle Systemvariablennamen hinweg eindeutig sein. Wäre dies nicht der Fall (d. h. könnten zwei verschiedene Strukturvariablentypen die gleichen Mitgliedsnamen für Komponenten aufweisen), dann wäre nicht eindeutig, welche Standardstrukturvariable zur Referenzierung von Mitgliedsnamen verwendet werden sollte, die nicht durch einen Instanznamen qualifiziert wären.
Wenn der Namen einer Strukturvariableninstanz als
Bezeichner ohne Anführungszeichen nicht zulässig ist,
setzen Sie sie ihn in Backticks. So ist etwa
hot-cache
unzulässig – anders als
`hot-cache`
.
global
, session
und local
sind unzulässige
Instanznamen. Hierdurch wird ein Konflikt umgangen, der
bei der Referenzierung nichtstrukturierter
Systemvariablen auftreten kann, bei denen die Schreibung
@@global.
zulässig ist.
var_name
Zurzeit besteht die Möglichkeit des Verstoßes gegen die ersten beiden Regeln nicht, weil der einzige Strukturvariablentyp der für die Schlüssel-Caches ist. Die Bedeutung dieser Regeln wird jedoch zunehmen, wenn zukünftig andere Typen strukturierter Variablen eingeführt werden.
Mit einer Ausnahme können Sie Komponenten von Strukturvariablen über zusammengesetzte Namen in jedem Kontext referenzieren, in dem einfache Variablennamen auftauchen können. So können Sie einer Strukturvariablen beispielsweise über eine Befehlszeilenoption einen Wert zuweisen:
shell> mysqld --hot_cache.key_buffer_size=64K
In einer Optionsdatei verwenden Sie folgende Syntax:
[mysqld] hot_cache.key_buffer_size=64K
Wenn Sie den Server mit dieser Option starten, erstellt er
einen Schlüssel-Cache namens hot_cache
mit einer Größe von 64 Kbyte zusätzlich zum
vorgabeseitigen Schlüssel-Cache mit der Standardgröße von
8 Mbyte.
Nehmen wir an, Sie starten den Server wie folgt:
shell>mysqld --key_buffer_size=256K \
--extra_cache.key_buffer_size=128K \
--extra_cache.key_cache_block_size=2048
In diesem Fall setzt der Server die Größe des
vorgabeseitigen Caches auf 256 Kbyte. (Sie hätten auch
--default.key_buffer_size=256K
schreiben
können.) Ferner erstellt der Server einen zweiten
Schlüssel-Cache namens extra_cache
mit
einer Größe von 128 Kbyte. Bei diesem ist die Größe der
Blockpuffer für die Zwischenspeicherung von
Tabellenindexblöcken auf 2.048 Bytes gesetzt.
Das folgende Beispiel startet den Server mit drei verschiedenen Schlüssel-Caches, deren Größen das Verhältnis 3:1:1 aufweisen:
shell>mysqld --key_buffer_size=6M \
--hot_cache.key_buffer_size=2M \
--cold_cache.key_buffer_size=2M
Strukturvariablen können auch zur Laufzeit eingestellt und
abgefragt werden. Um beispielsweise einen Schlüssel-Cache
namens hot_cache
auf eine Größe von 10
Mbyte zu setzen, verwenden Sie eine der folgenden
Anweisungen:
mysql>SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql>SET @@global.hot_cache.key_buffer_size = 10*1024*1024;
Um die Cache-Größe abzufragen, tun Sie Folgendes:
mysql> SELECT @@global.hot_cache.key_buffer_size;
Die folgende Anweisung wird hingegen nicht funktionieren.
Die Variable wird nicht als zusammengesetzter Name, sondern
als einfacher String für einen
LIKE
-Mustervergleich aufgefasst:
mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';
Dies ist die oben erwähnte Ausnahme bei der Verwendung von Strukturvariablennamen in allen Kontexten, in denen einfache Variablennamen auftreten können.
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.