|
автор: 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 | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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)
| | Большое всем спасибо за ответы !
(я и не думал, что здесь такой оживленный форум !) | |
|
|
|