La cache di query MySQL è abilitata ma non viene utilizzata

Ho verificato che la cache della query è abilitata

mysql> SHOW VARIABLES LIKE 'have_query_cache'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+ 1 row in set (0.00 sec) 

Ma sembra che non sia usata

 mysql> SHOW STATUS LIKE 'Qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 1 | | Qcache_free_memory | 16759648 | | Qcache_hits | 0 | | Qcache_inserts | 0 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 21555882 | | Qcache_queries_in_cache | 0 | | Qcache_total_blocks | 1 | +-------------------------+----------+ 8 rows in set (0.00 sec) 

Qualche ragione?

  • MySQL 5.1 vs MySQL 5.5 (5.1 due volte più veloce)
  • Aggiornamento MySQL 5.5 a 5.6
  • MySQL - Il server si chiude senza aggiornare il file PID
  • La variabile 'general_log_file' non può essere impostata sul valore di '/var/lib/msyql/ubuntu.log'
  • Recuperare un server master crittato MySQL dallo slave
  • Errore OpenShift / MySQL: errore lower_case_table_names quando si esegue la migrazione da OS X a OpenShift
  • Trova quale mysql è in esecuzione
  • Il tempo massimo di esecuzione di 300 secondi ha superato l'errore durante l'importzione di database di grandi size MySQL
  • 4 Solutions collect form web for “La cache di query MySQL è abilitata ma non viene utilizzata”

    La variabile di sistema query_cache_type deve essere impostata su non zero, perché la presenza della cache non significa che possa essere utilizzata.

    Tieni anche presente che non tutte le query sono cacheabili.

    Ad esempio, se una query contiene la function NOW (), non sarebbe memorizzata nella cache. La descrizione dettagliata delle query non può essere memorizzata nella cache: https://dev.mysql.com/doc/refman/5.7/en/query-cache-operation.html

    Dovresti anche verificare in quale posizione hai scritto le impostazioni nel file di configuration.

    Il mio problema era che ho posizionato le impostazioni qchace alla fine del file. Anche se le impostazioni sono state riflesse eseguendo mysql> SHOW STATUS LIKE 'Qcache%'; nessuna query è stata effettivamente memorizzata nella cache.

    Dopo aver posizionato le impostazioni in una posizione diversa nel file e riavviando il server mysql stava lavorando.

    Qui puoi vedere la mia configuration per MySQL 5.6:

     [mysqld] bind-address=* #skip-networking # # Remove leading # and set to the amount of RAM for the most importnt data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very importnt data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock query_cache_type = 1 query_cache_size =256M thread_concurrency=2 sort_buffer_size=25M key_buffer=128M # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

    C'è un errore MySQL 5.6 , fissato in 5.6.9: " if the db name (or table name) has a '-' (minus), it does not work ", solo in InnoDB.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.