-
Notifications
You must be signed in to change notification settings - Fork 451
POC: Improve JDBC driver performance using ByteBufferManager for TDS packet handling #2671
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
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2671 +/- ##
============================================
+ Coverage 51.62% 51.87% +0.24%
- Complexity 4006 4045 +39
============================================
Files 147 149 +2
Lines 33804 33836 +32
Branches 5652 5654 +2
============================================
+ Hits 17453 17553 +100
+ Misses 13888 13811 -77
- Partials 2463 2472 +9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
| public void release(byte[] buffer) { | ||
| if (buffer.length == bufferSize) { | ||
| pool.offer(buffer); | ||
| Arrays.fill(buffer, (byte) 0); // Clear the array for re-use |
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.
You need to clear the buffer first, then put it pool. You lose ownership once added to pool and another thread might take the buffer, you can't touch it any more.
This POC introduces a ByteBufferManager and BufferPool in the JDBC driver to optimize memory usage during TDS packet processing.
Test Results – CRD App
JDBC Driver | Avg. Heap Usage | Execution Time (ms)Dataset: 100 Million Records · 601 Columns
Metric Comparison: Average Heap Usage & Execution Time
mssql-jdbc (Before Optimization) | 311.34 MB | 5,017,218
mssql-jdbc (After Optimization) | 309.11 MB | 4,944,792
jTDS | 374.64 MB | 3,499,575