構造化システム変数は 2 つの点で通常のシステム変数と異なります。
この値は、密接に関連すると考えられるサーバーパラメータを指定するコンポーネントを持つ構造です。
あるタイプの構造化変数に複数のインスタンスがある場合もあります。 それぞれが異なる名前を持ち、サーバーによって保持される異なるリソースを参照します。
MySQL では、キーキャッシュの操作を制御するパラメータを指定する構造化変数タイプがサポートされます。 キーキャッシュ構造化変数には次のコンポーネントがあります。
key_buffer_size
key_cache_block_size
key_cache_division_limit
key_cache_age_threshold
このセクションでは、構造化変数を参照するための構文について説明します。 キーキャッシュ変数は構文の例で使用されますが、キーキャッシュの操作方法についての具体的な詳細は、セクション8.10.2「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 つの異なる構造化変数のタイプがコンポーネントメンバー名を共有する場合)、インスタンス名によって修飾されないメンバー名への参照に使用するデフォルトの構造化変数が明確でなくなります。
構造化変数インスタンス名が引用符で囲まれていない識別子として有効でない場合、逆引用符を使用した、引用符で囲まれた識別子としてこれを指定します。 たとえば、
hot-cache
は有効ではありませんが、`hot-cache`
は有効です。global
、session
、local
は有効なインスタンス名ではありません。 これにより、構造化されていないシステム変数を参照するための@@GLOBAL.
などの表記法との競合を回避できます。var_name
現時点では、構造化変数タイプはキーキャッシュのものだけであるため、最初の 2 つのルールが違反される可能性はありません。 これらのルールでは、将来、他のタイプの構造化変数が作成される場合に重要性が高くなる可能性があります。
1 つの例外はありますが、単純な変数名を指定できるあらゆるコンテキストで、複合名を使用すると構造化変数コンポーネントを参照できます。 たとえば、コマンド行オプションを使用すると、構造化変数に値を割り当てることができます。
shell> mysqld --hot_cache.key_buffer_size=64K
オプションファイルでは、次の構文を使用します。
[mysqld]
hot_cache.key_buffer_size=64K
このオプションでサーバーを起動する場合、デフォルトサイズが 8M バイトのデフォルトのキーキャッシュに加えて、サイズが 64K バイトの hot_cache
という名前のキーキャッシュが作成されます。
次のようにサーバーを開始したとします。
shell> mysqld --key_buffer_size=256K \
--extra_cache.key_buffer_size=128K \
--extra_cache.key_cache_block_size=2048
この場合、サーバーはデフォルトキーキャッシュのサイズを 256K バイトに設定します。 (--default.key_buffer_size=256K
と記述することもできます)。 さらに、このサーバーは、128K バイトのサイズを持つ extra_cache
という名前の 2 番目のキーキャッシュを作成し、テーブルインデックスブロックのキャッシュ用のブロックバッファーのサイズを 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
という名前のキーキャッシュを 10M バイトのサイズに設定するには、次のステートメントのどちらかを使用します。
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';
これは、単純な変数名を指定できるすべての場所で構造化変数を使用できる例外です。