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

如何使用GBase 8a ODBC 连接池使

GBASE数据库 2023-02-16
212

本文内容主要用连接字符串为例来展示 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 连接池时,首先要设置 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.173};"
"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.173};"
"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.173};"
"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.173};"
"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.173};"
"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.173};"
"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.173};"
"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.173};"
"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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论