暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于GBase 8a ODBC 连接池的简介

郑小雯 2023-06-20
176

GBase 8a ODBC 连接池简介

GBase 8a ODBC 连接池是针对 GBase 8a 开发的 ODBC 数据库连接池。它主要 有用下几大功能:

 缓存连接到 GBase 8a 各节点的数据库连接。

 负载功能,根据负载均衡策略将用户申请的连接分摊到 GBase 8a 的各节点上。

 周期性的维护 GBase 8a ODBC 连接池中各连接的有效性,清理连 接池中无效的连接。

 周期性的维护连接池中的空闲连接数,保证连接池中的空闲连接 数满足用户的设定最大/最小空闲连接数。

 清理过期的连接。


GBase 8a ODBC 连接池使用方法

本节以连接字符串为例来展示 GBase 8a ODBC 连接池的使用方法。主要描 述关于连接池的关键字使用方法。在 linux 平台下创建数据源时,同样可以将 这些关键字写入到 odbc.ini 文件中来使用 GBase 8a ODBC 连接池功能。或者使 用 gsodbc-installer -s -a -c2 -n "test" 加上连接字符串来注册一个带连接 池的数据源,如下所示: #gsodbc-installer -s -a -c2 -n "test" -t "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD= gbase20110531; SERVER=192.168.111.96;"


开启 GBase 8a ODBC 连接池

通过连接字符串开启 GBase 8a ODBC 连接池时,首先要设置 GCLUSTER_ID 的值,然后设置 POOL_MAX_ACTIVE_SIZE, POOL_MAX_IDLE 的值大于 0,且 POOL_MAX_ACTIVE_SIZE 的值大于等于 POOL_MAX_IDLE 的值。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;"


设置连接池初始化大小

如果需要在连接初始时让连接池自动创建一定数量的连接,可以通过设置 POOL_INIT_SIZE 的值来实现。通常 POOL_INIT_SIZE 的值小于等于 POOL_MAX_IDLE。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" "POOL_INIT_SIZE=10;"


设置获取连接超时时间

如果需要限制从连接池获取连接的时间,可以通过设置 POOL_CHECKOUT_TIMEOUT 的值来实现。默认情况下 POOL_CHECKOUT_TIMEOUT 值为 500 毫秒。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;"

"SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" "POOL_CHECKOUT_TIMEOUT=2000;"


设置获取连接时使用的负载均衡策略

GBase 8a ODBC 连接池提供了两种负载均衡策略,分别是轮询和最小 BUSY 连接数优先。使用轮询策略时设置 POOL_LBS=0,使用最小 BUSY 连接数优先策略 时设置 POOL_LBS=1。默认时使用轮询策略。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" "POOL_LBS=1;"


借还连接时测试连接可用性

从连接池中借出连接时对连接进行测试进一步保证了借出连接的效性,归 还连接时对连接进行测试时保证了无效的连接不会进入到连接池中。借出连接 时检测需要设置 POOL_TEST_BORROW=1,归还连接时检测需要设置 POOL_TEST_RETURN=1。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" " POOL_TEST_BORROW=1; POOL_TEST_RETURN=1;"


清理无效连接

如果要连接池定期清理连接池中无效的连接,那么就要设置 POOL_MANAGER=1。清理无效连接功能不仅定期清理连接池中无效的连接,还定 期检测 GBase 8a 各节点的状态。如果 GBase 8a 有节点恢复可用,GBase 8a ODBC 连接池将会缓存连接到该节点的 ODBC 连接。同时通过设置 POOL_TEST_INVALID_CONN_PERIOD 的值可以设置清理无效连接的周期。该周期默 认值为 20 秒。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" " POOL_MANAGER=1;POOL_TEST_INVALID_CONN_PERIOD=30;"


维持空闲连接数

如果要使连接池中的空闲连接数维持在一范围内,那么可以通过设置 POOL_KEEP_IDLE=1 打开连接池的空闲连接数维持功能,并设置 POOL_MIN_IDLE 的值来实现。POOL_MIN_IDLE 的值小于 POOL_MAX_IDLE 的值。这样当连接池发现 空闲连接数小于 POOL_MIN_IDLE 的值时就会创建新的空闲连接,以满足当前空 闲连接数大于等于 POOL_MIN_IDLE 的值。打开维持空闲连接数功能必须同时设 置 POOL_MANAGER=1。如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" " POOL_MANAGER=1;POOL_TEST_INVALID_CONN_PERIOD=30;"

" POOL_KEEP_IDLE=1; POOL_MIN_IDLE=30;"


清理过期连接

用户可以给 GBase 8a ODBC 连接池中的连接设置有效期,并且当连接池发 现有连接过期时,会将该连接释放掉。这种功能可以通过设置 POOL_CLEAR_OVERDUE,POOL_USED_LIFE 和 POOL_IDLE_LIFE 来打开。如果 POOL_USED_LIFE 的值为 0,那么已借出的连接不会过期,POOL_USED_LIFE 默认 值为 0;如果 POOL_IDLE_LIFE 的值为 0,那么空闲连接不会过期,POOL_IDLE_LIFE 默认值为 0。打开清理过期连接功能必须同时设置 POOL_MANAGER=1 如下所示: "DRIVER=GBase 8a ODBC 8.3 Driver;UID=gbase;PWD=gbase20110531;" "SERVER={192.168.111.96;192.168.5.212;192.168.7.174;192.168.7.17 3};" "GCLUSTER_ID=gcluster; POOL_MAX_ACTIVE_SIZE=80;POOL_MAX_IDLE=60;" " POOL_MANAGER=1;POOL_TEST_INVALID_CONN_PERIOD=30;" " POOL_CLEAR_OVERDUE=1; POOL_USED_LIFE=360000; POOL_IDLE_LIFE=36000;"


释放连接池

释放连接池需要按照如下方式调研释放连接池的接口。 rc = SQLDriverConnect(hdbc, NULL, connStr, SQL_NTS,NULL, 0, NULL, 0); if (!isSuc(rc)) { getError(SQL_HANDLE_DBC, hdbc);

return; } SQLSetConnectAttr(hdbc, SQL_ATTR_GBASE_POOL_FREE, SQL_FREE_GBASE_POOL, NULL); SQLDisconnect(hdbc); 在归还从连接池借出的连接前,先设置该连接的属性 SQL_ATTR_GBASE_POOL_FREE 的值为 SQL_FREE_GBASE_POOL,然后调用 SQLDisconnect 归还连接。这样 ODBC 在归还连接的同时会释放掉该连接所在的 连接池。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论