驅動程式感知連線池是 Windows 8 驅動程式管理員的一項新功能。 驅動程式感知連線池允許驅動程式撰寫者在 ODBC 驅動程式中自訂連線池行為。
備註
游標庫不支援驅動程式感知連線池。 若應用程式在啟用了驅動程式感知的連線池時,嘗試透過 SQLSetConnectAttr 啟用游標庫,則會收到錯誤訊息。
驅動程式感知連線池解決了以下與驅動程式管理器連線池相關的問題:
池碎片化 驅動管理員只有在連線池與新連線請求的連線字串完全吻合時,才會回傳連線。 驅動程式管理器要求完全匹配的原因之一是,驅動程式管理員無法理解每個驅動程式特定的連接字串關鍵字及其值。 然而,某些連線字串關鍵字值(例如資料庫名稱)可能不需要完全匹配,因為驅動程式能在開啟新連線所需的時間內更改資料庫(確切時間差取決於資料來源)。 而且,某些連接屬性(如 SQL_ATTR_CURRENT_CATALOG)上的差異變更可能需要比其他屬性(如 SQL_ATTR_LOGIN_TIMEOUT)更長的時間。 這也可能阻止驅動管理員使用池中成本最低且可重複使用的連線。 當驅動程式必須建立許多新連線時,應用程式的效能可能會下降,資料來源的可擴展性也會降低。 透過驅動程式感知的連線池策略,可以減少池區碎片化,因為驅動程式能更精確地估算池中連線重複使用於連線請求的成本。
沒有考慮申請偏好 有些資料來源能有效率地開啟新連線(相較於重置某些屬性),因此應用程式可能偏好開啟新連線,而非嘗試重用池中稍有不匹配的連線並重置某些值(雖然在連線池初始化短語中這可能會較慢)。 但有些應用程式可能會降低伺服器負載並開啟較少連線,儘管修復不匹配以取得正確行為的成本可能較高。 若沒有驅動程式感知的連線池,你無法有效地指定這類偏好,因為驅動程式管理員無法識別所有驅動程式專屬的連線屬性。 驅動程式感知型連線池允許驅動程式取得使用者偏好(透過設定驅動程式專屬屬性 SQLSetConnectAttr),以便根據使用者偏好更準確地估算重複使用池中連線的成本。
欲了解更多關於驅動程式感知連線池的資訊,請參閱 開發具有連線池意識的 ODBC 驅動程式。
確定驅動程式支援
驅動程式感知連線池是驅動程式可能不支援的選配功能。 要判斷驅動程式是否支援此功能,請使用 SQLGetInfo 的 SQL_DRIVER_AWARE_POOLING_SUPPORTED InfoType。
如何啟用驅動程式感知的連線池
應用程式可以透過將 SQL_ATTR_CONNECTION_POOLING 屬性使用 SQLSetEnvAttr 設定為 SQL_CP_DRIVER_AWARE 來利用驅動程式的連線池感知。 若驅動程式不支援連線池感知,則會使用驅動程式管理器連線池(與指定SQL_CP_ONE_PER_HENV而非SQL_CP_DRIVER_AWARE相同)。 ODBC 2.x 和 3.x 應用程式可以啟用此功能。