Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как побороть таймаут ?
 
 автор: Sun_Lin   (03.11.2005 в 12:34)
 
 

Не буду рассказывать об изначальных обстоятельствах проблемы - я все свел к простейшему виду - есть PHP скрипт, который делает следующее :
1. Соединяемся с MySQL базой.
2. В цикле делаем выполнение запроса вида $sql="insert into tabl values(1,...);"; и соответственно $result = mysql_query($sql,$db);
3. Закрываем соединение.
Цикл от 1 до 100 тыс. Вылетает примерно на 70 тыс. с ошибкой "Fatal error: Maximum execution time of 30 seconds exceeded in l:\adm.php on line 50", т.е. ругается на строку $result = mysql_query($sql,$db); Но ведь время выполнения каждого инсерта ничтожно ! Если бы речь шла про MS SQL или про любой другой, поддерживающий транзакции, то я бы вышел из положения коммитами через каждую тысячу инсертов. Увеличивать таймаут в настройках MySQL ? Глупость ... Как побороть ситуацию ?

ЗЫ
если это важно, то вот конфига :
- Денвер-2 2005-10-07
- MySQL 4.1.8-max
- XP SP2

   
 
 автор: napTu3aH   (03.11.2005 в 12:57)   письмо автору
 
   для: Sun_Lin   (03.11.2005 в 12:34)
 

Время выполнения php-скрипта ограничено 30-ю секундами. Попробуйте убрать это ограничение. Пропишите в начале вашего файла.

<?php 
  set_time_limit
(0); 
?>


http://softtime.ru/forum/read.php?id_forum=1&id_theme=4697&page=1

   
 
 автор: cheops   (03.11.2005 в 13:25)   письмо автору
 
   для: Sun_Lin   (03.11.2005 в 12:34)
 

Используйте не одностроковый INSERT, а многостроковый. Это избавит вас от выполенения 100 000 вызвово mysql_query() - будет только один, но с гиганским запросом
<?php
 $sql
="insert into tabl values(1,...), (2,...), ..., (100000,...);"
?>

Сервер правда ограничивает длину запроса переменной max_allowed_packet, но её всегда можно увеличить в конфигуационном файле my.ini или прямо из скрипта.

И действительно снимите ограничение по времени выполенения, как это описывает napTu3aH.

   
 
 автор: Sun_Lin   (03.11.2005 в 13:33)
 
   для: cheops   (03.11.2005 в 13:25)
 

Большое всем спасибо за ответы !
(я и не думал, что здесь такой оживленный форум !)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования