Active Azure Sql Connections are over the connection pool limit

后端 未结 3 650
青春惊慌失措
青春惊慌失措 2021-02-13 22:35

We fight the issue in production when once in a while our Azure SQL database performance significantly degrades. We know we have locks on one of the tables, but these locks are

3条回答
  •  说谎
    说谎 (楼主)
    2021-02-13 23:27

    [this is more of a long comment than an answer]

    I do have several hosts connected to the same database but each host has the same limitation of 200 connections

    The connection pool is per (Connection String,AppDomain). Each Server might have multiple AppDomains. And each AppDomain will have one connection pool per connection string. So here if you have different user/password combos, they will generate different connection pools. So no real mystery why it is possible to have more than 200 connections.

    So why are you getting lots of connections? Possible causes:

    Connection Leaks.

    If you are failing to Dispose a DbContext or a SqlConnection that connection will linger on the managed heap until finalized, and not be available for reuse. When a connection pool reaches its limit, new connection request will wait for 30sec for a connection to become available, and fail after that.

    You will not see any waits or blocking on the server in this scenario. The sessions will all be idle, not waiting. And there would not be a large number of requests in

    select *
    from sys.dm_exec_requests 
    

    Note that Session Wait Stats are now live on Azure SQL DB, so it's much easier to see realtime blocking and waits.

    select *
    from sys.dm_exec_session_wait_stats
    

    Blocking.

    If incoming requests begin to be blocked by some transaction, and new requests keep starting, your number of sessions can grow, as new requests get new sessions, start requests and become blocked. Here you would see lots of blocked requests in

    select *
    from sys.dm_exec_requests
    

    Slow Queries.

    If requests were just talking a long time to finish due to resourse availability (CPU, Disk, Log), you could see this. But that's unlikely as your DTU usage is low during this time.

    So the next step for you is to see if these connections are active on the server suggesting blocking, or idle on the server suggesting a connection pool problem.

提交回复
热议问题