
# 典型应用场景配置
#### 日志诊断场景
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
Servername=10.10.0.13 #数据库Server IP
...
Debug=1 #打开驱动端debug日志
```
![](https://support.huaweicloud.com/centralized-devg-v8-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或者TargetServerType=prefer-standby。
```
[gaussdb]
Driver=GaussMPP
Servername=10.145.130.26,10.145.130.27,10.145.130.28  #所有DN的IP。
Database=db1  #数据库名称。
Username=omm  #数据库用户名。
Password=********  #数据库用户密码。
Port=8000  #数据库侦听端口。
TargetServerType=standby  #设置连接备机。
```
#### 连接池场景
连接池允许应用程序重复使用预先建立的连接，无需每次都重新建立连接。连接一旦创建并放入连接池，应用程序即可重复利用，避免了重复执行完整的连接过程。
这种池化连接的使用可以显著提升性能，尤其对于需要频繁建立和断开连接的中间层应用程序或网络连接的应用程序而言，性能提升尤为明显。
除了性能优势外，连接池架构还能够实现环境中的连接在单个进程中被多个组件共享的目的。这意味着，同一进程中的不同组件可以在不互相干扰的情况下共享连接池中的连接，进一步提高了系统的效率和资源利用率。
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
在连接池中，打开的连接可能被多个用户重用，如果您的应用程序脚本会更改数据库连接的状态，可能会导致数据泄露，为了安全起见，请谨慎评估使用连接池。
**Linux场景配置**
在odbcinst.ini配置文件中开启连接池，连接池相关参考配置如下：
```
[ODBC]
Pooling=Yes #开启连接池
[GaussMPP]
CPTimeout=60 #一个连接在连接池中未被重用则会被释放的计时，默认为0，开启连接池需要设置为大于0
CPTimeToLive=60 #该驱动下连接池存在的计时
[GaussMPP2]
CPTimeout=0 #关闭连接池
```
**Windows场景配置**
在打开的驱动管理器上，选择"连接池"，双击"GaussDB Unicode"驱动名称，选择"使用池连接此驱动程序"\[默认为60s\]，该设置参数同**Linux场景配置**的CPTimeout，参考例图如下：
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002558060095.png "点击放大")
![](https://support.huaweicloud.com/centralized-devg-v8-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. 应用程序的连接在一段时间内处于非活动状态（未在连接中使用），则会从池中删除该连接。连接池的大小仅受内存限制和服务器限制。
 
