powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
8 сообщений из 8, страница 1 из 1
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38060680
Knyzev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с проблемой сильно различного времени выполнения запросов через фрэймворк (Symfony + Doctrine для базы) и phppgadmin.

Если через PHPPgAdmin запрос выполняется 90мс, то через Symfony он выполняется 30 секунд.

В чем тут может быть дело ?

Сам запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
  o0_.aoid AS aoid0, 
  o0_.aoguid AS aoguid1, 
  o0_.formalnamepath AS formalnamepath2, 
  o0_.regioncode AS regioncode3, 
  o0_.aolevel AS aolevel4, 
  o0_.actstatus AS actstatus5 
FROM 
  object_name o0_ 
WHERE 
  o0_.regioncode = ? AND o0_.formalnamepath = ? 
LIMIT 
  1



Parameters: ['77', москва]
[Display runnable query]
Time: 32969.89 ms

В PHPPgAdmin он же выполняется 90мс.
Есть один момент, в таблице которую представляет VIEW object_name (это view) используется партиционирование по regioncode.

Если из панели Symfony посмотреть QUERY PLAN, то план запроса правильный, но там только EXPLAIN, а не EXPLAIN ANALYZE.

Но даже если предположить, что когда запрос выполняется через Symfony партиционирование не учитывается, то это всё равно долго! Без партиционирования с проходом по всем дочерним таблицам (около 90), речь идёт о времени менее 2-х секунд.
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38060830
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explain + ddl таблиц в студию
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061090
Knyzev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что показывает QUERY PLAN в Symfony

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
QUERY PLAN
Limit (cost=0.00..135.20 rows=1 width=203)

-> Result (cost=0.00..540.80 rows=4 width=203)

-> Append (cost=0.00..540.77 rows=4 width=203)

-> Seq Scan on addrobj (cost=0.00..0.00 rows=1 width=466)

Filter: ((actstatus = 1) AND ((regioncode)::text = '77'::text) AND (aolevel = ANY ('{1,4,6}'::bigint[])) AND (regexp_replace(btrim(lower((formalname)::text)), '[^а-яА-Яa-zA-Z0-9-]{1,}'::text, '-'::text, 'g'::text) = 'москва'::text))

-> Bitmap Heap Scan on addrobj_77 addrobj (cost=18.45..540.77 rows=3 width=115)
Recheck Cond: (aolevel = ANY ('{1,4,6}'::bigint[]))

Filter: ((actstatus = 1) AND ((regioncode)::text = '77'::text) AND (regexp_replace(btrim(lower((formalname)::text)), '[^а-яА-Яa-zA-Z0-9-]{1,}'::text, '-'::text, 'g'::text) = 'москва'::text))

-> Bitmap Index Scan on addrobj_77_aolevel_index (cost=0.00..18.44 rows=759 width=0)
Index Cond: (aolevel = ANY ('{1,4,6}'::bigint[]))



Вот что показывает отладчик в Symfony, 135.20мс должен выполняться запрос по предварительной оценке EXPLAIN, что чуть больше чем реальное выполнение запроса.

Однако через фрэймворк сам запрос выполняется 30 секунд, как показывает отладчик!
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061101
Knyzev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас замерил производительность через PDO, и нашёл уязвимую в плане производительности точку.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
$dbh2->query('SET constraint_exclusion = on');
$q = $dbh2->prepare("SELECT 
  o0_.aoid AS aoid0, 
  o0_.aoguid AS aoguid1, 
  o0_.formalnamepath AS formalnamepath2, 
  o0_.regioncode AS regioncode3, 
  o0_.aolevel AS aolevel4, 
  o0_.actstatus AS actstatus5 
FROM 
  object_name o0_ 
WHERE 
  o0_.regioncode = '77' AND o0_.formalnamepath = 'москва'");
if (!$q->execute()) {
  var_dump($q->errorInfo());
}
$stop = microtime(true);



Если параметры (77 и москва) написать прямо в SQL коде запрос отстреливает за 1.4 секунды,
это конечно все равно много, но уже ближе к теме!

И внимание, если передать параметры через execute, т.е. вот так

Код: php
1.
2.
3.
4.
if (!$q->execute(array('77', 'москва')) {
  var_dump($q->errorInfo());
}
$stop = microtime(true);



То время запроса будет уже 35 секунд! 35!

Что тут не так ?
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061106
Knyzev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сначала подумал что если передать параметры в execute()
то он во что-то их кодирует, но я оставил только 77, а второй параметр убрал.
Но различия по времени сохранились!
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061438
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты планы наконец то покажешь?
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061456
SergSW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Knyzev,

Как в продакшене себя ведёт? Проблема сохраняется?
...
Рейтинг: 0 / 0
Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
    #38061460
Knyzev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, уже решил проблему.
Вот тут описание проблемы
http://www.sql.ru/forum/actualthread.aspx?tid=987547
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сильно различное время выполнения запросов через PHPPgAdmin и Doctrine
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]