Форум программистов CodeGuru
16 Январь 2018, 23:05:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: кеширование MySQL  (Прочитано 14344 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mylogin
Новичок
*
Офлайн Офлайн

Сообщений: 3


Просмотр профиля
« : 05 Октябрь 2009, 08:48:47 »

На сайте материалы обновляются очень редко (и только администратором), хочу снизить до минимума нагрузку на MySQL путем кеширования всех запросов. И удалять кеш только по велению администратора (после изменения материалов, например).
Подскажите, пожалуйста, как это можно реализовать?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 14 Ноябрь 2009, 11:03:05 »

Ну вообще, имхо, оно там как бы обычно кешируется (начиная с версии 4.0).

Точнее, это зависит от нескольких факторов:
1. от конфигурации сервера.
2. от типа запроса
3. от используемых в запросе конструкций

И вообще, сервер может быть собран с опцией --without-query-cache и тогда кеширование не будет возможно в принципе (вырежется код, за это отвечающий).

По поводу конфигурации MySQL для кеширования запросов.

Есть переменная конфигурации query_cache_type. Ее значения 0, 1 или 2 - или OFF, ON, DEMAND соответственно (кеш отключен, включен, или "по требованию").
Кроме того, есть переменная query_cache_size. Если ее установить в 0, то кеширование тоже как бы будет отключено.

Итого.

Если кеш MySQL отключен, то все понятно - как бы не напрягался, кешироваться ничего не будет.

Если кеш настроен "по требованию" - тут интересно. Надо использовать директиву SQL_CACHE в самом запросе, чтобы кешировалось.

И, если кеш включен - тут (как ни странно) - еще интереснее.
Дело в том, что не все запросы кешируются. Не кешируются:

1. запросы, в которых содержатся вызовы функций, возвращающих не статический результат.
Это функции: BENCHMARK, CONNECTION_ID, CONVERT_TZ, CURDATE, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURTIME DATABASE, ENCRYPT, FOUND_ROWS, GET_LOCK, LAST_INSERT_ID, LOAD_FILE, MASTER_POS_WAIT, NOW, RAND, RELEASE_LOCK, SLEEP, SYSDATE, UNIX_TIMESTAMP, USER, UUID, UUID_SHORT.

2. Запросы, в которых прописана директива SQL_NO_CACHE.

3. Начиная с MySQL 5.0 - запросы, начинающиеся с пробелов, либо с комментариев (о как).


Так что по поводу кеширования запросов в MySQL можно что сказать.
Если запросы формируются динамически, то начинать их надо не с пробелов. Даты лучше разворачивать на клиенте в текст (т.е. не использовать NOW, и.т.д.). Ну и посмотреть уже настройки сервера своего - что там.

З.Ы. а вообще, лучше не парится с таким делом. Кеширование данных обычно делается на клиентской стороны. Если применительно к web-разработке, то есть куча фреймворков, в которых реализовано кеширование на различных уровнях. Можно посмотреть, как сделано там.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!