IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   PHP работа с базой в долгом скрипте (http://www.imho.ws/showthread.php?t=144870)

EvroStandart 01.12.2010 15:58

PHP работа с базой в долгом скрипте
 
Решил я прикрутить к закачке файлов регулятор скорости и статистику.

Статистика пишется в базу (количество отданых данных, время обновления). Пишется после выдачи определённого количества трафика. Чтобы слишком много запросов к базе небыло.

Регулятор скорости соответственно добавляет команду sleep.

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

Если запись получается примерно каждые 90 секунд или быстрее - всё рабоатет.

Проблема наблюдается только на сервере. На локалке с денвером всё работает.

Как это забороть можно?

RaZEr 01.12.2010 16:04

php.net/mysql_ping

Hubbitus 03.12.2010 11:58

Во время коннекта в флагах можно передать какой из таймаутов использовать, а его в свою очередь задать в настройках.
http://www.php.net/manual/en/mysql.c...l.client-flags
http://php.net/manual/en/function.my...nect.php#34742

EvroStandart 03.12.2010 16:06

Цитата:

Сообщение от Hubbitus (Сообщение 1730408)

MYSQL_CLIENT_INTERACTIVE это до создания коннекта прописывать в своём коде и всё заработает? Или оно в какихто файлах есть и там править нужно?


Цитата:

Сообщение от Hubbitus (Сообщение 1730408)

my.cnf - на сервере вроде нет такого файла. Специально не искал.

Мой скрипт использует PEAR пакеты. Для базы - DB_DataObject
http://pear.php.net/package/DB_DataObject/redirected
В коде нет прямого управления созданием коннекта.

Через mysql_ping() и параметр connection объекта я написал восстановление соединения.

Hubbitus 04.12.2010 14:41

Цитата:

Сообщение от EvroStandart (Сообщение 1730429)
MYSQL_CLIENT_INTERACTIVE это до создания коннекта прописывать в своём коде и всё заработает? Или оно в какихто файлах есть и там править нужно?

Флаг во время создания коннекта.

Затем, первым выполнить установку параметра в секундах, как-то так:
SET INTERACTIVE_TIMEOUT = somevalidnumber ;
По идее должно работать, сам не проверял.
Можно попробовать сделать то же самое и с wait_timeout. В общем надо пробовать.

Цитата:

Сообщение от EvroStandart (Сообщение 1730429)
Мой скрипт использует PEAR пакеты. Для базы - DB_DataObject
http://pear.php.net/package/DB_DataObject/redirected
В коде нет прямого управления созданием коннекта.

С этим не работал, но должны же быть настройки передать доп параметр при коннекте.


Часовой пояс GMT +4, время: 17:25.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.