Техника экстремального клоузконнекшинга

4 views
Skip to first unread message

A4

unread,
Sep 18, 2007, 6:38:13 AM9/18/07
to ua_mysql
Наверное сама распостраненная профессиональная болезнь PHP-
программистов - это незакрытое подключение к MySQL. Правда болезнь эта
быстро самовылечивается у тех, кто, как говорится, "наступал на эти
грабли".

В принципе MySQL и сам провоцирует это, позволяя плодить соединения
сотнями, а также по умолчанию небольшим временем таймаута.

Так вот представьте себе картину: пятница, 18:30, сотрудники делятся
планами на выходные и ведут вялую внутреннюю переписку на тему "Так на
сколько же людей заказывать столик в близжайшем пабе?".
Пятничную идилию нарушет SMS-сообщение "MySQL: Too many connections on
XXX server", подкрепленное несколькими десятками писем от
мониторинговых систем. И понеслось...

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

Сразу после выполнения подключения к БД:

$db_link = mysql_connect('server.com', 'login', 'password')

Дописываю строку:

register_shutdown_function('mysql_close',$db_link);

Вуаля! По завершении работы скрипта (даже аварийного) произойдет
закрытие подключения к базе данных MySQL.

Осталось только добавить что, даже если незакрытые соединения не
создают проблем, ОЧЕНЬ рекомендую все-таки их закрывать. А для тех кто
использует InnoDB-таблицы, это делать обязательно во избежании полной
потери данных. Но это уже другая история, о какой я напишу как-нибудь
позже.

http://voituk.kiev.ua/2007/04/21/mysql-too-many-connections/

Reply all
Reply to author
Forward
0 new messages