我使用的是Azure-Sql-Server。在那里托管我的数据库并在其上使用Entity-Framework(C#)。我使用Standart S3层。 此定价层限制为200个并发连接到数据库。
我的系统在微服务架构中工作。我的每个服务都与DB有开放连接。
这是我的连接字符串是什么样的
元数据= RES:// /Model1.csdl|res:// /Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider 连接字符串="数据源= mydb.database.windows.net;初始 目录=生产;持久安全信息=真;用户 ID = user @ my; Password = mypass; Pooling = true; Max Pool Size = 2; Enlist = false;"
我不时监控到我的数据库的连接数。
使用
SELECT DB_NAME(eS.database_id) AS the_database, eS.is_user_process, COUNT(eS.session_id) AS total_database_connections
FROM sys.dm_exec_sessions eS
GROUP BY DB_NAME(eS.database_id)
, eS.is_user_process
ORDER BY 1, 2;
END
给了我结果:
如果我对所有连接求和,则得到总共215个连接的结果。这可能与我不时发现的一些连接限制一致。
谢谢!
答案 0 :(得分:2)
您看到的那些会话is_user_process = 0是由Azure监控和警报启动的会话,它们不计入会话层限制的一部分,可以安全地忽略它们。 2017年晚些时候,数据库引擎团队删除了隐藏这些类型的后端会话/连接的过滤器。删除此锁定的原因是,您可以提高对连接到数据库的会话的可见性。有关更多信息,请阅读here Devin Rider(MSFT)在论坛帖子中的贡献。
请仅监控用户数据库的会话数,不要考虑这些后端会话。
SELECT *
FROM sys.dm_exec_sessions s, sys.databases d
WHERE s.database_id =d.database_id
and d.name='youruserdatabase'