-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Add proactive per-query memory checking to prevent OOM #16378
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
xiangfu0
wants to merge
8
commits into
apache:master
Choose a base branch
from
xiangfu0:query-sucide-when-oom
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
04763f4
Add proactive per-query memory checking to prevent OOM
xiangfu0 90641cf
Update default per-query memory limit to 1/3 of heap size
xiangfu0 b6dcce1
Address PR comments: Fix memory limit calculation and rename ambiguou…
xiangfu0 a52efa9
Address PR comments: Add runtime-changeable per-thread memory configs…
xiangfu0 d705df4
Remove deprecated per-query memory configuration constants
xiangfu0 fb39eb4
revist the checkMemoryAndInterruptIfExceeded logic
xiangfu0 eb03ddf
Add queue-based throttling to ThrottleOnCriticalHeapUsageExecutor
xiangfu0 be9fb8a
Sample MSE opeartor and proactive kill the thread when server in memo…
xiangfu0 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
339 changes: 328 additions & 11 deletions
339
...-core/src/main/java/org/apache/pinot/core/accounting/PerQueryCPUMemAccountantFactory.java
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could it be overly chatty for light operators that iterate in a tight loop (e.g., FilterOperator on a single segment). Would the following addition make sense?
1. Short-circuiting if the thread’s memory sample hasn’t changed since last check.
2. Sampling every N blocks (configurable) instead of every block.
Even though each step is cheap, doing it 1000 times for a query that finishes in ~10 ms adds measurable overhead (extra branches, TLS lookups, potential volatile reads).
For heavier operators (joins, aggregations) the added cost is negligible, but for “light” ones the ratio might be higher.