Мое приложение очень интенсивно работает с базой данных, поэтому я очень старался убедиться, что приложение и база данных MySQL работают максимально эффективно вместе.
В настоящее время я настраиваю кеш запросов MySQL, чтобы он соответствовал характеристикам запросов, запущенных на сервере.
query_cache_size
- это максимальный объем данных, которые могут храниться в кеше, а query_cache_limit
- максимальный размер одного набора результатов в кеше.
Мой текущий кэш запросов MySQL настроен следующим образом:
query_cache_size=128M
query_cache_limit=1M
tuning-primer.sh
дает мне следующие настройки подсказок о запущенной системе:
QUERY CACHE
Query cache is enabled
Current query_cache_size = 128 M
Current query_cache_used = 127 M
Current query_cache_limit = 1 M
Current Query cache Memory fill ratio = 99.95 %
Current query_cache_min_res_unit = 4 K
However, 21278 queries have been removed from the query cache due to lack of memory
Perhaps you should raise query_cache_size
MySQL won't cache query results that are larger than query_cache_limit in size
И mysqltuner.pl
дает следующие подсказки настройки:
[OK] Query cache efficiency: 31.3% (39K cached / 125K selects)
[!!] Query cache prunes per day: 2300654
Variables to adjust:
query_cache_size (> 128M)
Оба сценария настройки предполагают, что я должен поднять query_cache_size
. Однако увеличение query_cache size
более 128M может снизить производительность в соответствии с mysqltuner.pl
(см. http://mysqltuner.pl/).
Как бы вы справились с этой проблемой? Не могли бы вы увеличить query_cache_size, несмотря на предупреждение mysqltuner.pl
или попытаться каким-то образом настроить логику запросов? Большая часть доступа к данным обрабатывается Hibernate, но в приложении также используется довольно много ручного SQL-кода.