|
асинхронные запросы в windows
|
|||
---|---|---|---|
#18+
Всем привет. Работаю в связке Java Spring - Hibernate - PostgreSQL. К БД я отсылаю асинхронные запросы в нескольких потоках. В результате таких действий БД может ничего не вернуть на запрос, в случае, если какие-то запросы на получение одного и того же атрибута посылаются в один и тот же момент. Если же отказаться от потоков и отсылать все запросы последовательно, то все работает корректно. Я покопался в файле конфигурации (postgresql.conf) и наткнулся на effective_io_concurrency, которое задаёт допустимое число параллельных операций ввода/вывода. Правильно ли я понимаю, что эта настройка работает только из-под линукса? В системе windows она может быть равна только нулю, а значит в данной ОС никаких параллельных операций с postgreSQL быть не может? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:21 |
|
асинхронные запросы в windows
|
|||
---|---|---|---|
#18+
effective_io_concurrency вовсе не имеет никакого отношения к получению запросов. Это POSIX_FADVISE вызовы из bitmapscan для подсказок ОС какие блоки потребуются в page cache. Не в курсе есть ли под виндами этот define, да и в целом штука несколько спорной эффективности. Дебажьте свои потоки, что именно и когда отправляется. Нет ли такого, что вы отправляете следующий запрос в коннект базы, уже занятый выполнением другого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2020, 14:44 |
|
асинхронные запросы в windows
|
|||
---|---|---|---|
#18+
Спасибо, Ваш ответ помог! Четко разделил потоки и теперь они не пересекаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:25 |
|
асинхронные запросы в windows
|
|||
---|---|---|---|
#18+
И не могли бы подсказать еще с такой вещью: спустя некоторое время работы, в одном из потоков один раз появилась ошибка: "org.postgresql.util.PSQLException: ОШИБКА: не удалось инициализировать параллельный исполнитель" Я предположил, что это может быть связано с параметрами max_worker_processes и max_parallel_workers_per_gather в файле postgresql.conf. Изначально они были равны 8. Увеличил число до 20. После нового запуска такой ошибки не возникает. Но меня одолевают сомнения: эта ошибка была какой-то случайностью или действительно необходимо было увеличить число воркеров? Уже можно спокойно продолжать работу и не ожидать подвоха с этой стороны? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2020, 20:49 |
|
асинхронные запросы в windows
|
|||
---|---|---|---|
#18+
ghosterus "org.postgresql.util.PSQLException: ОШИБКА: не удалось инициализировать параллельный исполнитель" git grep.... parallel worker failed to initialize srcthe postmaster was * unable to fork the worker or it exited without initializing * properly. Оба возможных источника ошибки возможны из parallel leader только, оба из разряда "что-то идёт не так", но что именно - надо смотреть в логе базы сообщения от самого parallel worker. Да, это относится к параллельному исполнению запросов, но не относится к конфигурации max_worker_processes/max_parallel_workers_per_gather - если нет доступных воркеров - то база просто запустит меньше воркеров чем могла бы (вплоть до 0) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 11:57 |
|
|
start [/forum/topic.php?fid=53&msg=39997299&tid=1994469]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 282ms |
total: | 537ms |
0 / 0 |