Автоудаление кеша запросов MySQL? - PullRequest
1 голос
/ 29 октября 2011

Я владелец веб-игры с базой данных с большим трафиком и большим количеством запросов. Сейчас я оптимизирую mySQL, и такие инструменты, как mysqltuner, постоянно говорят, что у меня недостаточно кэш-памяти для запросов.

+-------------------------+-----------+  
| Variable_name           | Value     |  
+-------------------------+-----------+  
| Qcache_free_blocks      | 218       |  
| Qcache_free_memory      | 109155712 |  
| Qcache_hits             | 60955602  |  
| Qcache_inserts          | 38923475  |  
| Qcache_lowmem_prunes    | 100051    |  
| Qcache_not_cached       | 10858099  |  
| Qcache_queries_in_cache | 19384     |  
| Qcache_total_blocks     | 39134     |  
+-------------------------+-----------+  

Это примерно 1,5 дня работы сервера. В идеале lowmem_prunes было бы 0, конечно, но есть очень много запросов, которые основаны на пользователях. Мол,

SELECT username FROM users WHERE id='1';  
SELECT username FROM users WHERE id='12';
SELECT username FROM users WHERE id='12453';
SELECT username FROM users WHERE id='122348';

Поскольку у меня в день регистрируется около 3000 разных пользователей, у вас будет много подобных запросов в памяти.

Я знаю о правиле ON DEMAND, но я избегаю его, потому что у нас много запросов, которые я не хочу проверять все время.

Увеличение объема памяти также не будет исправлением, поскольку у нас так много запросов.

Затем мне пришла в голову идея сделать cronjob для автоматического СБРОСА кеша запросов, когда lowmem_prunes равен нулю. (что, вероятно, будет один раз в час)

Какой вариант лучше?
1. Автоматически сбрасывать кеш запросов один раз в час
2. Купите больше оперативной памяти и увеличьте кэш, например, на 1 ГБ (у этого есть свои недостатки ... Я бы не стал этого делать)
3. Укажите для каждого запроса, который должен храниться в кеше, в котором нет.
4. Просто держи это так.

...