Improve SELECTs performance and add RowCursor::{decoded_bytes,received_bytes}
#169
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.
Summary
This PR introduces
RowCursor::{decoded_bytes,received_bytes}
methods to provide stats useful for telemetry on the client side.Besides this, the performance of
SELECT
queries is significantly improved:BufList
(to handle situations when one row is related to several HTTP chunks) is replaced with simpleBytes
and cloning in slow path cases. So,RowBinaryDeserializer
now accepts&[u8]
, which is much cheaper thanBufList
. This change achieves the most performance gain (~80%).RawCursor
(~30%).RowBinaryCursor
directly asRowCursor
to avoid one extra state machine in theRowCursor::next()
future (~5%).select/lz4
bench).vec![0; size]
iflz4_flex
is not compiled with thesafe-decode
feature (~5% in theselect/lz4
bench).Also, this is the first step in exposing
RawCursor
(#152).RawCursor
will be exposed with the addedasync collect(self) -> Result<Bytes>
method and examples in the following PRs."select" bench
Intel(R) Xeon(R) Gold 6226R @ 2.90 GHz
Before (on 7b599ef):
After:
AMD Ryzen 7 4800HS @ 2.90 GHz
Before (on 7b599ef):
After:
"select_numbers" bench
CPU: AMD Ryzen 7 4800HS @ 2.90 GHz
CH: 24.9.2 (localhost, docker)
Before (on 7b599ef):
(chosen worst among five runs)
After:
(chosen worst among five runs)
Checklist
Delete items not relevant to your PR: