Я хотел бы попросить вашей помощи по давней проблеме с соединениями php/mysql.
Каждый раз, когда я выполняю команду "SHOW PROCESSLIST", она показывает мне около 400 незанятых (Status: Sleep) подключений к серверу базы данных, возникающих на наших 5 веб-серверах.
Это никогда не было большой проблемой (и я не нашел быстрого решения), пока в последнее время количество трафика не увеличилось, и с тех пор MySQL неоднократно сообщает о проблемах "ко многим соединениям", даже если 350+ этих соединений находятся в "спящем режиме" государство. Кроме того, сервер не может получить соединение MySQL, даже если к этому же серверу есть спящие соединения.
Все эти соединения исчезают при переустановке сервера Apache.
Код PHP, используемый для создания соединений с БД, использует обычный модуль "mysql", модуль "mysqli", PEAR :: DB и Zend Framework Db Adapter. (Разные проекты). Ни один из проектов не использует постоянные соединения.
Повышение лимита соединения возможно, но не кажется хорошим решением, поскольку сейчас оно составляет 450, и в любом случае в каждый момент времени существует только 20-100 "реальных" соединений.
Мой вопрос:
Почему в состоянии сна столько подключений и как я могу это предотвратить?
- Обновление:
Число запросов Apache, выполняемых за один раз, никогда не превышает 50 одновременных запросов, поэтому я думаю, что есть проблема с закрытием соединения, или apache держит порт открытым без присоединенного phpscript или чего-то еще (?)
my.cnf, если это полезно:
innodb_buffer_pool_size = 1024M
max_allowed_packet = 5M
net_buffer_length = 8K
read_buffer_size = 2M
read_rnd_buffer_size = 8M
query_cache_size = 512M
myisam_sort_buffer_size = 128M
max_connections = 450
thread_cache = 50
key_buffer_size = 1280M
join_buffer_size = 16M
table_cache = 2048
sort_buffer_size = 64M
tmp_table_size = 512M
max_heap_table_size = 512M
thread_concurrency = 8
log-slow-queries = /daten/mysql-log/slow-log
long_query_time = 1
log_queries_not_using_indexes
innodb_additional_mem_pool_size = 64M
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table