
# 典型应用场景配置
#### 日志诊断场景
ODBC日志分为unixODBC驱动管理器日志和gsqlODBC驱动端日志。前者可以用于追踪应用程序API调用的执行状态，后者包含驱动底层实现的诊断（DFX）日志，用于帮助定位问题。
unixODBC日志需要在odbcinst.ini文件中配置：
```
[ODBC]
Trace=Yes
TraceFile=/path/to/odbctrace.log
[GaussMPP]
Driver64=/usr/local/lib/gsqlodbcw.so
setup=/usr/local/lib/gsqlodbcw.so
```
gsqlODBC日志只需在odbc.ini加上如下内容：
```
[gaussdb]
Driver=GaussMPP
#数据库Server IP
Servername=10.10.0.13
...
#打开驱动端debug日志，日志级别为TRACE
Debug=5
```
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
unixODBC日志将生成在TraceFile指定的路径下，gsqlODBC驱动生成的调试日志将存储在系统"/tmp/"目录下的"mylog_xxx.log"文件中。
#### 主备切换自动寻主
当数据库实例配置一主多备数据节点（DN）时，需将所有DN的IP地址完整写入配置文件中，ODBC驱动将自动寻找主DN并建立连接。发生主备切换时，ODBC驱动可自动重新连接至新的主DN。
#### 备机读场景
数据库实例配备一主多备DN时，需将所有DN的IP地址完整写入配置文件中，并且设置"TargetServerType"参数为"standby"或"prefer-standby"模式。
```
[gaussdb]
Driver=GaussMPP
#所有DN的IP。
Servername=10.145.130.26,10.145.130.27,10.145.130.28  
#数据库名称。
Database=db1
#数据库用户名。
Username=omm
#数据库用户密码。
Password=********
#数据库侦听端口。
Port=8000
#设置连接备机。
TargetServerType=standby
```
 #### 连接池场景
连接池允许应用程序重复使用预先建立的连接，无需每次都重新建立连接。连接一旦创建并放入连接池，应用程序即可重复利用，避免了重复执行完整的连接过程。
该池化连接机制的使用可以显著提升性能，尤其对于需要频繁建立和断开连接的中间层应用程序或网络连接的应用程序而言，性能提升尤为明显。
除了性能优势外，连接池架构还能够实现环境中的连接在单个进程中被多个组件共享的目的。这意味着，同一进程中的不同组件可以在不互相干扰的情况下共享连接池中的连接，进一步提高了系统的效率和资源利用率。
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
在连接池中，打开的连接可能被多个用户重用，如果您的应用程序脚本会更改数据库连接的状态，可能会导致数据状态冲突或泄露，为了安全起见，建议谨慎评估使用连接池。
**Linux场景配置**
在odbcinst.ini配置文件中开启连接池，连接池相关参考配置如下：
```
[ODBC]
#开启连接池
Pooling=Yes 
[GaussMPP]
#一个连接在连接池中未被重用则会被释放的计时，默认为0，开启连接池需要设置为大于0
CPTimeout=60 
#该驱动下连接池存在的计时
CPTimeToLive=60 
[GaussMPP2]
#关闭连接池
CPTimeout=0
```
**Windows场景配置**
在打开的驱动管理器上，选择"连接池"后双击"GaussDB Unicode"驱动名称，选择"使用池连接此驱动程序"\[默认为60s\]，该设置参数同**Linux场景配置**的CPTimeout，参考例图如下：
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/figure/zh-cn_image_0000002620724255.png "点击放大")
![](https://support.huaweicloud.com/centralized-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
1. 在应用程序中配置连接池参数，需要在环境句柄创建前通过调用SQLSetEnvAttr设置连接池参数，其中的环境句柄应设置为NULL，这使得SQL_ATTR_CONNECTION_POOLING成为进程级属性。目前在Windows上支持配置SQL_ATTR_CONNECTION_POOLING为以下两种值：
   - SQL_CP_OFF：默认参数设置，禁用连接池功能。
   
   - SQL_CP_ONE_PER_DRIVER：开启连接池功能，每个驱动支持一个连接池，驱动其中的所有连接共享一个池。
    
2. 应用程序调用SQLConnect或SQLDriverConnect时，会从连接池中提取连接，如果连接已超时，或者池中没有与请求匹配的连接，则会打开一个新连接，连接池对调用应用程序是透明的。
3. 应用程序调用SQLDisconnect时，连接将被放回连接池而非直接释放，供后续请求复用。
4. 在环境上调用SQLFreeHandle释放环境句柄前，应用程序成功为环境设置的所有环境属性都会持续存在。
5. 若应用程序的连接在一段时间内处于非活动状态（未在连接中使用），则会从池中删除该连接。连接池的大小仅受内存限制和服务器限制。
 
