Sql Server 連接池及其用法
- 2019 年 10 月 7 日
- 筆記
其實我們一直在使用SqlServer的連接池。在連接字符串中,Pooling為是否啟用連接池,默認值為true,表示啟用。
與連接池相關的兩個重要參數是 Min Pool Size和 Max Pool Size ,分別是池中的最小連接數和池中的最大連接數,默認值分別是0和100。
在我們創建一個連接的實例,並調用Open()方法時,連接池管理程序會在連接池中找到一個可用的連接;當調用Close()方法時,連接池管理程序又將連接返回到連接池中,以供下一次調用Open()方法時使用。
另外,連接字符串中的 Connection Lifetime 為連接池中的連接設置了生命周期。它的默認值為0。當連接被返回到池時,將其創建時間與當前時間作比較,如果時間長度(以秒為單位)超出了由 Connection Lifetime 指定的值,該連接就會被銷毀。 這在聚集配置中很有用(用於強制執行運行中的服務器和剛置於聯機狀態的服務器之間的負載平衡)。零(0)值將使連接池具有最大的連接超時。
通過上面的了解,我們可以看出,即使是最簡單的連接字符串,也在使用連接池。
———————————————————————————————-
ps. 連接字符串關鍵字的意義:
關鍵字 |
默認值 |
說明 |
---|---|---|
Application Name |
不可用 |
應用程序的名稱,或者「.Net SqlClient Data Provider」(如果不提供應用程序名稱)。 |
Async |
'false' |
如果設置為 true,則啟用異步操作支持。 可識別的值為 true、 false、 yes 和 no。 |
AttachDBFilename – 或 – extended properties – 或 – Initial File Name |
不可用 |
主數據庫文件的名稱,包括可連接數據庫的完整路徑名。只有具有 .mdf 擴展名的主數據文件才支持 AttachDBFilename。 如果主數據文件為只讀,則附加操作將失敗。 該路經可以是絕對路徑,也可以是相對路徑,這取決於是否使用 DataDirectory 替換字符串。如果使用 DataDirectory,則對應的數據庫文件必須存在於替換字符串指向的目錄的子目錄中。 說明 遠程服務器、HTTP 及 UNC 路徑名不受支持。 必須按照如下方式使用關鍵字「database」(或其別名之一)指定數據庫名稱: "AttachDbFileName=|DataDirectory|dataYourDB.mdf;integrated security=true;database=YourDatabase" 如果數據文件所在的目錄中存在日誌文件,並且在附加主數據文件時使用了「database」關鍵字,則會生成錯誤。這種情況下,請移除日誌文件。附加了數據庫後,系統將根據物理路徑自動生成一個新的日誌文件。 |
Connect Timeout – 或 – Connection Timeout |
15 |
在終止嘗試併產生錯誤之前,等待與服務器的連接的時間長度(以秒為單位)。 |
Context Connection |
'false' |
如果應對 SQL Server 進行進程內連接,則為 true。 |
Current Language |
不可用 |
SQL Server 語言記錄名稱。 |
數據源 – 或 – 服務器 – 或 – 地址 – 或 – Addr – 或 – Network Address |
不可用 |
要連接的 SQL Server 實例的名稱或網絡地址。可以在服務器名稱之後指定端口號: server=tcp:servername, portnumber 指定本地實例時,始終使用 (local)。若要強制使用某個協議,請添加下列前綴之一: np:(local), tcp:(local), lpc:(local) 說明 ADO.NET 2.0 不支持在 SQL Server 2000 或更低版本的共享內存上執行異步命令。但是,可以強制用 TCP 代替共享內存,方法是:向連接字符串中的服務器名稱添加「tcp:」前綴,或者使用「本地主機」。 |
Encrypt |
'false' |
當該值為 true 時,如果服務器端安裝了證書,則 SQL Server 將對所有在客戶端和服務器之間傳送的數據使用 SSL 加密。 可識別的值為 true、 false、 yes 和 no。 |
Enlist |
'true' |
true 表明 SQL Server 連接池程序在創建線程的當前事務上下文中自動登記連接。 |
Failover Partner |
不可用 |
在其中配置數據庫鏡像的故障轉移合作夥伴服務器的名稱。 .NET Framework 1.0 或 1.1 版不支持 Failover Partner 關鍵字。 |
Initial Catalog – 或 – 數據庫 |
不可用 |
數據庫的名稱。 |
Integrated Security – 或 – Trusted_Connection |
'false' |
當為 false 時,將在連接中指定用戶 ID 和密碼。 當為 true 時,將使用當前的 Windows 帳戶憑據進行身份驗證。 可識別的值為 true、 false、 yes、 no 以及與 true 等效的 sspi(強烈推薦)。 如果指定了用戶 ID 和密碼,且集成安全性設置為 true,則用戶 ID 和密碼將被忽略,並使用集成安全性。 |
MultipleActiveResultSets |
'false' |
如果為 true,則應用程序可以維護多活動結果集 (MARS)。 如果為 false,則應用程序必須在執行該連接上的任何其他批處理之前處理或取消一個批處理中的多個結果集。 可識別的值為 true 和 false。 .NET Framework 1.0 或 1.1 版不支持該關鍵字。 |
Network Library – 或 – Net |
'dbmssocn' |
用於建立與 SQL Server 實例的連接的網絡庫。支持的值包括: dbnmpntw(命名管道) dbmsrpcn(多協議,Windows RPC) dbmsadsn (Apple Talk) dbmsgnet (VIA) dbmslpcn(共享內存) dbmsspxn (IPX/SPX) dbmssocn (TCP/IP) Dbmsvinn (Banyan Vines) 相應的網絡 DLL 必須安裝在要連接的系統上。如果您不指定網絡,且使用本地服務器(例如「.」或 "(本地)"),使用共享內存。在此示例中,網絡庫為 Win32 Winsock TCP/IP (dbmssocn),使用的端口為 1433。 以帶有顏色區分的格式查看複製到剪貼板打印 Network Library=dbmssocn;Data Source=000.000.000.000,1433; Network Library=dbmssocn;Data Source=000.000.000.000,1433; |
Packet Size |
8192 |
用來與 SQL Server 的實例進行通信的網絡數據包的大小,以位元組為單位。 |
Password – 或 – Pwd |
不可用 |
SQL Server 帳戶登錄的密碼。建議不要使用。為保持高安全級別,我們強烈建議您使用 Integrated Security 或 Trusted_Connection 關鍵字。 |
Persist Security Info |
'false' |
當該值設置為 false 或 no(強烈推薦)時,如果連接是打開的或者一直處於打開狀態,那麼安全敏感信息(如密碼)將不會作為連接的一部分返回。 重置連接字符串將重置包括密碼在內的所有連接字符串值。可識別的值為 true、 false、 yes 和 no。 |
計劃 |
不可用 |
指定連接計劃。如果以下項也在連接字符串中指定,則將引發 ArgumentException:failover partner、AttachDbFileName、UserInstance=true 或 contextConnection=true。 |
複製 |
'false' |
如果使用連接來支持複製,則為 true。 |
Transaction Binding |
Implicit Unbind |
控制與登記的 System.Transactions 事務關聯的連接。 可能的值包括: Transaction Binding=Implicit Unbind; Transaction Binding=Explicit Unbind; Implicit Unbind 可使連接在事務結束時從事務中分離。分離後,連接上的其他請求將以自動提交模式執行。在事務處於活動狀態的情況下執行請求時,不會檢查 System.Transactions.Transaction.Current 屬性。 事務結束後,其他請求將以自動提交模式執行。 Explicit Unbind 可使連接保持連接到事務,直到連接關閉或調用顯式 SqlConnection.TransactionEnlist(null)。 如果 Transaction.Current 不是登記的事務或登記的事務未處於活動狀態,則引發 InvalidOperationException。 |
TrustServerCertificate |
'false' |
如果設置為 true,則使用 SSL 對通道進行加密,但不通過證書鏈對可信度進行驗證。 如果將 TrustServerCertificate 設置為 true 並將 Encrypt 設置為 false,則不對通道進行加密。 可識別的值為 true、 false、 yes 和 no。 有關更多信息,請參見 連接字符串語法 (ADO.NET)。 |
Type System Version |
不可用 |
指示應用程序期望的類型系統的字符串值。可能的值包括: Type System Version=SQL Server 2000; Type System Version=SQL Server 2005; Type System Version=SQL Server 2008; Type System Version=Latest; 如果設置為 SQL Server 2000,將使用 SQL Server 2000 類型系統。 與 SQL Server 2005 實例連接時,執行下列轉換: XML to NTEXT UDT to VARBINARY VARCHAR(MAX)、NVARCHAR(MAX) 和 VARBINARY(MAX) 分別與 TEXT、NEXT 和 IMAGE。 如果設置為 SQL Server 2005,將使用 SQL Server 2005 類型系統。 對 ADO.NET 的當前版本不進行任何轉換。 如果設置為 Latest,將使用此客戶端-服務器對無法處理的最新版本。 這個最新版本將隨着客戶端和服務器組件的升級自動更新。 |
用戶 ID |
不可用 |
SQL Server 登錄帳戶。建議不要使用。為保持高安全級別,我們強烈建議您使用 Integrated Security 或 Trusted_Connection 關鍵字。 |
User Instance |
'false' |
一個值,用於指示是否將連接從默認的 SQL Server Express 實例重定向到調用方帳戶下運行的運行時啟動的實例。 |
Workstation ID |
本地計算機名稱 |
連接到 SQL Server 的工作站的名稱。 |
下表列出了 ConnectionString 內連接池值的有效名稱。 有關更多信息,請參見 SQL Server 連接池 (ADO.NET)。
關鍵字 |
默認值 |
說明 |
---|---|---|
Connection Lifetime |
0 |
當連接被返回到池時,將其創建時間與當前時間作比較,如果時間長度(以秒為單位)超出了由 Connection Lifetime 指定的值,該連接就會被銷毀。 這在聚集配置中很有用(用於強制執行運行中的服務器和剛置於聯機狀態的服務器之間的負載平衡)。 零 (0) 值將使池連接具有最大的連接超時。 |
Enlist |
'true' |
當該值為 true 時,池程序在創建線程的當前事務上下文中自動登記連接。 可識別的值為 true、 false、 yes 和 no。 |
Load Balance Timeout |
0 |
連接被銷毀前在連接池中生存的最短時間(以秒為單位)。 |
Max Pool Size |
100 |
池中允許的最大連接數。 |
Min Pool Size |
0 |
池中允許的最小連接數。 |
Pooling |
'true' |
當該值為 true 時,系統將從適當的池中提取 SQLConnection 對象,或在需要時創建該對象並將其添加到適當的池中。 可識別的值為 true、 false、 yes 和 no。 |
當設置需要布爾值的關鍵字或連接池值時,您可以使用「yes」代替「true」,用「no」代替「false」。整數值表示為字符串。