Как постепенно внедрить и протестировать memcached на существующем сайте? - PullRequest
3 голосов
/ 22 апреля 2009

Я не имею в виду на самом деле его установку. В настоящее время я использую LAMP для разработки и хотел бы начать использовать memcached для сайта с высоким трафиком. Какие типы вызовов БД должны быть кэшированы? (все?) и что такое хороший способ сделать нагрузочное тестирование на сервере разработки? Есть ли ориентиры, на которые мне стоит обратить внимание на моей производственной площадке? Сайт в основном выбирается с очень небольшим количеством обновлений / вставок. Существуют ли какие-либо общие рекомендации, которые следует соблюдать в отношении использования оперативной памяти против трафика или это в основном просто методом проб и ошибок?

Спасибо.

Ответы [ 4 ]

1 голос
/ 01 мая 2009

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

Чтобы увидеть, насколько эффективно работает кэш запросов, попробуйте следующее:

> SHOW GLOBAL STATUS LIKE 'Qcache_hits';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| Qcache_hits   | 735740 |
+---------------+--------+
1 row in set (0.00 sec)


> SHOW GLOBAL STATUS LIKE 'Com_select';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Com_select    | 5644038 |
+---------------+---------+
1 row in set (0.00 sec)

Чтобы найти коэффициент попадания, вычислите Qcache_hits / (Qcache_hits + Com_select)

В данном случае это 735740 / (735740 + 5644038) = 0.1153

Это показатель успешности 11%, и он довольно плохой.

Если вы видите намного более высокий% на вашем компьютере, тогда может быть меньше случаев для использования memcached.

Кэш запросов MySQL работает во многих случаях (я подозреваю, что это относится и к вашему). Записи в кэше становятся недействительными при каждом обновлении таблицы (даже если ваш кэшированный запрос относится к строке, которая не была изменена), и это является одним из ее серьезных недостатков. Существуют случаи, когда вы можете использовать memcached для кэширования элементов ближе к уровню строки, когда вы и ваше приложение умнее истекаете срок действия кэша, чем MySQL кеш запросов.

Дайте мне знать результат скорости обращения к кешу запросов. Вы можете даже обнаружить, что кеш запросов отключен (!)

Вы можете проверить, включена ли она, выполнив следующий запрос:

> SHOW GLOBAL VARIABLES LIKE '%cache';

Проверьте наличие have_query_cache = YES и query_cache_size > 0 там.

1 голос
/ 22 апреля 2009

Всегда сначала измеряйте, а затем оптимизируйте. Запишите основные узкие места и проведите на них хорошие тесты производительности.

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

Но есть несколько инструментов, которые пытаются эмулировать высокий трафик.

1 голос
/ 22 апреля 2009

Во-первых, это зависит от того, сколько оперативной памяти вам нужно играть, как часто вам нужны данные и как часто данные обновляются.

Какие типы вызовов БД должны кэшироваться? (Все?)

Если вы обновляете данные примерно с той же скоростью, что и при их выборе, то, вероятно, кеширование не стоит.

Как сказал Эрик, выпадающие списки и любой другой статический контент, который вы используете для своего сайта, хорошо бы использовали memcache.

Не забудьте удалить / обновить кэшированный элемент после его обновления.

а каков хороший способ выполнить нагрузочное тестирование на сервере разработки?

Не уверен, какой тип нагрузочного тестирования вы имеете в виду.

Существуют ли ориентиры, на которые мне следует обратить внимание в первую очередь на моей производственной площадке? Сайт в основном выбирается с очень небольшим количеством обновлений / вставок.

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

Также убедитесь, что нет никаких других оптимизаций sql, которые вы могли бы сделать в первую очередь.

Существуют ли общие правила, которым следует следовать в отношении использования оперативной памяти против трафика, или это в основном просто проб и ошибок?

Я не думаю, что существует большая часть отношения оперативной памяти к трафику. Я бы выяснил, какой оперативной памяти ваш ящик должен функционировать в пиковое время трафика и установить лимиты оперативной памяти для memcache соответственно.

1 голос
/ 22 апреля 2009

Я бы начал с запроса, который сначала поддерживает вторичную функцию. понаблюдайте, как это реагирует на кеширование первым, немного повозитесь с ним. и затем, когда вы почувствуете, как ваш сайт реагирует на него, начните пытаться кешировать другие запросы. я никогда не использовал memcached, но я играю с кэшированием запросов в codeigniter.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...