Persistent Connections для MySQL
Или как избежать ошибки too many connections
Одна страница
Распечатать
. Редактировалось 1 раз, последний — #1
Intellect Board позволяет использовать Persistent Connections для MySQL. Для этого нужно в файле etc/ib_config.php прописать параметр DB_persist, равный единице.
Однако следует учитывать, что persistent connections далеко не всегда могут давать прирост производительности, в ряде случаев возможен обратный эффект: ее снижение или даже появление ошибок too many connections. Связано это с тем, что у каждого рабочего потока Apache свой пул постоянных соединений. Таким образом, если у нас есть 20 рабочих процессов Apache, и во время разового всплеска нагрузки (скажем, про проходе поискового робота) установит по 10 соединений с MySQL, то в итоге образуется целых 200 соединений, из которых после того как всплеск нагрузки завершится, реально будет использоваться всего несколько.
Чтобы этого избежать, рекомендую придерживаться следующих правил:
использовать persistent connections только если MySQL вынесен на отдельный сервер и ограничить максимальное количество постоянных соединений достаточно небольшим количеством с помощью опции mysqli.max_persistent в php.ini (в частности, на сервере, где стоит этот сайт, разрешено всего 2 постоянных соединения).
выставить максимальное количество подключений MySQL (max_connections в my.cnf) как минимум в два раза больше, чем максимально возможное количество постоянных соединений (т.е. max_persist * число_рабочих_процессов).
В ситуациях, когда и MySQL и форум размещены на одном сервере более эффективным с точки зрения производительности оказывается использование обычного соединения с подключением через Unix-сокеты, а не через TCP/IP.
Однако следует учитывать, что persistent connections далеко не всегда могут давать прирост производительности, в ряде случаев возможен обратный эффект: ее снижение или даже появление ошибок too many connections. Связано это с тем, что у каждого рабочего потока Apache свой пул постоянных соединений. Таким образом, если у нас есть 20 рабочих процессов Apache, и во время разового всплеска нагрузки (скажем, про проходе поискового робота) установит по 10 соединений с MySQL, то в итоге образуется целых 200 соединений, из которых после того как всплеск нагрузки завершится, реально будет использоваться всего несколько.
Чтобы этого избежать, рекомендую придерживаться следующих правил:
использовать persistent connections только если MySQL вынесен на отдельный сервер и ограничить максимальное количество постоянных соединений достаточно небольшим количеством с помощью опции mysqli.max_persistent в php.ini (в частности, на сервере, где стоит этот сайт, разрешено всего 2 постоянных соединения).
выставить максимальное количество подключений MySQL (max_connections в my.cnf) как минимум в два раза больше, чем максимально возможное количество постоянных соединений (т.е. max_persist * число_рабочих_процессов).
В ситуациях, когда и MySQL и форум размещены на одном сервере более эффективным с точки зрения производительности оказывается использование обычного соединения с подключением через Unix-сокеты, а не через TCP/IP.
Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.
Одна страница
Распечатать У вас нет прав для отправки сообщений в эту тему.