A single agent turn can issue a dozen tool calls. A hundred concurrent users with three agents each turns that into thousands of simultaneous requests to the same database or API. The database does not see "one agent"; it sees a client fleet that arrived without a capacity plan.
Connection pool exhaustion has a signature that is easy to misread. Latency climbs while CPU and memory stay flat, requests queue for a connection instead of doing work, and then timeouts cascade according to Radview's breakdown of pool exhaustion symptoms. That is exactly the shape an agent workload produces when it fans out indiscriminately.
There are two limits in play, and either can break first: the application pool size and the database's own maximum connection count as Webalert explains in its diagnosis guide. An agent framework with a generous internal worker pool can exhaust the database limit even when each instance "looks reasonable," because pool size multiplied by instance count is what actually lands on the server.
The deeper point is circulation, not capacity. A pool with many connections where each request takes 100 ms is more exhausted than a smaller pool where requests return in 10 ms per this writeup on connection pool exhaustion. Agents make this worse because they hold resources across slow steps. If a tool call checks out a connection and then waits on a model response, the connection is parked for the whole model latency, not the query latency.



