У меня есть сайт с одной страницей в javascript.два одновременных соединения/запросы блокировки
Чтобы упростить все три типа запросов HTTP посылаются на сервер
/action/status/
/action/csv_process/
/action/status_pid/
Каждый 30 второй запрос /action/status/
отправляется на сервер. В запросе не так много. Вы можете видеть ниже все записи запросов mysql, выполненных в запросе
2017-01-12 18:37:03 2 --- REQUEST START: action status
2017-01-12 18:37:03 2 UPDATE `log_login` SET time_active=1387 WHERE id=78360
2017-01-12 18:37:03 2 BEGIN
2017-01-12 18:37:03 2 COMMIT
2017-01-12 18:37:03 2 --- REQUEST END 0.076473951339722
Затем пользователь может загрузить CSV-файлы. Когда файлы загружаются, пользователь может выбрать способ обработки файла. Следующий запрос /action/csv_process/
часто занимает некоторое время, поэтому для получения запроса /action/status_pid/
отправляется на сервер каждые 3 секунды для получения прогресса в процентах (0-100)
Все работает нормально. В /action/status_pid/
запросы выполняются с секундными интервалами 3 и возвращает ответ, в то время как /action/csv_process/
обрабатывает, но как только /action/status/
не отправляется на сервер все, замках до /action/csv_process/
завершения
Почему /action/status/
замок все?
Каждый запрос работает с MySQL транзакций и все таблицы InnoDB
Несмотря на то, если я не использовал session_write_close()
на все запросы параллельности должны просто ждать, пока текущий запрос не делается .. Но /action/status/
не в ожидании, пока запрос обработки данных выполняется и блокирует все остальные запросы с ожиданием
Является ли ваш настольный движок MyISAM или InnoDB? И я не понял «ОБНОВЛЕНИЕ», за которым следуют «BEGIN» и «COMMIT». Не должно быть между началом и фиксацией? –
Все таблицы InnoDB. Да, вы правы в запросах begin/commit. – clarkk