Мое приложение очень интенсивно использует базу данных, поэтому я очень старался, чтобы приложение и база данных 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, написанного вручную.