172 похожих чатов

Я внимательно не читал это длинное обсуждение, но мне любопытно...

на основании чего были сделаны все эти выводы?

17 ответов

42 просмотра

Про то, что параллельных воркеров отрубает при Execute с "maximum number of rows" отличным от FETCH_ALL (в любом смысле) -- в исходнике в общем написано. src/backend/postgres.c: exec_execute_message(const char *portal_name, long max_rows) ... if (max_rows <= 0) max_rows = FETCH_ALL; completed = PortalRun(portal, max_rows, true, /* always top level */ !execute_is_fetch && max_rows == FETCH_ALL, receiver, receiver, &qc); src/backend/pquery.c: PortalRun(Portal portal, long count, bool isTopLevel, bool run_once, DestReceiver *dest, DestReceiver *altdest, QueryCompletion *qc) ... portal->run_once = run_once; ... nprocessed = PortalRunSelect(portal, true, count, dest); ... PortalRunSelect(Portal portal, bool forward, long count, DestReceiver *dest) ... ExecutorRun(queryDesc, direction, (uint64) count, portal->run_once); src/backend/executor/execMain.c: ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count, bool execute_once) ... standard_ExecutorRun(queryDesc, direction, count, execute_once); ... standard_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, uint64 count, bool execute_once) ... ExecutePlan(estate, queryDesc->planstate, queryDesc->plannedstmt->parallelModeNeeded, operation, sendTuples, count, direction, dest, execute_once); ... ExecutePlan(EState *estate, PlanState *planstate, bool use_parallel_mode, CmdType operation, bool sendTuples, uint64 numberTuples, ScanDirection direction, DestReceiver *dest, bool execute_once) ... if (!execute_once) use_parallel_mode = false;

Yaroslav-Schekin Автор вопроса
Ilya Anfimov
Про то, что параллельных воркеров отрубает при Exe...

Про этот вывод ясно, спасибо! А что из них передавало не FETCH_ALL в EXECUTE / использовало не simple query protocol?

Yaroslav Schekin
Про этот вывод ясно, спасибо! А что из них передав...

JDBC (оно испокон века не simple), и галочка в настройках ... IDE кажэтся -- Limit page size to https://t.me/pgsql/322693

Yaroslav-Schekin Автор вопроса
Ilya Anfimov
JDBC (оно испокон века не simple), и галочка в нас...

Понятно. То, что это происходит, можно было непосредственно увидеть только с помощью auto_explain, наверное.

Yaroslav Schekin
Понятно. То, что это происходит, можно было непос...

И да, в JDBC postgresql это, очевидно, будут параметры preferQueryMode extended | extendedForPrepared | extendedCacheEverything | simple The default is extended и defaultRowFetchSize The default is zero, meaning that in ResultSet will be fetch all rows at once.

Yaroslav Schekin
Понятно. То, что это происходит, можно было непос...

Меня сейчас дажэ большэ интересует -- откуда у него была разница в pgadmin между explain и запросом. Запрос выполнялся быстро, explain -- медленно. Но я пока думаю, как можно что-то сымитировать.

Yaroslav-Schekin Автор вопроса
Ilya Anfimov
Меня сейчас дажэ большэ интересует -- откуда у нег...

Возможно, overhead на timing. Кто его знает, какая это OS и т.п.

Yaroslav Schekin
Возможно, overhead на timing. Кто его знает, какая...

Как-то очень точно соответствовало по времени.

Yaroslav-Schekin Автор вопроса
Ilya Anfimov
Как-то очень точно соответствовало по времени.

Соответствовало чему (опять-таки, я всё обсуждение внимательно не читал)?

Yaroslav Schekin
Соответствовало чему (опять-таки, я всё обсуждение...

Запросы с explain, во всех вариантах, соответствовали таймингу JDBC с fetchLimit=500 (притом установка параметра JDBC на тйминг с explain никак не влияла). Там у него на разных данных два запроса было -- один выполнялся 6-8 секунд в быстром случае и 20-22 в медленном. Другой -- 15-20 секунд в быстром случае и 1:15 в медленном.

Ilya Anfimov
Запросы с explain, во всех вариантах, соответствов...

Да, именно так. У коллег по работе на других компах схожий результат был. И на других запросах был похожий эффект.

Ilya Anfimov
Меня сейчас дажэ большэ интересует -- откуда у нег...

Попробуй на большой выборке сделать группировку по индексирусыс полям. Наверное тогда запрос будет быстрее выполняется чем plan explain analiz

Yaroslav-Schekin Автор вопроса
Ilya Anfimov
Запросы с explain, во всех вариантах, соответствов...

Странно, но, опять-таки, кто его знает, что эти клиенты там посылают (в плане протокола). Нужно было сравнить с psql, для начала. А потом посмотреть auto_explain, если есть возможность.

Yaroslav Schekin
Странно, но, опять-таки, кто его знает, что эти кл...

Ну вот мы и выяснили что phpStorm посылает команду в jdbc. Это и влияет на время выполнения. Теперь мы воорожены знаниями, что если использовать jdbc драйвер с лимитом, то запросы могут дольше выполняться.

Yaroslav-Schekin Автор вопроса
Zhukov Dm
Ну вот мы и выяснили что phpStorm посылает команд...

Я пока только частично понял происходящее — ясно, что использование не FETCH_ALL в EXECUTE отключает parallel_mode. Неясно, почему https://t.me/pgsql/322788

Yaroslav Schekin
Я пока только частично понял происходящее — ясно, ...

да я вобще до вчерашнего дня и не подозревал о существовании jdbc и о том что IDE через него работает ))))))

Yaroslav Schekin
Я пока только частично понял происходящее — ясно, ...

Это, безусловно, из-за того, что он не хочет выполнять parallel_mode из-за execute_once. Скорее всего, есть опасение, что если запрос не отработает до конца -- то воркеры обязаны будут подвиснуть до следующего Execute, в котором -- продолжыть предыдущую работу. Но детали и историю этой части я пока что не читал

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта