Кэширование MySQL "включается" двумя параметрами: # Это общий объем кеша query_cache_size=32M # Это максимальный объем одного запроса, который можно помещать в кеш query_cache_limit=1M Посмотреть текущие настройки можно следующим запросом: > SHOW VARIABLES LIKE 'query_cache%'; И он выдаст что-то типа: +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 8192 | | query_cache_size | 33554432 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ Также есть возможность посмотреть, насколько кэш эффективен - попадают ли вообще туда запросы и в каком количестве. Делается это командой: > SHOW GLOBAL STATUS LIKE 'Qcache%'; которая покажет что-то вроде: +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 973 | | Qcache_free_memory | 14282000 | | Qcache_hits | 3293750 | | Qcache_inserts | 252819 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 66645 | | Qcache_queries_in_cache | 1342 | | Qcache_total_blocks | 3709 | +-------------------------+----------+ Самые главные параметры здесь, это * Qcache_hits - количество запросов, выбранных из кэша * Qcache_not_cached - количество запросов, которые не кэшируются * Qcache_inserts - количество запросов, помещенных в кэш Эти величины позволяют оценить полезность кэша MySQL на практике. Следует отметить, что при вставке или обновлении таблицы - кэш запросов к ней сбрасывается и становится неэффективен, если вставки идут постоянно. == Замечание 1 == С помощью MEMORY-таблиц, можно сделать кэширование более эффективным. К примеру, результат запроса можно поместить в таблицу "InMemory", добавить столбец - "свежесть" выборки. CREATE TABLE my_cache_table ENGINE=MEMORY SELECT now() AS created, id, ... FROM table ... После того, как выборка окажется "не свежей", эту таблицу легко уничтожить (DROP TABLE) и сделать другую такую же - но с новыми данными. == Замечание 2 == В MySQL-запросе можно "силовым" методом указать, что кэш использовать не нужно: SELECT SQL_NO_CACHE some_fields FROM some_table #
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor