構造化変数 (structured variable) は通常のシステム変数とは次の 2 点において異なります。
値は、コンポーネントを伴うストラクチャであり、このコンポーネントとは、密接に関係している サーバ パラメータを指定するものである。
構造化変数が特殊な場合には複数のインスタンスを伴うことがある。それぞれは異なる名前を持ち、サーバで維持しているリソースが異なる。
MySQL 5.1 でサポートする構造化変数は 1 つです。これでキー変更操作のパラメータを指定します。キー キャッシュの構造化変数には次のコンポーネントがあります。
key_buffer_size
key_cache_block_size
key_cache_division_limit
key_cache_age_threshold
このセクションでは、構造化変数に関するシンタックスについて説明します。キー
キャッシュ変数はシンタックス例で使用しますが、キー
キャッシュがどのように操作を行うかに関しては
項6.4.6. 「MyISAM
キーキャッシュ」
を参照してください。
構造化変数のインスタンスのコンポーネントを示すには、instance_name.component_name
形式でコンパウンド名を使用します。次は、この例示です。
hot_cache.key_buffer_size hot_cache.key_cache_block_size cold_cache.key_cache_block_size
それぞれの構造化システム変数には、default
名のインスタンスを常に事前定義します。インスタンス名なしで構造化変数のコンポーネントを示すと、default
インスタンスを使用することになります。つまり、default.key_buffer_size
と key_buffer_size
の両方が同じシステム変数を指します。
構造化変数インスタンスとコンポーネントには次のネーミング ルールがあります。
任意型の構造化変数には、それぞれのインスタンスに、そのタイプの変数内で
一意の名前を持たせる。ただし、インスタンス名は構造化変数型
全体
で一意である必要はない。たとえば、それぞれの構造化変数に
default
と名付けたインスタンスがある場合、default
は変数型全体では一意ではない。
それぞれの構造化変数型のコンポーネントの名前は、システム変数名全体を通じて一意である必要がある。そうならない場合、つまり、型の異なる 2 つの構造化変数でコンポーネント メンバ名を共有している場合、インスタンス名で修飾していないメンバ名を参照するときに、どの構造化変数を使用するかを判断できなくなる。
単純識別子 (unquoted identifier)
としてはリーガルではない
構造化変数インスタンス名が、逆引用符を使用して単純識別子
(quoted identifier) になる
(リーガルになる)。たとえば、hot-cache
はリーガルでないが、`hot-cache`
はリーガルである。
global
、session
、local
はリーガルのインスタンス名ではない。これは、非構造化システム変数を示すときに
@@global.
などのノーテーションとの干渉を防ぐ。
var_name
現時点では、現在では、唯一の構造化変数の型がキー キャッシュのものであるため、最初の 2 ルールが違反対象になる可能性はありません。別の構造化変数の型を今後構築できれば、これらのルールはより大きな重要性を持つことになります。
例外として、単純変数名が発生するコンテキストに、コンパウンド名を使用する構造化変数コンポーネントを引き合わせることができます。たとえば、コマンドライン オプションで構造化変数に値を指定することができます。
shell> mysqld --hot_cache.key_buffer_size=64K
オプション ファイルで、次のシンタックスを使用します。
[mysqld] hot_cache.key_buffer_size=64K
サーバをこのオプションで起動する場合、デフォルトの
8 MB のキー キャッシュに加えた、64 KB
サイズの hot_cache
と名づけられたキー
キャッシュを生成することなります。
次のようにサーバを起動すると仮定した場合
shell>mysqld --key_buffer_size=256K \
--extra_cache.key_buffer_size=128K \
--extra_cache.key_cache_block_size=2048
この場合、サーバがデフォルト キー
キャッシュを 256 KB
に設定します。(--default.key_buffer_size=256K
と記述することも可能。)
さらに、このサーバは、extra_cache
と名づけた 128KB のセカンド キー
キャッシュとともに、2048
キロバイトのブロック バッファをテーブル
インデックス
ブロックのキャッシュ用に作成します。
次は、サイズが 3:1:1 の割合の 3 つのキー キャッシュでサーバを起動するときの例です。
shell>mysqld --key_buffer_size=6M \
--hot_cache.key_buffer_size=2M \
--cold_cache.key_buffer_size=2M
構造化変数値は、ランタイムでの設定、読み取りも可能です。たとえば、hot_cache
という名前のキー キャッシュを 10 MB
で設定するには、次のステートメントのどちらかを使用します。
mysql>SET GLOBAL hot_cache.key_buffer_size = 10*1024*1024;
mysql>SET @@global.hot_cache.key_buffer_size = 10*1024*1024;
キャッシュ サイズを読み取るには、次のことをします。
mysql> SELECT @@global.hot_cache.key_buffer_size;
ただし、次のようなステートメントは作用しません。この変数はコンパウンド名としての解釈にならず、LIKE
節のパターン一致操作の単純文字列としての解釈になります。
mysql> SHOW GLOBAL VARIABLES LIKE 'hot_cache.key_buffer_size';
これは、構造化変数名を単純変数名が発生する可能性があるところで使用できるようにしておくためです。