Re: Asynchronous MergeAppend
| От | Alexander Pyhalov |
|---|---|
| Тема | Re: Asynchronous MergeAppend |
| Дата | |
| Msg-id | fa7ae004ec282fde84c29f36e0c85979@postgrespro.ru обсуждение |
| Ответ на | Re: Asynchronous MergeAppend (Alexander Pyhalov <a.pyhalov@postgrespro.ru>) |
| Список | pgsql-hackers |
Alexander Pyhalov писал(а) 2026-04-13 18:09: > Hi. > > Looked at it. Overall I agree that when we wait for data from one slot > after node initialization, we can't get data from other slots - they > are already either exhausted, or have already received data which is > not needed for now. So it seems that async machinery on later stages is > useless. > > Was a bit surprised that asyncresults field is not used in async merge > append anymore, as we save result directly in ms_slots. However, as we > do it only on initial stage, this seems to be OK. > > classify_matching_subplans() comment still refers to ms_valid_subplans. > > Will look at it once again tomorrow. Haven't found anything suspicious (besides redundant empty line after enable_async_merge_append GUC description in src/backend/utils/misc/guc_parameters.dat). Tested it and was a bit surprised that new async Merge Append version (without async machinery after nodeMergeAppend initialization) was about 5% faster than the old one with concurrent queries (-j 16) and 10-15% faster with single-thread load (when there was a lot of CPU capacity) in my tests (test was basically the same as in [1]). So, async machinery after Merge Append node is initialized was not only useless, but even harmful. Test results: patch version | concurrency | async_capable off | async_capable on old | -c 1 -j 1 | 880 tps | 1428 tps (+62%) old | -c 16 -j 16 | 5190 tps | 4933 tps (-5%) new | -c 1 -j 1 | 888 tps | 1582 tps (+78%) new | -c 16 -j 16 | 5020 tps | 5256 tps (+4%) 1. https://www.postgresql.org/message-id/159b591411bb2c81332018927acbd509%40postgrespro.ru -- Best regards, Alexander Pyhalov, Postgres Professional
В списке pgsql-hackers по дате отправления: