Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > опять mysql has gone away


Автор: donion 15.4.2009, 17:20
Всем привет, 

мой запрос:
INSERT INTO hrefs(id,href,date,flag,site) VALUES('','in_belarus/29149.html','15.04 16:42','0','http://telegraf.by/')
Таких запросов около 10, перед этим собирал весь запрос в кучу - insert....values (...),(...),(...), та же ошибка была.


ответ:
MySQL server has gone away

хостер свеб, может в нем проблема? ничего увеличивать не хотят, говорят оптимизируйте запросы.

Посоветуйте пожалуйста что сделать? Менять хостера? Если нет, то как можно оптимизировать этот запрос?  smile 

Автор: solenko 15.4.2009, 20:38
что у вас происходит ДО выполнения этого запроса? Сам  по себе запрос простой и может занимать много времени. Потому, здается мне, что сервер просто не дожидается выполнения этого запроса.

Автор: skyboy 15.4.2009, 21:58
Цитата(solenko @  15.4.2009,  19:38 Найти цитируемый пост)
что сервер просто не дожидается выполнения этого запроса

угу. похоже, в момент попытки выполнения этой простой и быстрой вставки mysql сервер уже недоступен.
часом соединение не закрывается в процессе работы?

Добавлено через 18 секунд
Цитата(solenko @  15.4.2009,  19:38 Найти цитируемый пост)
и может занимать много времени

опечатка. пропущено "не"

Автор: ksnk 15.4.2009, 22:12
donion, какого размера таблица? Хотя от размера тут будет зависеть немного...
Может http://www.mysql.ru/docs/man/Gone_away.html поможет?

Автор: lelik133 16.4.2009, 08:24
а при остальных запросах select/update/delete такого не наблюдается?

Автор: donion 16.4.2009, 13:25
Код

    $link = .................. // mysql connect
    
    ...........парсинг и формирование $complex...........

    //selecting everything that has zero value in a flag field
    $query = "SELECT href FROM hrefs WHERE flag = '0'";
    $array = mysql_query($query,$link);
    if (mysql_num_rows($array) > 0) {
       while ($row = mysql_fetch_assoc($array)) {
          $duplicates[] = $row['href'];
       }
    }

    //checking for duplicates in our findings
    for ($i=0;$i<count($complex);$i++) {
      for ($j=0;$j<count($duplicates);$j++) {
        if ($complex[$i]['href'] == $duplicates[$j]) 
        {  
           unset($complex[$i]['href']);
        }
      }
    }

    for ($i=0;$i<count($complex);$i++) {
       if (isset($complex[$i]['href'])) {
          $hrefis = 1;
          break;
       }
    }


    //updating hrefs table
    if ($hrefis == 1) {
      $query = "INSERT INTO hrefs(id,href,date,flag,site,catid) VALUES";
      for ($i=0;$i<count($complex);$i++) {
        if ($complex[$i]['href']) {
          $m = $i+1;
          $affix = !isset($complex[$m]['href'])?'':',';
          $query .= " ('','".$complex[$i]['href']."','".$complex[$i]['date']."','0','".$site."','".$id."')".$affix;
        }
      }
    }
    //debugging
    print_r($complex);
    echo $query;
    mysql_query($query,$link) or die(mysql_error());

    } else {
      //logging

    }


Если честно, то полная загадка, mysql has gone away через раз. 
Это тоже кусок кода, точнее парсера, вкратце опишу как работает:
- срабатывает mt_rand, выбирается 1 или 2. Если 1 приведенным выше кодом собираются все 
ссылки с сайта, проверяются на дупликаты и новые записываются в базу.
- Самое интересное если срабатывает 2 там тоже происходит инсертинг, никаких ошибок не возникает.

У меня ощущение что я запрос неправильно собираю.

to lelik133: а при остальных запросах select/update/delete такого не наблюдается? 
Получается что нет. smile

to ksnk: Да, но остальные то запросы, работают нормально. Из приведенной вами ссылки: 
Эти ошибки будут также выдаваться при посылке серверу неверного или слишком длинного запроса. Вот это точно, у меня скорей всего неправильный запрос.

to all: Самое интересное, что через раз то записывает в базу, то не записывает.


p.s. После ошибки сайт находится в состоянии спячки около 10 минут. Но это думаю стандартное поведение после вылета сервера.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)