《SqlServer性能分析一》
?
最近,碰到Ado.net連接Sql Server2005數(shù)據(jù)庫(kù),報(bào)超出連接池最大容量的錯(cuò)誤。
這個(gè)問(wèn)題確實(shí)碰到不多,也沒(méi)想過(guò)。
對(duì)這個(gè)概念,以前總是模模糊糊,知道Sql Server2005數(shù)據(jù)庫(kù)有連接池這么個(gè)概念。
就這個(gè)問(wèn)題,在網(wǎng)上也看了很多相關(guān)的網(wǎng)頁(yè),有來(lái)自www.cnblogs.com,有來(lái)自www.msdn.net和www.csdn.net。
總結(jié)了一下這些地方提供的經(jīng)驗(yàn),包括以下幾點(diǎn)解決辦法。
1,查看代碼中是否有未close的connection。
2,擴(kuò)大連接池的Min Pool Size 和Max Pool Size。
3,關(guān)閉連接池這個(gè)功能,即Pooling = false。
雖然有這么些建議,還是自己來(lái)測(cè)試一下最踏實(shí)。
首先連接池這個(gè)功能還是不錯(cuò)的,雖然會(huì)有一些系統(tǒng)開銷,
但對(duì)于大訪問(wèn)量來(lái)說(shuō),提供連接池的功能可以大大減少connection的創(chuàng)建次數(shù),
這樣最后還是降低了系統(tǒng)的開銷,這樣先排除解決辦法3。
經(jīng)過(guò)幾個(gè)分別為1萬(wàn)次循環(huán)的連接測(cè)試,
分別是:
t1,Min Pool Siz和Max Pool Size默認(rèn)。 每次open connection ,然后不close()
t2,Min Pool Siz和Max Pool Size默認(rèn)。 每次open connection ,然后close()
t3,Min Pool Siz =1000,Max Pool Size =2000 ,每次open connection ,然后不close()
t4,Min Pool Siz =1000,Max Pool Size =2000 ,每次open connection ,然后close()
t1,很快報(bào)錯(cuò)“超出連接池最大容量”
t2,正常運(yùn)行
t3,報(bào)錯(cuò)“超出連接池最大容量”,比t1報(bào)錯(cuò)時(shí)間晚
t4,正常運(yùn)行
這里t2和t4能正常運(yùn)行,當(dāng)然這兩個(gè)測(cè)試結(jié)果也會(huì)有略微不同,
這里先不討論哪個(gè)更好的話題,暫且討論哪個(gè)好與哪個(gè)不好。
t1和t3沒(méi)有正常運(yùn)行完。
這里可以說(shuō)明connection 沒(méi)有close造成了運(yùn)行失敗的。
連接池的數(shù)量從哪看?這個(gè)我們可以使用SqlServer2005系統(tǒng)表sysprocesses 。
用select * from sysprocesses where dbid= db_id('數(shù)據(jù)庫(kù)名') 來(lái)查看連接的進(jìn)程數(shù)量,也就是連接池?cái)?shù)。
有些可以手動(dòng)kill一些連接。
下面系統(tǒng)介紹一下 《SQL Server 連接池 (ADO.NET)》
引用[
.NET Framework 開發(fā)人員指南
SQL Server 連接池 (ADO.NET)
更新:November 2007
連接到數(shù)據(jù)庫(kù)服務(wù)器通常由幾個(gè)需要很長(zhǎng)時(shí)間的步驟組成。
必須建立物理通道(例如套接字或命名管道),必須與服務(wù)器進(jìn)行初次握手,必須分析連接字符串信息,
必須由服務(wù)器對(duì)連接進(jìn)行身份驗(yàn)證,必須運(yùn)行檢查以便在當(dāng)前事務(wù)中登記,等等。
實(shí)際上,大多數(shù)應(yīng)用程序僅使用一個(gè)或幾個(gè)不同的連接配置。
這意味著在執(zhí)行應(yīng)用程序期間,許多相同的連接將反復(fù)地打開和關(guān)閉。
為了使打開連接花費(fèi)的系統(tǒng)開銷最小,ADO.NET 使用稱為連接池的優(yōu)化方法。
連接池使新連接必須打開的次數(shù)得以減少。池進(jìn)程保持物理連接的所有權(quán)。
通過(guò)為每個(gè)給定的連接配置保留一組活動(dòng)連接來(lái)管理連接。每當(dāng)用戶在連接上調(diào)用 Open 時(shí),池進(jìn)程就會(huì)查找池中可用的連接。
如果某個(gè)池連接可用,會(huì)將該連接返回給調(diào)用者,而不是打開新連接。
應(yīng)用程序在該連接上調(diào)用 Close 時(shí),池進(jìn)程會(huì)將連接返回到活動(dòng)連接池集中,而不是關(guān)閉連接。
連接返回到池中之后,即可在下一個(gè) Open 調(diào)用中重復(fù)使用。
只有配置相同的連接可以建立池連接。ADO.NET 同時(shí)保留多個(gè)池,每種配置各一個(gè)。
在使用集成的安全性時(shí),連接按照連接字符串以及 Windows 標(biāo)識(shí)分到多個(gè)池中。
還根據(jù)連接是否已在事務(wù)中登記來(lái)建立池連接。
池連接可以顯著提高應(yīng)用程序的性能和可縮放性。
默認(rèn)情況下,在 ADO.NET 中啟用連接池。除非顯式禁用,否則,在應(yīng)用程序中打開和關(guān)閉連接時(shí),池進(jìn)程會(huì)對(duì)連接進(jìn)行優(yōu)化。
還可以提供幾個(gè)連接字符串修飾符來(lái)控制連接池的行為。有關(guān)更多信息,請(qǐng)參見本主題后面的“使用連接字符串關(guān)鍵字控制連接池”。]
我這里簡(jiǎn)單的描述了一下這個(gè)論題,
詳細(xì)內(nèi)容,參考:
http://msdn.microsoft.com/zh-cn/library/8xx3tyca.aspx
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
?首次放首頁(yè),質(zhì)量欠佳,請(qǐng)海涵。
?
轉(zhuǎn)載于:https://www.cnblogs.com/laiwei85/archive/2009/02/16/1392086.html
總結(jié)
以上是生活随笔為你收集整理的《SqlServer性能分析一》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c#常用函数和方法集
- 下一篇: 强人总结的哄老婆秘籍