Add a setting scheduler_process_partial
that allows partial scheduling of tasks in the background threads
#16973
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a new setting -
scheduler_process_partial
- that allows partial scheduling of tasks in the background threads. Normally, the background tasks passTaskExecutionMode::PROCESS_ALL
to the tasks they execute - leading to them being stuck on processing the task fully until it is completed. As a result, long-running queries can block short-running queries.In regular DuckDB operation - that is not a big problem, because every connection has its own "processing thread" that works only on the queries it issues - and hence short-running queries still make some progress. That is not always the case - however. When using certain APIs (e.g. the pending query API) the foreground thread might not participate in the query processing, leaving everything to the background tasks. As a result, short-running queries can become starved.
Enabling this setting improves fairness by only working on tasks partially before rescheduling. As a result, bigger tasks will need more "rounds" and short-running queries will complete without stalling. The setting is disabled by default for now as in most instances this will not be required - but is enabled in CI with the alternative verification setting.