Skip to content
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

Fast path for reading single doc with ordinals #102902

Merged
merged 2 commits into from Dec 6, 2023

Conversation

dnhatn
Copy link
Member

@dnhatn dnhatn commented Dec 3, 2023

This optimization is added for enrich lookups, which are likely to match a single document. The change decreases the latency of the enrich operation in the nyc_taxis benchmark from 100ms to 70ms. When combined with #102901, it further reduces the latency to below 40ms, better than the previous performance before the regression.

Relates #102625

@dnhatn dnhatn requested a review from nik9000 December 3, 2023 06:18
@dnhatn dnhatn marked this pull request as ready for review December 3, 2023 06:18
@elasticsearchmachine elasticsearchmachine added the Team:QL (Deprecated) Meta label for query languages team label Dec 3, 2023
@elasticsearchmachine
Copy link
Collaborator

Hi @dnhatn, I've created a changelog YAML for you.

@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-ql (Team:QL)

@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/elasticsearch-esql (:Query Languages/ES|QL)

dnhatn added a commit that referenced this pull request Dec 5, 2023
Requesting and returning memory from a CircuitBreaker can be costly due 
to the involvement of read/write on one or several atomic longs. To
address this issue, the local breaker adopts a strategy of
over-requesting memory, utilizing the reserved amount for subsequent
memory requests without direct access to the actual breaker.

Before passing a Block to another Driver, it is necessary to switch the 
owning block factory to its parent, which is associated with the global
breaker. This is done to bypass the local breaker when releasing memory,
as the releasing thread can be any thread, not necessarily the one
executing the Driver.

There are two specific operators that need to change the owning block 
factory: SinkOperator (superset of ExchangeSinkOperator), which is the
last operator of a Driver, and AsyncOperator, which can be responded by
any thread in response.

The optimization reduces the latency of the enrich operation in the 
nyc_taxis benchmark from 100ms to 50ms. When combined with #102902, it
further reduces the latency to below 40ms, better than the previous
performance before the regression.

Relates #102625
@dnhatn
Copy link
Member Author

dnhatn commented Dec 6, 2023

Thank you, Nik!

@dnhatn dnhatn merged commit c183b92 into elastic:main Dec 6, 2023
15 checks passed
@dnhatn dnhatn deleted the ordinals-one-doc branch December 6, 2023 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
:Analytics/ES|QL AKA ESQL >enhancement Team:QL (Deprecated) Meta label for query languages team v8.12.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants