Skip to content

Multiple performance improvements#629

Open
boekkooi-impossiblecloud wants to merge 6 commits into
XSAM:mainfrom
boekkooi-impossiblecloud:performance
Open

Multiple performance improvements#629
boekkooi-impossiblecloud wants to merge 6 commits into
XSAM:mainfrom
boekkooi-impossiblecloud:performance

Conversation

@boekkooi-impossiblecloud

Copy link
Copy Markdown
Contributor

Good day,

I was looking at some traces and noticed that otelsql was taking a bit more time then I wanted.
This PR contains some performance improvements that, so let me know what you think.

Thanks for reviewing and have a great day!

benchstat results:

goos: linux
goarch: amd64
pkg: github.com/XSAM/otelsql
cpu: AMD Ryzen 7 Pro 7735U with Radeon Graphics     
                                              │ c44ff0aae900c1cef8415f1a7ba37c7d28bd78e7.txt │ aac67109800e63556bde543ace8340b6d7346c4e.txt │
                                              │                    sec/op                    │       sec/op        vs base                  │
ConnQueryContext/NeverSample-16                                                 1008.5n ± 3%          260.4n ± 2%  -74.17% (p=0.000 n=10)
ConnQueryContext/Default-16                                                     1752.0n ± 2%          816.5n ± 3%  -53.39% (p=0.000 n=10)
ConnExecContext/Default-16                                                       777.0n ± 0%          465.2n ± 1%  -40.12% (p=0.000 n=10)
ConnExecContext/NeverSample-16                                                   412.2n ± 1%          118.5n ± 1%  -71.26% (p=0.000 n=10)
ConnResetSession/Default-16                                                      754.1n ± 0%          352.2n ± 1%  -53.30% (p=0.000 n=10)
ConnResetSession/NeverSample-16                                                  417.4n ± 1%          118.3n ± 1%  -71.67% (p=0.000 n=10)
ConnBeginTx/Default-16                                                          1652.0n ± 1%          751.5n ± 1%  -54.51% (p=0.000 n=10)
ConnBeginTx/NeverSample-16                                                       965.4n ± 1%          270.3n ± 1%  -72.00% (p=0.000 n=10)
NewRows-16                                                                       527.9n ± 1%          342.3n ± 1%  -35.14% (p=0.000 n=10)
Rows_Next/NeverSample-16                                                        2.0160n ± 0%         0.6087n ± 1%  -69.81% (p=0.000 n=10)
Rows_Next/Default-16                                                            2.0155n ± 1%         0.6089n ± 0%  -69.79% (p=0.000 n=10)
Rows_Next/DefaultWithRowsNextEvent-16                                            26.56n ± 0%          24.58n ± 0%   -7.45% (p=0.000 n=10)
Rows_Close/Default-16                                                            987.1n ± 1%          387.2n ± 1%  -60.77% (p=0.000 n=10)
Rows_Close/NeverSample-16                                                        645.8n ± 1%          148.1n ± 1%  -77.07% (p=0.000 n=10)
NewStmt-16                                                                      10.230n ± 0%          1.248n ± 0%  -87.80% (p=0.000 n=10)
StmtExecContext/Default-16                                                       794.9n ± 1%          469.6n ± 1%  -40.93% (p=0.000 n=10)
StmtExecContext/NeverSample-16                                                   419.7n ± 0%          120.7n ± 1%  -71.25% (p=0.000 n=10)
StmtQueryContext/Default-16                                                     1832.0n ± 1%          879.9n ± 1%  -51.97% (p=0.000 n=10)
StmtQueryContext/NeverSample-16                                                 1100.0n ± 1%          269.6n ± 1%  -75.49% (p=0.000 n=10)
RecordMetric/InstrumentAttributesGetter/5-16                                     416.8n ± 1%
RecordMetric/InstrumentAttributesGetter/10-16                                    1.188µ ± 0%
CreateSpan/AttributesGetter/5-16                                                 484.6n ± 0%
CreateSpan/AttributesGetter/10-16                                                744.1n ± 0%
CreateSpan/Never_Sampling-16                                                     81.39n ± 0%
geomean                                                                          316.6n               105.9n       -63.77%                ¹
¹ benchmark set differs from baseline; geomeans may not be comparable

                                              │ c44ff0aae900c1cef8415f1a7ba37c7d28bd78e7.txt │ aac67109800e63556bde543ace8340b6d7346c4e.txt │
                                              │                     B/op                     │       B/op        vs base                    │
ConnQueryContext/NeverSample-16                                                2098.0 ± 0%           448.0 ± 0%  -78.65% (p=0.000 n=10)
ConnQueryContext/Default-16                                                   3.677Ki ± 0%         1.877Ki ± 0%  -48.95% (p=0.000 n=10)
ConnExecContext/Default-16                                                    1.619Ki ± 0%         1.056Ki ± 0%  -34.80% (p=0.000 n=10)
ConnExecContext/NeverSample-16                                                  761.0 ± 0%           184.0 ± 0%  -75.82% (p=0.000 n=10)
ConnResetSession/Default-16                                                    1530.0 ± 0%           760.0 ± 0%  -50.33% (p=0.000 n=10)
ConnResetSession/NeverSample-16                                                 760.5 ± 0%           184.0 ± 0%  -75.81% (p=0.000 n=10)
ConnBeginTx/Default-16                                                        3.223Ki ± 0%         1.533Ki ± 0%  -52.42% (p=0.000 n=10)
ConnBeginTx/NeverSample-16                                                     1762.0 ± 0%           416.0 ± 0%  -76.39% (p=0.000 n=10)
NewRows-16                                                                      736.0 ± 0%           240.0 ± 0%  -67.39% (p=0.000 n=10)
Rows_Next/NeverSample-16                                                        0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Next/Default-16                                                            0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Next/DefaultWithRowsNextEvent-16                                           0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Close/Default-16                                                          2106.0 ± 0%           841.0 ± 0%  -60.07% (p=0.000 n=10)
Rows_Close/NeverSample-16                                                      1337.0 ± 0%           264.0 ± 0%  -80.25% (p=0.000 n=10)
NewStmt-16                                                                      0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
StmtExecContext/Default-16                                                    1.619Ki ± 0%         1.056Ki ± 0%  -34.80% (p=0.000 n=10)
StmtExecContext/NeverSample-16                                                  761.0 ± 0%           184.0 ± 0%  -75.82% (p=0.000 n=10)
StmtQueryContext/Default-16                                                   3.677Ki ± 0%         1.877Ki ± 0%  -48.95% (p=0.000 n=10)
StmtQueryContext/NeverSample-16                                                2098.0 ± 0%           448.0 ± 0%  -78.65% (p=0.000 n=10)
RecordMetric/InstrumentAttributesGetter/5-16                                    857.0 ± 0%
RecordMetric/InstrumentAttributesGetter/10-16                                 2.401Ki ± 0%
CreateSpan/AttributesGetter/5-16                                              1.281Ki ± 0%
CreateSpan/AttributesGetter/10-16                                             2.031Ki ± 0%
CreateSpan/Never_Sampling-16                                                    160.0 ± 0%
geomean                                                                                    ²                     -57.13%                ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

                                              │ c44ff0aae900c1cef8415f1a7ba37c7d28bd78e7.txt │ aac67109800e63556bde543ace8340b6d7346c4e.txt │
                                              │                  allocs/op                   │    allocs/op      vs base                    │
ConnQueryContext/NeverSample-16                                                15.000 ± 0%           9.000 ± 0%  -40.00% (p=0.000 n=10)
ConnQueryContext/Default-16                                                     19.00 ± 0%           12.00 ± 0%  -36.84% (p=0.000 n=10)
ConnExecContext/Default-16                                                      8.000 ± 0%           6.000 ± 0%  -25.00% (p=0.000 n=10)
ConnExecContext/NeverSample-16                                                  6.000 ± 0%           4.000 ± 0%  -33.33% (p=0.000 n=10)
ConnResetSession/Default-16                                                     8.000 ± 0%           5.000 ± 0%  -37.50% (p=0.000 n=10)
ConnResetSession/NeverSample-16                                                 6.000 ± 0%           4.000 ± 0%  -33.33% (p=0.000 n=10)
ConnBeginTx/Default-16                                                          17.00 ± 0%           11.00 ± 0%  -35.29% (p=0.000 n=10)
ConnBeginTx/NeverSample-16                                                     13.000 ± 0%           9.000 ± 0%  -30.77% (p=0.000 n=10)
NewRows-16                                                                      6.000 ± 0%           4.000 ± 0%  -33.33% (p=0.000 n=10)
Rows_Next/NeverSample-16                                                        0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Next/Default-16                                                            0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Next/DefaultWithRowsNextEvent-16                                           0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
Rows_Close/Default-16                                                          11.000 ± 0%           6.000 ± 0%  -45.45% (p=0.000 n=10)
Rows_Close/NeverSample-16                                                       9.000 ± 0%           5.000 ± 0%  -44.44% (p=0.000 n=10)
NewStmt-16                                                                      0.000 ± 0%           0.000 ± 0%        ~ (p=1.000 n=10) ¹
StmtExecContext/Default-16                                                      8.000 ± 0%           6.000 ± 0%  -25.00% (p=0.000 n=10)
StmtExecContext/NeverSample-16                                                  6.000 ± 0%           4.000 ± 0%  -33.33% (p=0.000 n=10)
StmtQueryContext/Default-16                                                     19.00 ± 0%           12.00 ± 0%  -36.84% (p=0.000 n=10)
StmtQueryContext/NeverSample-16                                                15.000 ± 0%           9.000 ± 0%  -40.00% (p=0.000 n=10)
RecordMetric/InstrumentAttributesGetter/5-16                                    3.000 ± 0%
RecordMetric/InstrumentAttributesGetter/10-16                                   4.000 ± 0%
CreateSpan/AttributesGetter/5-16                                                5.000 ± 0%
CreateSpan/AttributesGetter/10-16                                               5.000 ± 0%
CreateSpan/Never_Sampling-16                                                    3.000 ± 0%
geomean                                                                                    ²                     -29.36%                ³ ²
¹ all samples are equal
² summaries must be >0 to compute geomean
³ benchmark set differs from baseline; geomeans may not be comparable

@boekkooi-impossiblecloud boekkooi-impossiblecloud force-pushed the performance branch 2 times, most recently from 1f23b55 to 49e01ef Compare June 10, 2026 14:19
@boekkooi-impossiblecloud

Copy link
Copy Markdown
Contributor Author

Sadly ci / test-coverage (pull_request) seems broken so it's not passing.

gpg: Signature made Tue Apr 21 19:28:03 2026 UTC
gpg:                using RSA key 27034E7FDB850E0BBC2C62FF806BB28AED779869
gpg: Can't check signature: No public key
==> Could not verify signature. Please contact Codecov if problem continues
    Exiting...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant