识别驱动程序的连接池
识别驱动程序的连接池是 Windows 8 中驱动程序管理器的一项新功能。 识别驱动程序的连接池允许驱动程序编写器在其 ODBC 驱动程序中自定义连接池行为。
注意
游标库不支持识别驱动程序的连接池。 如果应用程序在识别驱动程序的连接池时尝试通过 SQLSetConnectAttr 启用游标库,应用程序将收到错误消息。
识别驱动程序的连接池解决了与驱动程序管理器连接池相关的以下问题:
池片段只有在与新连接请求的连接字符串完全匹配时,驱动程序管理器才会从池中返回连接。 驱动程序管理器要求完全匹配的一个原因是,驱动程序管理器不了解每个特定于驱动程序的连接字符串关键字及其值。 但是,某些连接字符串关键字值(如数据库的名称)可能不需要完全匹配,因为驱动程序可以在不到打开新连接所需的时间(确切的时间差异取决于数据源)内更改数据库。 并且,某些连接属性(如 SQL_ATTR_CURRENT_CATALOG)的差异可能需要比其他属性(例如 SQL_ATTR_LOGIN_TIMEOUT)的差异更多的时间来更改。 这还可以防止驱动程序管理器使用池中成本最低的可重用连接。 当驱动程序必须创建许多新连接时,应用程序的性能可能会降低,数据源可伸缩性可能会降低。 可以通过识别驱动程序的连接池减少池片段,因为驱动程序可以更好地估算在池中为连接请求重用连接的成本。
无需考虑应用程序首选项某些数据源可以有效地打开新连接(与重置某些属性相比),因此,应用程序可能更喜欢打开新连接,而不是尝试重复使用池中的略有不匹配的连接并重置某些值(尽管连接池初始化期间这可能会变慢)。 但是,某些应用程序可能会使服务器负载变小,且打开的连接更少,尽管修复正确行为的不匹配可能会产生更大的成本。 如果没有识别驱动程序的连接池,则无法有效地指定此类首选项,因为驱动程序管理器无法识别所有特定于驱动程序的连接属性。 识别驱动程序的连接池允许驱动程序获取用户首选项(使用特定于驱动程序的属性 SQLSetConnectAttr),以便根据用户的首选项更好地估算从池中重用连接的成本。
有关识别驱动程序的连接池的详细信息,请参阅在 ODBC 驱动程序中开发连接池感知。
确定驱动程序的支持情况
识别驱动程序的连接池是驱动程序可能不支持的可选功能。 要确定驱动程序是否支持它,请使用 SQLGetInfo 的 SQL_DRIVER_AWARE_POOLING_SUPPORTED InfoType。
如何启用识别驱动程序的连接池
应用程序可以通过使用 SQLSetEnvAttr 将 SQL_ATTR_CONNECTION_POOLING 属性设置为 SQL_CP_DRIVER_AWARE 来使用驱动程序的连接池感知。 如果驱动程序不支持连接池感知,将使用驱动程序管理器连接池(与指定 SQL_CP_ONE_PER_HENV 相同,而不是 SQL_CP_DRIVER_AWARE)。 ODBC 2.x 和 3.x 应用程序可以启用此功能。