perf(sanitize): optimize SQL parsing with ASCII fast-path (~43% faster)#2434
Closed
analytically wants to merge 1 commit into
Closed
perf(sanitize): optimize SQL parsing with ASCII fast-path (~43% faster)#2434analytically wants to merge 1 commit into
analytically wants to merge 1 commit into
Conversation
Significant performance improvements to SQL sanitization: - SanitizeSQL: 1632ns → 923ns/op (-43.4%) - Sanitize: 362ns → 348ns/op (-3.9%) - Memory: unchanged (544 B/op, 9 allocs/op) Key optimizations: 1. ASCII fast-path in lexer state functions (rawState, singleQuoteState, doubleQuoteState, oneLineCommentState) - avoids UTF-8 decoding overhead for the 99%+ of SQL that is ASCII 2. Direct byte checks for lookaheads (e', --, /*, '', "") instead of UTF-8 decoding when checking for ASCII characters 3. Adaptive QuoteString allocation strategy: - Short strings (≤64 bytes): worst-case preallocate - Long strings (>64 bytes): scan-first for exact allocation All optimizations maintain full UTF-8 safety and correctness. Benchmarked on Apple M1 Pro (darwin/arm64). Signed-off-by: Mathias Bogaert <mathias.bogaert@gmail.com>
Contributor
Author
|
Failing CI doesn't seem related but more to do with CockroachDB? |
Owner
|
I'm a bit concerned about making changes to a security sensitive portion of the code. How much does this impact real world performance? It should only happen when using the simple protocol which I hope is fairly rare. Also, if I understand the ASCII fast path portions correctly, wouldn't it be impossible for the state characters (e.g. |
Contributor
Author
|
Sounds fair. Rare code path vs stability risk for 0.0000+% performance change. |
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Significant performance improvements to SQL sanitization:
Key optimizations:
ASCII fast-path in lexer state functions (rawState, singleQuoteState, doubleQuoteState, oneLineCommentState) - avoids UTF-8 decoding overhead for the 99%+ of SQL that is ASCII
Direct byte checks for lookaheads (e', --, /*, '', "") instead of UTF-8 decoding when checking for ASCII characters
Adaptive QuoteString allocation strategy:
All optimizations maintain full UTF-8 safety and correctness. Benchmarked on Apple M1 Pro (darwin/arm64).