Здравствуйте.
Дано: веб-приложение. На клиенте (js, jquery) формируются аякс запросы вида
$.ajax({
url: "some.php",
data: { whatyouwants: "smth1,smth2,smth3" }
})
На сервере скрипт some.php обрабатывает запрос и формирует последовательные sql запросы к БД firebird через одно постоянное PDO соединение. Ответ из БД тот же some.php преобразует в json вида
{smth1:[...], smth2:[...], smth3:[...]}
и возвращает клиенту. Структуру БД менять нельзя.
Проблема: медленное выполнение.
Попытка решения: вместо одного аякс запроса послать три вида:
$.ajax({
url: "some.php",
data: { whatyouwants: "smthN" }
})
Результат: фиаско. Для примера: один аякс запрос выполнялся 30 сек (на сервере: smth1 - 5сек, smth2 - 10сек, smth3 - 15сек, время подключения и передачи пренебрежимо мало). Думал, что три запроса вместе выполняться за 15сек (по самому долгому запросу к БД). Не тут то было. При трех параллельных запросах: smth1 - 15сек, smth2 - 25сек, smth3 - те же 30сек.
На каком-то этапе параллельные запросы также выстраиваются в очередь. Если в то же время подать аналогичные запросы с другого клиента, то время ожидания ещё больше растягивается.
Получается, что один последовательный запрос, что несколько параллельных, имеют сопоставимую продолжительность.
Вопросы:
Есть ли в распараллеливании запросов рациональное зерно?
Почему нет прироста скорости?
Есть ли какие-нибудь настройки apache, php, firebird, позволяющие получить выигрыш в скорости при распараллеливании запросов?
Спасибо.