24、MySQL 8.0 5.1.6.1結構化系統變量

結構化變量在兩個方面與常規系統變量不同:

它的值是一個包含組件的結構,這些組件指定被認爲密切相關的服務器參數。

可能有幾個給定類型的結構化變量的實例。每個人都有不同的名稱,並且指的是由服務器維護的不同資源。

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在變量類型中不是唯一的。

每個結構化變量類型的組件名稱在所有系統變量名稱中必須是唯一的。如果這不是真的(即,如果兩種不同類型的結構變量可以共享組件成員名稱),那麼將不清楚哪個默認結構變量用於引用不受實例名稱限定的成員名稱。

如果結構化變量實例名稱作爲不加引號的標識符不合法,請使用反引號將其引用爲帶引號的標識符。例如,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
如果使用此選項啓動服務器,hot_cache除默認大小爲8MB的默認密鑰緩存外,它還會創建一個大小爲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大小爲128KB 的第二個鍵緩存 ,緩存表索引塊的塊緩衝區大小設置爲2048字節。

以下示例使用三個不同大小的3: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';

這是能夠在任何可能發生簡單變量名的地方使用結構化變量名的例外。

本文由:學什麼技術好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章