DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info) query-cache-configuration

Info Catalog (mysql.info) query-cache-in-select (mysql.info) query-cache (mysql.info) query-cache-status-and-maintenance
 
 5.14.3 Query Cache Configuration
 --------------------------------
 
 The `have_query_cache' server system variable indicates whether the
 query cache is available:
 
      mysql> SHOW VARIABLES LIKE 'have_query_cache';
      +------------------+-------+
      | Variable_name    | Value |
      +------------------+-------+
      | have_query_cache | YES   |
      +------------------+-------+
 
 When using a standard MySQL binary, this value is always `YES', even if
 query caching is disabled.
 
 Several other system variables control query cache operation.  These
 can be set in an option file or on the command line when starting
 `mysqld'. The query cache system variables all have names that begin
 with `query_cache_'. They are described briefly in 
 server-system-variables, with additional configuration information
 given here.
 
 To set the size of the query cache, set the `query_cache_size' system
 variable. Setting it to 0 disables the query cache. The default size is
 0, so the query cache is disabled by default.
 
 When you set `query_cache_size' to a non-zero value, keep in mind that
 the query cache needs a minimum size of about 40KB to allocate its
 structures. (The exact size depends on system architecture.) If you set
 the value too small, you'll get a warning, as in this example:
 
      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: 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 |
      +------------------+-------+
 
 If the query cache size is greater than 0, the `query_cache_type'
 variable influences how it works. This variable can be set to the
 following values:
 
    * A value of `0' or `OFF' prevents caching or retrieval of cached
      results.
 
    * A value of `1' or `ON' allows caching except of those statements
      that begin with `SELECT SQL_NO_CACHE'.
 
    * A value of `2' or `DEMAND' causes caching of only those statements
      that begin with `SELECT SQL_CACHE'.
 
 Setting the `GLOBAL' `query_cache_type' value determines query cache
 behavior for all clients that connect after the change is made.
 Individual clients can control cache behavior for their own connection
 by setting the `SESSION' `query_cache_type' value. For example, a client
 can disable use of the query cache for its own queries like this:
 
      mysql> SET SESSION query_cache_type = OFF;
 
 To control the maximum size of individual query results that can be
 cached, set the `query_cache_limit' system variable. The default value
 is 1MB.
 
 When a query that is to be cached, its result (the data sent to the
 client) is stored in the query cache during result retrieval. Therefore
 the data usually is not handled in one big chunk. The query cache
 allocates blocks for storing this data on demand, so when one block is
 filled, a new block is allocated.  Because memory allocation operation
 is costly (timewise), the query cache allocates blocks with a minimum
 size given by the `query_cache_min_res_unit' system variable.  When a
 query is executed, the last result block is trimmed to the actual data
 size so that unused memory is freed. Depending on the types of queries
 your server executes, you might find it helpful to tune the value of
 `query_cache_min_res_unit':
 
    * The default value of `query_cache_min_res_unit' is 4KB. This
      should be adequate for most cases.
 
    * If you have a lot of queries with small results, the default block
      size may lead to memory fragmentation, as indicated by a large
      number of free blocks. Fragmentation can force the query cache to
      prune (delete) queries from the cache due to lack of memory. In
      this case, you should decrease the value of
      `query_cache_min_res_unit'. The number of free blocks and queries
      removed due to pruning are given by the values of the
      `Qcache_free_blocks' and `Qcache_lowmem_prunes' status variables.
 
    * If most of your queries have large results (check the
      `Qcache_total_blocks' and `Qcache_queries_in_cache' status
      variables), you can increase performance by increasing
      `query_cache_min_res_unit'. However, be careful to not make it too
      large (see the previous item).
 
Info Catalog (mysql.info) query-cache-in-select (mysql.info) query-cache (mysql.info) query-cache-status-and-maintenance
automatically generated byinfo2html