文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  結構化系統變數

7.1.9.5 結構化系統變數

結構化變數與一般系統變數在兩個方面有所不同

  • 其值是一個結構,其中包含指定被認為密切相關的伺服器參數的元件。

  • 給定類型的結構化變數可能有多個執行個體。每個執行個體都有不同的名稱,並參考伺服器維護的不同資源。

MySQL 支援一種結構化變數類型,它指定管理金鑰快取操作的參數。金鑰快取結構化變數具有以下元件

本節說明參考結構化變數的語法。金鑰快取變數用於語法範例,但有關金鑰快取如何運作的具體詳細資訊可在其他地方找到,請參閱第 10.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_sizekey_buffer_size 都參考相同的系統變數。

結構化變數執行個體和元件遵循以下命名規則

  • 對於給定類型的結構化變數,每個執行個體都必須具有 該類型變數中唯一的名稱。但是,執行個體名稱不需要在結構化變數類型之間是唯一的。例如,每個結構化變數都有一個名為 default 的執行個體,因此 default 在變數類型之間不是唯一的。

  • 每個結構化變數類型的元件名稱在所有系統變數名稱中必須是唯一的。如果情況並非如此(也就是說,如果兩種不同類型的結構化變數可以共用元件成員名稱),則對於未經執行個體名稱限定的成員名稱的參考,將不清楚要使用哪個預設結構化變數。

  • 如果結構化變數執行個體名稱作為未加引號的識別碼不合法,請使用反引號將其參考為加上引號的識別碼。例如,hot-cache 不合法,但 `hot-cache` 是合法的。

  • globalsessionlocal 不是合法的執行個體名稱。這樣做可以避免與 @@GLOBAL.var_name 等表示法衝突,該表示法用於參考非結構化系統變數。

目前,前兩個規則沒有被違反的可能性,因為唯一的結構化變數類型是金鑰快取類型。如果未來建立其他類型的結構化變數,這些規則可能會變得更加重要。

除了例外情況之外,您可以在可以使用簡單變數名稱的任何內容中使用複合名稱來參考結構化變數元件。例如,您可以使用命令列選項將值指派給結構化變數

$> mysqld --hot_cache.key_buffer_size=64K

在選項檔案中,使用以下語法

[mysqld]
hot_cache.key_buffer_size=64K

如果您使用此選項啟動伺服器,它除了預設大小為 8MB 的預設金鑰快取之外,還會建立一個名為 hot_cache 的金鑰快取,其大小為 64KB。

假設您如下啟動伺服器

$> 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 的第二個金鑰快取,其容量為 128KB,用於快取表格索引區塊的區塊緩衝區大小設定為 2048 位元組。

以下範例啟動伺服器時,使用三個不同金鑰快取,其容量比例為 3:1:1

$> 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';

這是在任何可以使用簡單變數名稱的地方,能夠使用結構化變數名稱的例外情況。