文章出處

分享一張SQLSERVER執行流程的圖片

 

有天論壇里有人問,一時間并發連接很多,是不是可以在SSMS里配置連接池

連接池是屬于客戶端的,配置只能在連接字符串里配置,修改你的連接字符串,SSMS沒有一個界面可以配置連接池的

可能系統中很多進程,每個進程都使用他們各自的連接池,這些連接池是進程之間不能共享的,也就是說每個進程的都有他們各自獨立的連接池,

如果A連接池的連接數是22767,那么B連接池就算你在連接字符串里設置max pool size=32767,也只能使用10000個連接

估計SniConnectionId就是標識每個進程的連接池ID的

大家可以看一下這篇文章,關于連接池的

非常老的話題 SQLSERVER連接池

SQLSERVER連接池內部機制

 

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

1 <Record id="2" type="RING_BUFFER_CONNECTIVITY" time="110448275">
2 <ConnectivityTraceRecord>
3 <RecordType>ConnectionClose</RecordType>
4 <RecordSource>Tds</RecordSource>
5 <Spid>55</Spid>
6 <SniConnectionId>B7882F3C-3BA9-45A7-8D23-3C5C05F9BDF9</SniConnectionId>
7 <SniProvider>4</SniProvider>
8 <RemoteHost>&lt;local machine&gt;</RemoteHost>
9 <RemotePort>0</RemotePort>

 

--------------------------------------------------------------------------------------

2013-9-16補充:

地址:http://kb.cnblogs.com/page/188200/

 

關于TDS協議:

表格數據流協議TDS
TDS協議解析(轉載)

 

如果有不對的地方,歡迎大家拍磚o(∩_∩)o


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()