国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

8.10.3.3 Query Cache Configuration

2019-11-08 20:47:20
字體:
來源:轉載
供稿:網友

原文:https://dev.MySQL.com/doc/refman/5.5/en/query-cache-configuration.html

系統變量have_query_cache 標識緩存是否可用:

mysql> SHOW VARIABLES LIKE 'have_query_cache';+------------------+-------+| Variable_name | Value |+------------------+-------+| have_query_cache | YES |+------------------+-------+

當使用時標準版MySQL時,該值總是YES,不論查詢緩存是否已經關閉。

還有一些系統變量控制緩存的操作行為。這些變量可以通過配置文件或者mysqld啟動命令行修改。與緩存相關的系統變量命名都是以“query_cache_”開頭的。在 Section 5.1.5, “Server System Variables”對這些變量有詳細的說明。

設置query_cache_size變量可以控制緩存的容量(size),設置為0表示關閉緩存。該變量的默認值是0,所以緩存默認時關閉的。

為了減少開銷,如果不使用查詢緩存,在啟動服務時將query_cache_type=0 。

注意 當使用窗口配置引導安裝或配置MySQL時,query_cache_size的默認值是按照選擇的配置類型自動調整的。當使用窗口配置向導,由于選擇的配置不同,查詢緩存可能是開啟的(也就是說,設置了非0值)。查詢緩存仍然可以通過query_cache_type變量控制。當配置完成后可以在my.ini文件中查看query_cache_type的具體值。

當你設置了query_cache_size為非0值,查詢緩存至少需要分配約40KB空間用來保存緩存的結構(具體需要多少空間取決于系統架構)。如果設置的值太小,會產生警告信息,如下示例:

mysql> SET GLOBAL query_cache_size = 40000;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> SHOW WARNINGS/G*************************** 1. row *************************** Level: Warning Code: 1282Message: Query cache failed to set size 39936; new query cache size is 0mysql> SET GLOBAL query_cache_size = 41984;Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE 'query_cache_size';+------------------+-------+| Variable_name | Value |+------------------+-------+| query_cache_size | 41984 |+------------------+-------+

如果需要查詢緩存能夠緩存所有的查詢結果,必須設置更大的值:

mysql> SET GLOBAL query_cache_size = 1000000;Query OK, 0 rows affected (0.04 sec)mysql> SHOW VARIABLES LIKE 'query_cache_size';+------------------+--------+| Variable_name | Value |+------------------+--------+| query_cache_size | 999424 |+------------------+--------+1 row in set (0.00 sec)

query_cache_size的值基本上是1024 byte的倍數。這個值可能和你實際分配的不同。

如果query_cache_size的值大于0,query_cache_type將控制緩存時如何工作的。query_cache_type的取值如下:

0或OFF:不緩存數據或不從緩存中取數據。1或ON:使用緩存,但使用了SELECT SQL_NO_CACHE語法將不使用緩存。2或DEMAND:只有使用了SELECT SQL_CACH語法的sql使用緩存

如果query_cache_size是0,最好將query_cache_type也設置為0.系統將不在驗證是否使用緩存,也就是說查詢緩存不可用并且在運行時減少執行查詢語句的開銷。

修改了全局變量query_cache_type的值后,將影響所有客戶端連接使用緩存的方式。客戶端可以在session上設置query_cache_type值,以達到定制化的緩存使用方式。例如,客戶端可以對自己發出查詢語句關閉緩存:

mysql> SET SESSION query_cache_type = OFF;

如果你是在系統啟動時(不是運行時通過set語句)設置 query_cache_type的值,則只能設置數字。

為了控制每個查詢結果可以緩存的最大值,需要設置系統變量query_cache_limit,其默認值是1M。

千萬不要將緩存的容量設置的太大。由于線程在更新緩存時會對緩存加鎖,你會看到鎖在競爭非常多的緩存資源。

注意 你可以通過命令行SET語句加上 –maximum-query_cache_size=32M 選項或配置文件,在server運行時動態修改緩存的最大容量。

當以查詢被緩存以后,查詢結果(返回給客戶端的數據)被緩存并在后續的查詢中使用。 因為數據通常不會存在同一個內存塊內。查詢緩存會按需分配內存塊,當一塊內存填入數據后,再分配一個新的內存塊。因為內存分配操作(在時間上)代價是非常大的,系統變量 query_cache_min_res_unit 設置了查詢緩存分配的內存塊的最小值。當一個查詢語句執行后,前一個使用的緩存數據的代碼塊將會壓縮至實際使用的數據大小,未使用的空間將會釋放。由于查詢語句的類型(使用情況和返回數據量)不同,你可能需要調整 query_cache_min_res_unit參數來更有效的使用緩存:

query_cache_min_res_unit 默認值時4KB,該值能滿足絕大多數情況。如果你有大量的查詢返回的結果比較小,默認的塊大小可能會導致很多內存碎片。內存碎片會導致查詢緩存由于內存不足而被強制清除。在這種情況下,需要減少query_cache_min_res_unit的值。什么情況下釋放內存塊,釋放多少內存塊分別由Qcache_lowmem_PRunes和Qcache_free_blocks這兩個變量控制。如果很多查詢返回的數據量很大(根據Qcache_total_blocks and Qcache_queries_in_cache值判斷),你可以增加query_cache_min_res_unit值。無論如何,不要將這個值設置的太大(看前面的面說明)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 六盘水市| 淮北市| 当雄县| 镇安县| 密山市| 宜兴市| 晴隆县| 迁安市| 北宁市| 白城市| 成都市| 施秉县| 开化县| 闻喜县| 澜沧| 县级市| 新郑市| 仪征市| 广元市| 天台县| 汉寿县| 酉阳| 鲁山县| 剑川县| 西丰县| 涟水县| 清苑县| 泊头市| 高台县| 工布江达县| 黄山市| 威宁| 内黄县| 巴马| 乐至县| 湟中县| 大港区| 冀州市| 阿图什市| 阜南县| 河曲县|