Всем привет!
Есть у меня база данных, была 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 запрос, не понимаю...