Боюсь что задаю очень глупый вопрос, и даже обьяснить его не смогу.
Дано: экспорт продуктов в xml файл. Выполняется один запрос, примерно за 4-5 секунд. Выгружаются товары(50 тыс) в массив. Далее массив разбиваю и работаю с ним(строю xml) и отдаю пользователю на скачивание. В цикле происходит 5-6 моментальных запросов, это важно.
Цикл строит xml 10-15 секунд и кушает 500 мб памяти.
Это все происходит быстро, если на сервере не много пользователей. Наверное из-за них. Не уверен. Описываю дальше.
Частенько выполнение скрипта происходит по 5-8 минут. Не могу понять почему.
Хотя вот сейчас, ночью, когда юзеров почти нет и использование оперативной памяти не происходит - скрипт выгружал xml минут 5. После этого сразу же выполняю его повторно и что мы видим - выгружается за пару секунд. Как? Почему так происходит? Как отладить и понять в чем дело? Дело в php?
То есть, проблема в том, что я не могу понять, почему скрипт выполняется долго, когда много юзеров и они все нагружают сайт, хотя использование оперативной памяти 1600/4000 мб.
Я даже добавлю.
Здесь вполне может быть дело и в оптимизации скрипта. Вы пробовали запустить xDebug и посмотреть количество памяти и системных вызовов по нему? А что у вас с конфигурацией php, apache? Вопрос а-ля "у меня вроде где-то живот болит, но ничего конкретного сказать не могу, скажите, как лечить?"
Без предоставления конфигурации БД, что там у вас, какие настройки, что за тип движка хранилища, какие диски и что еще рядом крутится - это взывание к телепатам.
На быстродействие БД может повлиять все из вышеперечисленных.
Есть ли настройка в конфигурации БД, чтобы она логировала медленные запросы?
Что говорит EXPLAIN по данному запросу?
Возможна ли ситуация, когда данный запрос выполняется разными пользователями?
Сколько подключений разрешено к БД?
В цикле происходит 5-6 моментальных запросов, это важно.
запросы выстраиваются в очередь и выполняются по очереди, если ваш подзапрос использует таблицу в которой что то изменяется, то он будет ждать пока предыдущий запрос ее изменит