簡體   English   中英

數據庫連接池如何影響性能?

[英]how database connection pool impacts performance?

我正在使用.Net 2.0 + SQL Server 2005 Enterprise + VSTS 2008 + C#+ ADO.Net來開發ASP.Net Web應用程序。 ASP.Net Web應用程序以數據庫為中心/驅動。 我想知道在ADO.Net連接字符串設置中打開/關閉線程池設置時是否有任何關於性能差異的性能參考數據? 性能我的意思是可以支持的並發連接和從ADO.Net客戶端執行的特定SQL命令的執行時間?

感謝avvance,喬治

從應用程序到應用程序,性能差異會有很大差異,因此沒有關於您應該期望獲得什么樣的收益的硬數據。

通過對應用程序進行壓力測試來測量它的最佳行動方案,配置有/無需匯集,並了解它的展示方式。

WCAT是一種可用於加載ASP.NET應用程序的壓力工具。

您還可以嘗試使用分析器(其中有很多分析器)來監視您的應用程序,以了解它在壓力下的性能。

一些Profilers: ANTSdotTrace

我手邊沒有任何性能統計數據,但在使用連接池時可能會發出警告:最終可能會出現太多小池,而不是一個大池。

ADO.NET將為其創建一個新的連接池

  • 每個連接字符串; 它對此非常挑剔 - 如果你有兩個連接字符串,即使只是一個空格或其他東西也是不同的,那些被認為是兩個獨立的連接字符串,並將導致創建單獨的連接池

  • 對於每個Windows憑據,如果使用“集成安全性”(可信連接)設置

所以如果你有一個類似的連接字符串

server=MyDBServer;database=MyDatabase;integrated security=SSPI;

將創建一個用於每個可區分用戶的連接池 - 這是相當反直覺的,但這就是它的方式(並且它不能被影響/關閉)。

有關詳細信息,請查看有關ADO.NET連接池的MSDN文檔

首次打開連接時,將根據將池與連接中的連接字符串相關聯的精確匹配算法創建連接池。 每個連接池都與一個不同的連接字符串相關聯。 打開新連接時,如果連接字符串與現有池不完全匹配,則會創建新池。 根據每個進程,每個應用程序域,每個連接字符串以及使用集成 安全性 ,按照Windows 標識匯集連接 連接字符串也必須完全匹配; 為同一連接提供的不同順序的關鍵字將分別匯集在一起​​。

此外,如果您有這兩個連接字符串:

server=MyDBServer;database=MyDatabase;user id=tom;pwd=top$secret

server=MyDBServer;database=MyDatabase;user id=tom; pwd=top$secret;

那些被認為是不同的連接字符串,因此將創建兩個單獨的連接池。

在嘗試測量連接池的效果時,需要注意這一點!

寫一個小的progeam來訪問數據庫。 打開數據庫連接而不關閉它並循環100次。

  1. 監控每次獲取數據所需的時間。
  2. 使用'netstat -a'監控服務器端連接
  3. 有/無合並

你說'線程池',但顯然是在談論你的標題顯示的連接池。

創建新數據庫連接存在性能開銷。 這是一個資源密集型操作,這就是我們擁有ADO.NET連接池的原因。 有效連接不會關閉,而只是返回到它們保持活動狀態的池中,並且可以由相同代碼庫的其他部分(在AppDomain內)重用。

一個ADO.NET應用程序池是創建PER唯一連接字符串,因此值得注意的是,當您使用集成安全性時,您將失去連接池的好處,因為每個DB身份驗證用戶將有效地擁有一個連接池。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM