За последние 24 часа нас посетили 22275 программистов и 1058 роботов. Сейчас ищут 619 программистов ...

Mysql или код?

Тема в разделе "Прочее", создана пользователем smitt, 8 дек 2012.

  1. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Недавно возникла следующая ситуация, есть код который прекрасно работает, после обработки полученного xml заносит данные в базу.

    Но несколько раз данные не занеслись. Проверил, xml есть, данные верные. Проверил лог апача, все чисто, ошибок нет. Сейчас все работает без ошибок. Что произошло, почему данные не занеслись не понятно.

    У кого какие идеи, что могло произойти?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Впендюрь в скрипт лог
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Что логировать?

    Я уже логирую xml. Если бы скрипт не смог бы обработать xml то в логе апача должна была быть ошибка, но ошибки нет. Следовательно скрипт получил xml обработал но не добавил в базу. Почему не ясно...
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    а не могло одновременно несколько экземпляров скрипта работать и, скажем, блокировать доступ к какому-то ресурсу? в логах всё хорошо, потому что ошибка не была просигналена. к примеру облом по time limit разве попадет в лог?
    или: ошибки и небыло (с т.з. скрипта), просто данные перезаписаны другим экземпляром.
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Да такое возможно что работало несколько экземпляров. Но возникает вопрос к какому ресурсу...
    1) Скрипт работает с файловой системой - пишет логи запросов. В логе я вижу xml которой нет в базе, следовательно с доступом к файлу все в порядке.
    2) Скрипт записывает данные в базу. Не получил доступ к базе?

    Добавлено спустя 2 минуты 54 секунды:
    как можно ограничить экземпляры друг от друга?
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    либо явными блокировками и проверками, либо сделать так, чтобы результаты гарантированно не накладывались. как именно - тебе лучше видно.

    в базу результат как записывается? если вставка реально не прошла, это как-то отлавливается?
    для расширения mysql:
    - успешный mysql_query("INSERT …") вернет TRUE;
    - mysql_affected_rows() должен вернуть количество добавленных записей. при конфликте их будет меньше, чем ожидалось ))).

    для проверки попробуй вставить новую запись с уже существующим первичным ключем.
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Собственно одну проверку после этой ситуации я поставил, пока работает ))
    Надеюсь, что больше никаких сюрпризов не будет...

    Спасибо за советы!
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    веди лог по шагам йопт
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Я его веду, не логирую разве что запросы к базе. Предлагаешь и их логировать?))
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ДААААААААААА! с проверкой на удачную отработку!!!!!!!!!!!!!! капец с таким подходом...
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Проверка уже есть, логировать запросы к базе как-то излишне, но для статистики все же добавлю, надо узнать как часто такое может происходить...
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    а как ты собираешься "узнать" почему что-то не сработало, если не проверить всё по шагам? телепатически?
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    У меня логируются все шаги, кроме запросы к базе т.к. считаю их лишними. На основе этих логов я и пришел к выводу что на этапе инсерта в базу произошел какой-то сбой. Проверил данные в xml они верные. Следовательно инсерт должен был быть верным. В логах апача нет ошибок следовательно парсер то же отработал правильно. Это не телепатия а логическое рассуждение.

    Но и ты прав, для упрощения поиска проблемы, нужно добавить логирование запросов к базе, что я и сделаю.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Если возникла ошибка, надо логировать. =) А когда дебагаешь неизвестную хрень, надо логить всё подряд же ж...
    вообще не понимаю, как связаны два этих факта и на чём базируется твоя уверенность :D

    он отработал без ошибок. не больше не меньше. проблема может быть и в хитром сочетании корректных данных. А так как ты не проверяешь на ошибки и не логишь запросы, то хер поймёшь что там было. Можно будет говорить уверенно только после того, как ситуация повторится, а ошибок в запросах не будет.

    Это фантазии =)

    ну спасибо йопт :D
    ты запросы в бд на удачность проверяешь? Может банально транзацкция не закрылась?
     
  15. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Сложно не согласиться ))

    На логике ну или же как ты называешь фантазия ))) Если данные в xml верные и в логах нет ошибок, то значить xml должен был распарситься и сформироваться правильный запрос на инсерт. Хотя конечно раз инсерта не было значить где то что то пошло не так как надо...

    Это верно, но вот чувствую что ошибки в запросе не будет...

    Не за что :)

    Может и такое быть, во всяком случае не стандартная ситуация возникла...
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    если допустим в запросе значение без кавычек, в xml оно пустое, то парсится без ошибок, в запрос идёт пустая строка и запятая после неё убивает запрос. Ошибок нет, вставки нет. Может быть такое? Хрен знает что ещё может быть. =) Надо логать. А ты проверяешь запрос на успешность?
     
  17. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    К сожалению должен признать, что проверки не было. Из xml я беру только 1 значение проверяю, что оно корректно, и со своими данными вставляю в базу.
    Т.е. данные всегда должны быть верными и инсерт должен быть. И я уверен что инсерт сформировался, но что там дольше произошло для меня пока загадка...
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Верный запрос с верными данными - тоже может обломаться. Например, могут быть превышены допустимые пределы на число подключений от одного пользователя MySQL. Или, на сколько я понял, ещё может быть установлено ограничение на число запросов в единицу времени. Ну, мало ли ещё почему запрос может не пройти. Нужно проверять результат выполнения запроса и если запрос не выполнен - то писать в лог сам запрос, а также сообщение об ошибке, полученное от MySQL. Тогда ситуация прояснится.
     
  19. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    тут часто упоминаются "логи апача". но могут быть настройки, из-за которых пхп пишет свои ошибки в другие места.