Должен ли я пожертвовать своим innodb_buufer_pool _size/RAM, чтобы освободить место для query_cache_size?

У меня есть 16 ГБ выделенной базы данных сервера Mysql. Мой размер innodb_buffer_pool_size установлен примерно на 11 ГБ, я реализую кеш запросов в своей системе, размер которого составляет 80 МБ. Откуда я должен сделать это пространство, innodb_buffer_pool_size или RAM?


person Jitin Maherchandani    schedule 19.02.2016    source источник
comment
Каков размер ваших данных? если все умещается в 11G (buffer_pool) зачем беспокоиться о кеше запросов? innodb_buffer_pool — верный выстрел, а query_cache — вероятность. Ознакомьтесь с этим очень подробным руководством по настройке кэша запросов. - кстати +1 для бенчмаркинга с query_cache, как упоминалось выше.   -  person mysql_user    schedule 19.02.2016


Ответы (2)


Еще в июне 2014 года я ответил https://dba.stackexchange.com/questions/66774/why-query-cache-type-is-disabled-by-default-start-from-mysql-5-6/66796#66796< /а>

В этом посте я рассказал, как InnoDB микроуправляет изменениями между буферным пулом InnoDB и кэшем запросов.

НЕ ИСПОЛЬЗОВАНИЕ КЭША ЗАПРОСОВ

Простейшим ответом было бы просто отключить кэш запросов, но есть одна загвоздка: вы должны установить обе query_cache_size и query_cache_type на ноль (0).

Если вы не установите query_cache_type до нуля(0), все еще происходит микроуправление изменениями. Это подтверждается тем, что параграф 8 документации MySQL Конфигурация кэша запросов говорит

Если query_cache_size равен 0, вы также должны установить переменную query_cache_type в 0. В этом случае сервер вообще не получает мьютекс кэша запросов, что означает, что кеш запросов нельзя включить во время выполнения, и при выполнении запросов сокращаются накладные расходы.

ИСПОЛЬЗОВАНИЕ КЭША ЗАПРОСОВ

Если вы действительно хотите использовать Query Cache, вам нужно изучить свои данные. По сути, вам нужно знать размер ваших результатов. Затем вы должны установить query_cache_limit и query_cache_min_res_unit для размещения среднего размера набор результатов, а также набор результатов максимального размера.

В качестве альтернативы вы можете включить кэш запросов глобально, но отключить его использование в сеансе БД, как указано в Параграф 9:

Установка значения GLOBAL query_cache_type определяет поведение кэша запросов для всех клиентов, которые подключаются после внесения изменения. Отдельные клиенты могут управлять поведением кэша для своего соединения, задав значение SESSION query_cache_type. Например, клиент может отключить использование кеша запросов для своих собственных запросов следующим образом:

mysql> SET SESSION query_cache_type = OFF;

ВАШ АКТУАЛЬНЫЙ ВОПРОС

Кэш запросов, буферный пул InnoDB, потоки соединений (см. мой пост https://dba.stackexchange.com/questions/16969/how-costly-is-opening-and-closing-of-a-db-connection/16973#16973 ), и все ОС конкурируют за оперативную память.

Глядя только на кэш запросов и буферный пул InnoDB, вам нужно увидеть, сколько свободного места в буферном пуле InnoDB после того, как MySQL работает в течение нескольких дней или недель.

Вы можете запустить этот запрос

SELECT variable_value / 64 free_mb
FROM information_schema.global_status
WHERE variable_name='Innodb_buffer_pool_pages_free';

Это скажет вам, насколько вы можете уменьшить буферный пул InnoDB. Затем вы можете увеличить кэш запросов на этот размер. Если этот запрос возвращает меньше 1024, возможно, это не стоит усилий. Вы либо получите дополнительное пространство из оперативной памяти, либо просто отключите кэш запросов.

person RolandoMySQLDBA    schedule 19.02.2016

НЕТ. Кэш запросов иссякает, возможно, после 80 МБ - он тратит больше времени на удаление записей.

Я бы предположил, что более 90% производственных систем полностью отключают контроль качества.

Имейте в виду, что каждая запись в таблицу очищает все записи в QC для этой таблицы.

11 ГБ на выделенном сервере объемом 16 ГБ — хорошее число для innodb_buffer_pool_size.

person Rick James    schedule 19.02.2016