Всем прекрасно известно, что АС генерирует МНОЖЕСТВО запросов к БД.
И многим так же известно, что встроенный в MySQL (начиная с версии 4.0) механизм кеширования зачастую вовсе не работает.
Не так давно один из пользователей АС с числом уникальных посетителей в сутки порядка 45-50 тысяч уников в день (ДА!ДА! Есть на АС пара-тройка таких высоконагруженных сайтов) попросил меня оптимизировать его сайт. Когда дошли руки до оптимизации SQL запросов я был неприятно поражен тем, что кеш SQL практически не работает.
Проанализировав код пришел к следующему: кеш сбрасывается, когда выполняется запрос UPDATE к таблице. А когда он у нас выполняется? Правильно, когда увеличивается счетчик прочтенной статьи или новости.
Просто отказаться от данного счетчика я посчитал неудобным, так как по нему строится рейтинг той или иной новости или статьи.
Поэтому пошел следующим путем: создал еще одну табличку со счетчиками, в которой и хранятся данные о прочтении.
Ну и само собой разумеется изменил запросы, проверяя время последнего изменения в таблицах.
И произошло чудо (IMG:
http://antislaed.net/style_emoticons/default/smile.gif) Кеш начал работать! Время выполнения запросов снизилось практически в 10 раз.
Надеюсь данный пост будет полезен заинтерессованным лицам, спасибо за внимание (IMG:
http://antislaed.net/style_emoticons/default/smile.gif)
Сообщение отредактировал vitalik1972: Jan 18 2012, 14:10