結構式變量在兩個方面不同于常規系統變量:
· 其值是一個含組件的結構,可以指定服務器參數,一般緊密相關。
· 可能是給定類型的結構式變量的幾個實例。每個實例有一個不同的名,指向服務器維護的不同的資源。
MySQL 5.1支持結構式變量類型,可以指定監控鍵值緩存操作的參數。鍵值緩存結構式變量有以下組件:
· key_buffer_size
· key_cache_block_size
· key_cache_division_limit
· key_cache_age_threshold
該節描述了引用結構式變量的語法。在語法的例子中使用了鍵值緩存變量,但關于鍵值緩存如何操作的具體詳情在其它章節中,如 7.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_sizeboth均指向同一系統變量。
結構式變量實例和組件的命名規則為:
· 對于給定類型的結構式變量,每個實例必須有一個在該類變量中唯一的一個名。但是,在不同類型的結構式變量中實例名不需要唯一。例如,每個結構式變量有一個實例default,因此在不同的變量類型中default不是唯一的。
· 每個結構式變量類型的組件名在所有系統變量名中必須是唯一的。如果不是這樣(也就是說,如果兩個不同類型的結構式變量能夠共享組件成員名),將不清楚使用哪個默認結構式變量來用作沒有使用實例名限定的成員名。
· 如果結構式變量實例名作為未引起來的識別符不合法,將它用反勾號引起來作為識別符。例如,hot-cache不合法,但`hot-cache` 合法。
· global、session和local不是合法實例名。這樣可以避免與引用非結構式系統變量的符號的沖突,例如@@global.var_name。
目前,這前兩個規則不可能違背,因為唯一的結構式變量類型是鍵值緩存。在將來創建其它類型的結構式變量,這些規則將有重要的意義。
一個例外是,可以在可能出現簡單變量名的上下文中使用復合名引用結構式變量組件。例如,可以使用一個命令行選項未某個結構式變量分配一個值:
shell> mysqld --hot_cache.key_buffer_size=64K
在選項文件中,使用:
[mysqld]
hot_cache.key_buffer_size=64K
如果用該選項啟動服務器,除了默認大小為8MB的默認鍵值緩存,還創建一個名為hot_cache的鍵值緩存,大小為64KB。
假定你這樣啟動服務器:
shell> mysqld --key_buffer_size=256K
--extra_cache.key_buffer_size=128K
--extra_cache.key_cache_block_size=2048
在這種情況下,服務器將默認鍵值緩存的大小設定為256KB。(也可以寫成--default.key_buffer_size=256K)。 并且,服務器創建一個名為extra_cache的第2個鍵值緩存,大小為128KB,緩存表索引塊的塊緩存區的大小設置為2048字節。
在下面的例子中,用3個不同的鍵值緩存(大小比例為3:1:1)啟動服務器:
shell> mysqld --key_buffer_size=6M
--hot_cache.key_buffer_size=2M
--cold_cache.key_buffer_size=2M
也可以在運行時設置和檢索結構式變量值。例如,要想將名為hot_cache的一個鍵值緩存的大小設置為10MB,使用下面任何一個語句:
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';
這是一個在可能出現簡單的變量名時使用結構式變量名的例子。