我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net來開發ASP.Net Web應用程序。 ASP.Net Web應用程序以數據庫爲中心/驅動。我想知道在ADO.Net連接字符串設置中打開/關閉線程池設置時是否有任何關於性能差異的性能參考數據?性能我是指可以支持的併發連接和從ADO.Net客戶端執行的特定SQL命令的執行時間?數據庫連接池如何影響性能?
感謝avdance, 喬治
我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net來開發ASP.Net Web應用程序。 ASP.Net Web應用程序以數據庫爲中心/驅動。我想知道在ADO.Net連接字符串設置中打開/關閉線程池設置時是否有任何關於性能差異的性能參考數據?性能我是指可以支持的併發連接和從ADO.Net客戶端執行的特定SQL命令的執行時間?數據庫連接池如何影響性能?
感謝avdance, 喬治
我沒有在任何一方面表現統計,但也許提醒一句:你可能會導致太多的小池,而不是一個大池。
ADO.NET將創建一個新的連接池
每個連接字符串;它是對此非常挑剔,太 - 如果你有兩個連接字符串是由哪怕只是一個單一的空間或不同的東西,那些被認爲是兩個獨立的連接字符串,並會導致單獨的連接池創建
每個Windows憑據如果使用的是「集成安全」(受信任的連接)設置
所以,如果你有一個連接字符串像
server=MyDBServer;database=MyDatabase;integrated security=SSPI;
將爲每個可區分用戶創建一個連接池 - 這相當違反直覺,但這就是它的方式(並且不能影響/關閉)。
查看ADO上的MSDN docs。有關詳細信息,NET連接池:
當連接第一次打開時,基於一個 精確匹配算法創建 連接池 同夥與在連接 連接字符串池。 每個連接池都與一個獨特的連接字符串關聯, 。 當打開一個新連接時,如果連接字符串 與現有池不匹配,則會創建一個新池 。集成當 安全使用,每視窗 身份連接每 工藝彙集,每個應用程序域,每個 連接字符串和。連接字符串也必須是 完全匹配;提供的關鍵字 以不同順序連接的 連接將單獨彙集。
另外,如果你有這兩個連接字符串:
server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret
和
server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;
那些被認爲不同連接字符串,因此兩個單獨的連接池將被創建。
當試圖測量連接池的影響時,這是要注意的事情!
馬克
寫一個小progeam訪問數據庫。打開數據庫連接而不關閉它並循環100次。
你能更詳細地描述爲什麼我們需要第2步,並且你想要第2步來證明什麼? – George2 2009-10-30 04:41:03
步驟2用於監視您需要在服務器端訪問數據庫的連接數量。我的經驗是,如果你有共享池,2或3個連接就足夠了,但如果你不這樣做,你可能會有很多併發用戶。 – 2009-10-30 13:15:04
你說「線程池」,但顯然是在談論連接池爲您的標題所示。
創建新的數據庫連接存在性能開銷。這是一個資源密集型操作,這就是爲什麼我們有ADO.NET連接池。有效的連接沒有關閉,但僅僅返回到它們保持活動的池中,並且可以被同一代碼庫的其他部分(AppDomain內部)重用。
一個ADO.NET應用程序池是在每個唯一連接字符串中創建的,因此值得注意的是,當您使用集成安全性時,您將失去連接池的好處,因爲每個DB驗證用戶將實際有一個連接池。
感謝你的建議,馬克! – George2 2009-10-30 04:53:13