Включаю query_cache на InnoDB — разница в Таймингах Waiting (TTFB) заметна, убираю query_cache и жму F5 — отклик не уменьшается... Почему?

Всем привет!

Есть у меня база данных, была MyISAM, стала InnoDB (560Мб где-то).
Недавно обновился с 5.5 до 5.7. На сайте в основном операции Select используются, в связи с чем я долгое время использовал:

query_cache_size = 128M
query_cache_type = ON
query_cache_limit = 1M


И радовался отсутствию тормозов даже на очень большой (1.5млн в день)
посещаемости. Там, понятно, еще настроенный Nginx и Xcache были
кстати.

Когда сменил движок на InnoDB, во многих источниках, и у вас
тоже, прочитал, что query_cache — отживший своё герой, да и не герой он
вовсе, т.к. тормозит систему при больших значениях, да и вообще в
InnoDB для кеша есть innodb_buffer_pool_size, делай его больше общего
размера твоей БД и норм. Я так и сделал (my.cnf):

query_cache_size = 0
query_cache_type = 0
query_cache_limit = 1M

innodb_file_per_table = 1
table_open_cache = 4096
innodb_open_files = 4096
innodb_buffer_pool_size = 4G # На сервере 32G оперативной памяти
innodb_buffer_pool_instances = 8
innodb_log_file_size = 512M
innodb_log_buffer_size = 2M
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2
innodb_read_io_threads = 8
innodb_write_io_threads = 8


Но заметил, что возросли тайминги у Waiting (TTFB) и они не меняются
при простом обновлении страницы.

Например, у меня в админке есть достаточно тяжелые запросы (все
Select) - там выводится список из 500 разделов, для них еще
подразделы, кол-во продаж, статистических данных и т.д.

С включенным query_cache:

1-я загрузка страницы: 2.2 сек
2-я загрузка: 0.3 сек (что мне понятно, т.к. основную блокировку давали I/O
чтение с диска некэшированных данных, а теперь всё из оперативной памяти идёт)

С выключенным query_cache:

1-я загрузка страницы: 3.4 сек
2-я загрузка: 3.2 сек (а вот тут и заключается мой вопрос - WHY???)

Про устройство innodb_buffer_pool_size читал уже все что можно, но
почему он не кэширует Select запрос, не понимаю...
  • Вопрос задан
  • 481 просмотр
Пригласить эксперта
Ответы на вопрос 2
@neol
query cache кеширует результат выполнения запроса.
buffer pool кеширует данные и индексы, чтобы сократить обращения к HDD/SSD.

Эти совершенно разные кеши и они не взаимозаменяемы.

Если вам нужно кешировать результат - кешируйте в приложении.
Ответ написан
Комментировать
@Bladefx Автор вопроса
Спасибо за ответ! Я правильно понимаю, что если отказываться от query cache, то смотреть в сторону Мemcached для MySQL InnoDB?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы