За последние 24 часа нас посетили 22945 программистов и 1237 роботов. Сейчас ищут 730 программистов ...

блокирование select запроса

Тема в разделе "PHP для профи", создана пользователем vikrorpert, 12 май 2019.

  1. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    вопрос для экстрасенсов
    есть модуль https://github.com/thirtybees/elasticsearch
    вызываю этот метод из браузера https://github.com/thirtybees/elasticsearch/blob/master/classes/ModuleAjaxTrait.php#L107
    добавил в начало вызов session_write_close
    но если вызвать этот метод из нескольких вкладок, то каждая последущая вкладка работает дольше предыдущей
    путем отладки обнаружил что спотыкается на этом месте https://github.com/thirtybees/elasticsearch/blob/master/classes/ModuleAjaxTrait.php#L147
    а если точнее то тут https://github.com/thirtybees/elasticsearch/blob/master/classes/IndexStatus.php#L189
    такое ощущение что sql запрос блокирует и другим запросам приходится ждать
    кто поможет разобраться?
     
  2. freebsdd

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

    С нами с:
    16 апр 2019
    Сообщения:
    26
    Симпатии:
    2
    Если я не ошибаюсь - Блокирует не sql запрос, а сам PHP, то же самое выйдет с while(..){..}, однако в то время как в параллельных вкладках "крутилки" во вкладке Инкогнито или другом браузере блокировки не будет. Вывод, либо делать с помощью Ajax и фоном выполнять, либо оптимизировать на быстрое выполнение, либо извратиться на shell_exec без получения данных, ну т.е. отправить его в NULL, ну костылей много, но Ajax мне кажется лучше, ОДНАКО учитывать нужно timeout

    Если есть что то другое, сообщите
     
  3. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    пхп блокирует если используются сессии
    без сессий код while(..){..} будет выполняться в каждой вкладке одновременно
    чтобы не блочило надо вызывать session_write_close
    в своем коде я вызываю session_write_close но не помогает