У меня есть выделенный сервер, на котором я запускаю MySQL + Apache. Я запускаю скрипт чата, который опрашивает каждые 3 секунды. Теперь вчера вечером мой сервер MySQL умер из-за нагрузки. Интересно, как максимизировать потоки MySQL, а также потоки Apache.
Может ли кто-нибудь указать мне URL-адреса, которые помогут мне добиться того же?
Спасибо за ваше время.
решение1
Каноническим местом для информации о производительности MySQL являетсяБлог о производительности MySQL. Также естьВысокопроизводительный MySQLКнига Джереми Заводни.
Вам может понравиться некая форма пула соединений в вашем приложении, где оно будет повторно использовать существующие соединения с базой данных, а не создавать новое соединение для каждого нового сеанса. Это сократит накладные расходы на открытие нового соединения TCP и любую обработку, которую выполняет MySQL. Это также должно сократить количество простаивающих соединений, которые выполняет MySQL, поскольку каждое соединение требует определенного объема памяти просто для своего существования.
Еще одно, что вы можете сделать, чтобы значительно снизить нагрузку на вашу базу данных, — это интегрировать memcached. Memcached — это распределенное хранилище ключей и значений в памяти; как сетевая хэш-карта. Вы можете изменить свое приложение, чтобы оно опрашивало memcached и, если данных нет, проверяло базу данных. Когда вы изменяете данные, вы записываете их в базу данных и делаете данные в memcached недействительными. Это означает, что вы будете опрашивать значительно более быстрый memcached, а не MySQL.
Как только вы реализовали эти функции, и только после этого, вы можете начать изучать настройку параметров MySQL. Существует огромный потенциал для того, чтобы все испортить и в итоге получить базу данных, которая будет работать медленнее, чем раньше, если вы не знаете, что делаете. Я бы, по крайней мере, прочитал книгу MySQL Performance, прежде чем вы попробуете это.
Если вы можете потратить больше денег, первым улучшением будет разнесение базы данных на отдельный сервер. Если этого недостаточно, вы можете начать рассматривать использование настройки репликации master и slave, где записи идут на master сервер, но чтения распределяются между master и slave. Это особенно хорошо работает для рабочих нагрузок с большим объемом чтения, что довольно распространено.