You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make reader and writer buffers configurable (#2014)
* Make reader and writer buffers configurable
Replace global sync pools with per-DB pools and make reader and writer buffers configurable.
Default buffer sizes: 1Mb for reader buffer, 64Kb for writer buffer.
Context:
DB connections are pooled, usually there are not much of them available,
so this is a resource used by goroutines, which have to wait for their
turn in order to get a connection and use it before returning it back to
the pool.
Before getting into the waiting line every goroutine allocates a read
and a write buffer from the sync.Pool of buffers.
Currently hardcoded reader buffer size is 1Mb, so when 1000 goroutines
wait in the queue, you get 1000Mb of buffers pre-allocated. So when an
application unexpectedly gets a spike of traffic and all the database
connections are being used, we don't get request timeouts as one could
be expecting, the application is being OOM-killed instead.
The patch addresses this issue by trading some allocations and
(probably, though my benchmarks don't really show it) latency for the
ability to serve more simultaneous connections.
* Fix tests by using properly initialized Conn
0 commit comments