top
Loading...
5.13.3.查詢高速緩沖配置
5.13.3. 查詢高速緩沖配置

通過have_query_cache服務器系統變量指示查詢緩存是否可用:

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

即使禁用查詢緩存,當使用標準 MySQL二進制時,這個值總是YES

其它幾個系統變量控制查詢緩存操作。當啟動mysqld時,這些變量可以在選項文件或者命令行中設置。所有查詢緩存系統變量名以query_cache_ 開頭。它們的詳細描述見5.3.3節,“服務器系統變量”,還給出了額外的配置信息。

為了設置查詢緩存大小,設置query_cache_size系統變量。設置為0表示禁用查詢緩存。 默認緩存大小設置為0;也就是禁用查詢緩存。

當設置query_cache_size變量為非零值時,應記住查詢緩存至少大約需要40KB來分配其數據結構。(具體大小取決于系統結構)如果你把該值設置的太小,將會得到一個警告,如本例所示:

mysql> SET GLOBAL query_cache_size = 40000;

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> SHOW WARNINGSG

*************************** 1. row ***************************

  Level: Warning

   Code: 1282

Message: Query cache failed to set size 39936; new query cache size is 0

 

mysql> 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 |

+------------------+-------+

如果查詢緩存大小設置為大于0query_cache_type變量影響其工作方式。這個變量可以設置為下面的值:

·         0OFF將阻止緩存或查詢緩存結果。

·         1ON將允許緩存,以SELECT SQL_NO_CACHE開始的查詢語句除外。

·         2DEMAND,僅對以SELECT SQL_CACHE開始的那些查詢語句啟用緩存。

設置query_cache_type變量的GLOBAL值將決定更改后所有連接客戶端的緩存行為。具體客戶端可以通過設置query_cache_type變量的會話值控制它們本身連接的緩存行為。例如,一個客戶可以禁用自己的查詢緩存,方法如下:

mysql> SET SESSION query_cache_type = OFF;

要控制可以被緩存的具體查詢結果的最大值,應設置query_cache_limit變量。 默認值是1MB

當一個查詢結果(返回給客戶端的數據)從查詢緩沖中提取期間,它在查詢緩存中排序。因此,數據通常不在大的數據塊中處理。查詢緩存根據數據排序要求分配數據塊,因此,當一個數據塊用完后分配一個新的數據塊。因為內存分配操作是昂貴的(費時的),所以通過query_cache_min_res_unit系統變量給查詢緩存分配最小值。當查詢執行時,最新的結果數據塊根據實際數據大小來確定,因此可以釋放不使用的內存。根據你的服務器執行查詢的類型,你會發現調整query_cache_min_res_unit變量的值是有用的:

·         query_cache_min_res_unit默認值是4KB。這應該適合大部分情況。

·         如果你有大量返回小結果數據的查詢,默認數據塊大小可能會導致內存碎片,顯示為大量空閑內存塊。由于缺少內存,內存碎片會強制查詢緩存從緩存內存中修整(刪除)查詢。這時,你應該減少query_cache_min_res_unit變量的值。空閑塊和由于修整而移出的查詢的數量通過Qcache_free_blocksQcache_lowmem_prunes變量的值給出。

·          如果大量查詢返回大結果(檢查 Qcache_total_blocksQcache_queries_in_cache狀態變量),你可以通過增加query_cache_min_res_unit變量的值來提高性能。但是,注意不要使它變得太大(參見前面的條目)。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗