SQL连接池和审核登录/注销

时间:2008-11-10 22:27:13

标签: sql-server

当我使用SQL Server Profiler配置我的应用程序时,我看到很多审核登录审核注销消息,用于连接到同一个数据库。我想知道,这是否表明我的连接池存在问题?我问的原因是因为我在MSDN文档中找到了关于连接池的信息:

  

登录和退出事件不会   在连接时在服务器上引发   从...获取或返回   连接池。这是因为   连接实际上并没有关闭   它将返回到连接池。   有关更多信息,请参阅审核登录   事件类和审核注销事件   SQL Server联机丛书中的类。

http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

此外,是否有人有任何提示来确定给定SQL服务器的连接池的有效性?我在一台服务器上有很多数据库,我知道这会产生巨大的影响,但我想知道是否有一种简单的方法可以获得有关连接池效率的指标。提前谢谢!

2 个答案:

答案 0 :(得分:34)

虽然MSDN文章说只会针对非重用连接引发该事件,但SQL Server文档与此声明相矛盾:

  

“审核登录事件类指示用户已成功登录到Microsoft SQL Server。此类中的事件由新连接或从连接池重用的连接触发。”

衡量合并效率的最佳方法是收集连接和不连接所花费的时间。使用池时,您应该看到第一个连接速度很慢,后续连接非常快。没有合并,每个连接都会花费很多时间。

如果要跟踪审核登录事件,可以使用EventSubClass数据列来确定登录是使用重用连接还是新连接。对于实际连接,该值为1,对于来自pool.application的重用连接,该值为2。

答案 1 :(得分:14)

请记住,每个连接字符串都会连接到连接。如果您有许多数据库并使用许多连接字符串进行连接,则当没有正确的连接字符串时,您的应用程序将创建新连接。然后它将汇集该连接,如果池已满,则会阻塞现有连接。默认的Max Pool Size是100个连接,因此如果您经常在100多个数据库中弹跳,则会一直关闭并打开连接。

这并不理想,但您可以通过始终连接到单个数据库(一个连接字符串)然后切换数据库上下文'USE [DBName]'来解决问题。有缺点:

  • 您无法为每个连接字符串指定用户/传递(您的应用用户需要所有数据库的权限)。
  • 您的SQL变得更加复杂(特别是如果您使用的是开箱即​​用的ORM或存储过程)。

如果您的数据库数量不是很大,您可以尝试增加最大池大小。否则,如果某些数据库经常使用而其他数据库不经常使用,则可以在不常用的数据库上关闭池。这两个项目都是通过connectionstring配置的。

就指标而言,监控SQL Server上的登录和注销事件是一个良好的开端。如果你的应用程序很好地汇集,你不应该看到很多。

相关问题