-
Notifications
You must be signed in to change notification settings - Fork 314
Description
The repo https://github.com/aspnet/DataAccessPerformance can be used to get a measurement of the throughput of an ADO.Net client.
When the benchmark is run with Connection Pool enabled, and connections are opened and closed every time a query is performed, I see a TPS number of 40k for async and 50k for sync data retrieval.
I changed the benchmark to reuse the same connection per thread and this causes the TPS to jump to 65 k and 90k for async and sync scenarios, respectively.
By changing how the connection is opened, I eliminated the connection pool from the benchmark, as the same connection is reused for the data operations. My modifications are at https://github.com/saurabh500/DataAccessPerformance/blob/modVariation/src/BenchmarkDb/AdoDriver.cs#L106
This means that there could be a potential to improve the performance of the connection pool in SqlClient ADO.Net Driver to manage connection faster.
It could be suffering from one of the following problems based on my understanding of the connection pool. I have not profiled this piece yet.
- There are problems with fetching the connection in the connection pool causing the slow down.
- There are problems while returning the connection to the connection pool causing the slow down.
- When a connection is returned to the pool, sp_connection_reset is issued to the server and some other network operations to clean the connection, which happen. I don’t know how much of an overhead this would be, though I anticipate that there are some.
I am opening this issue to see if any performance improvement can be made to SqlClient connection pool to have a better throughput in providing connections.
If it is 1 or 2 plaguing the driver then there could be client side improvements that can be made, if it is 3, then that would be much harder as there could be protocol changes needed.
Connection pool should be profiled to find any other optimization opportunities, if any.