В MySQL и MariaDB есть Query Cache или, если по-русски, кеш запросов. Очень значимая и полезная для сохранения ресурсов сервера вещь. Для понимания этой значимости, могу привести пример этого сервера, где выключение query cache привело к возрастанию нагрузки на процессор почти втрое.
Итак, как настраивать Query Cache:
Код:
cat /etc/mysql/my.cnf | grep query_c | sort
query_cache_limit = 256K
query_cache_min_res_unit = 512
query_cache_size = 32M
query_cache_type = ON
для того, чтобы включить кеширование, необходимо query_cache_type выставить в ON или DEMAND, после чего задать query_cache_size отличным от нуля. Обратите внимание, что размер кеша более 256Мб создает трудности процессору по управления таким большим массивом и поиску в нем. Необходимо соблюсти определенный баланс между тем, чтобы кеш был не слишком велик и тем, чтобы его хватало.
Для того, чтобы "лишние" запросы, которые повторяются редко, не попадали в кеш и не замусоривали его, их необходимо сопроводить подсказкой SQL_NO_CACHE. Например
SQL код:
select SQL_NO_CACHE column from table;
Для того, чтобы в режиме DEMAND принудительно запихивать запрос в кеш, необходимо использовать подсказку SQL_CACHE.
Чтобы ограничить размер попадающих в кеш результатов, задайте параметры query_cache_limit и query_cache_min_res_unit, первый обозначает максимальный размер выдаваемой под один результат запроса памяти, второй - минимальный размер под возвращаемый результат. Тут все, опять же, зависит от использования СУБД, у меня, например, гора маленьких результатов, а больших не бывает никогда. Поскольку выделение памяти всегда сказывается на общем времени операции, я предпочел маленький минимальный порог и маленький верхний.