分享一张SQLSERVER执行流程的图片
有天论坛里有人问,一时间并发连接很多,是不是可以在SSMS里配置连接池
连接池是属于客户端的,配置只能在连接字符串里配置,修改你的连接字符串,SSMS没有一个界面可以配置连接池的
可能系统中很多进程,每个进程都使用他们各自的连接池,这些连接池是进程之间不能共享的,也就是说每个进程的都有他们各自独立的连接池,
如果A连接池的连接数是22767,那么B连接池就算你在连接字符串里设置max pool size=32767,也只能使用10000个连接
估计SniConnectionId就是标识每个进程的连接池ID的
大家可以看一下这篇文章,关于连接池的
从SQLSERVER2008开始使用Ring Buffer技术,当使用TCP协议进行连接时,可以获得更多的相关信息-例如,本地IP地址,端口,以及远程IP地址和端口,从而允许你唯一的确定客户机及其应用。另外,Ring Buffer包括了一个时间戳以及与之相对应的SPID(如果有的话),这样才能形成一个完整的对应关系。(因为随着时间的推移SPID会被不同的连接所重用)。 我们同样可以看到客户发的TDS包中有多少bytes,并且可以知道是否在TDS中有任何的错误:
<TdsInputBufferError>0</TdsInputBufferError>
<TdsOutputBufferError>0</TdsOutputBufferError>
<TdsInputBufferBytes>60</TdsInputBufferBytes>
最相关的,最易于分析的信息记录在TdsDisconnectFlags中,有一系列的值,记录了关闭连接的状态。这里,我们看到没有发现错误,但是这里记录了这也不是一个正常的断开或者一个正常的登出。从如下的flag中,这个session是被杀死的:
<SessionIsKilled>1</SessionIsKilled>
上面ring buffer文章的链接:
利用Ring Buffer在SQL Server 2008中进行连接故障排除
还有关于SNI,看下面的SniConnectionId
<Record id="2" type="RING_BUFFER_CONNECTIVITY" time="110448275">
<ConnectivityTraceRecord>
<RecordType>ConnectionClose</RecordType>
<RecordSource>Tds</RecordSource>
<Spid>55</Spid>
<SniConnectionId>B7882F3C-3BA9-45A7-8D23-3C5C05F9BDF9</SniConnectionId>
<SniProvider>4</SniProvider>
<RemoteHost><local machine></RemoteHost>
<RemotePort>0</RemotePort>
--------------------------------------------------------------------------------------
2013-9-16补充:
地址:http://kb.cnblogs.com/page/188200/
关于TDS协议:
如果有不对的地方,欢迎大家拍砖o(∩_∩)o