当我使用SQL Server Profiler配置我的应用程序时,我看到许多用于连接到同一数据库的审核登录和审核注销消息.我想知道,这是否表明我的连接池存在问题?我问的原因是因为我在MSDN文档中找到了关于连接池的内容:
从连接池获取连接或返回连接池时,不会在服务器上引发登录和注销事件.这是因为连接在返回连接池时实际上并未关闭.有关详细信息,请参阅SQL Server联机丛书中的审核登录事件类和审核注销事件类.
http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx
此外,是否有人有任何提示来确定给定SQL服务器的连接池的有效性?我在一台服务器上有很多数据库,我知道这会产生巨大的影响,但我想知道是否有一种简单的方法可以获得有关我的连接池效果的指标.提前致谢!
小智 35
虽然MSDN文章说只会针对非重用连接引发该事件,但SQL Server文档与此声明相矛盾:
"审核登录事件类指示用户已成功登录到Microsoft SQL Server.此类中的事件由新连接或从连接池重用的连接触发."
衡量汇总效率的最佳方法是收集连接和不连接所花费的时间.使用池时,您应该看到第一个连接速度很慢,后续连接非常快.没有合并,每个连接都会花费很多时间.
如果要跟踪审核登录事件,可以使用EventSubClass数据列来确定登录是使用重用连接还是新连接.对于实际连接,该值为1,对于来自pool.application的重用连接,该值为2.
Cor*_*rch 14
请记住,每个连接字符串都会连接到连接.如果您有许多数据库并使用许多连接字符串进行连接,则当没有正确的连接字符串时,您的应用程序将创建新连接.然后它将汇集该连接,如果池已满,则会阻塞现有连接.默认的最大池大小是100个连接,因此如果您经常跳过100多个数据库,您将一直关闭并打开连接.
它并不理想,但您可以通过始终连接到单个数据库(一个连接字符串)然后切换数据库上下文'USE [DBName]'来解决问题.有缺点:
如果您的数据库数量不是很大,您可以尝试增加最大池大小.否则,如果某些数据库经常使用而其他数据库不经常使用,则可以在不常用的数据库上关闭池.这两个项都是通过connectionstring配置的.
就指标而言,监控SQL Server上的登录和注销事件是一个良好的开端.如果你的应用程序很好地汇集,你不应该看到很多.