mysql-rest
Version:
One command to generate REST APIs for any MySql database, support multi databases
173 lines (137 loc) • 5.55 kB
Markdown
# 达梦数据库连接配置参数
本项目已支持通过命令行参数配置达梦数据库连接池的各种属性。
## 新增的命令行参数
### 基本连接参数
- `--dialect <type>`: 数据库类型,支持 `mysql`、`tidb`、`dameng`
- `-h, --host <host>`: 数据库主机地址
- `-o, --port <port>`: 数据库端口号
- `-u, --user <username>`: 数据库用户名
- `-p, --password <password>`: 数据库密码
- `--disableAccessLog`: 禁用HTTP访问日志,生产环境推荐 (默认: false)
### 达梦数据库连接池专用参数(带dm前缀)
#### 连接池大小配置
- `--dmPoolMax <number>`: 连接池最大连接数 (默认: 16)
- `--dmPoolMin <number>`: 连接池最小连接数 (默认: 8)
#### 超时配置
- `--dmPoolTimeout <seconds>`: 连接空闲超时时间,单位秒,0表示永不关闭 (默认: 60)
- `--dmQueueTimeout <milliseconds>`: 队列中请求的超时时间,单位毫秒,0表示永久等待 (默认: 60000)
#### 队列配置
- `--dmQueueMax <number>`: 获取连接请求等待队列的最大长度,-1表示无限制 (默认: 500)
- `--dmQueueRequests`: 连接池达到最大连接数后,是否将后续请求放入等待队列 (默认: true)
#### 连接验证配置
- `--dmTestOnBorrow`: 连接获取前是否验证有效性 (默认: false)
- `--dmValidationQuery <sql>`: 连接有效性检查使用的SQL语句 (默认: 'select 1;')
#### 其他配置
- `--dmPoolAlias <name>`: 连接池别名 (可选)
## 使用示例
### 基本用法
```bash
# 使用默认参数连接达梦数据库
xmysql --dialect dameng -h localhost -o 5236 -u SYSDBA -p SYSDBA
```
### 自定义连接池参数
```bash
# 配置更大的连接池和自定义超时时间
xmysql --dialect dameng -h 192.168.1.100 -o 5236 -u SYSDBA -p SYSDBA \
--dmPoolMax 30 --dmPoolMin 10 --dmPoolTimeout 120 --dmQueueMax 1000
```
### 启用连接验证
```bash
# 启用连接前验证,使用自定义验证查询
xmysql --dialect dameng -h localhost -o 5236 -u SYSDBA -p SYSDBA \
--dmTestOnBorrow --dmValidationQuery "select sysdate from dual"
```
### 完整配置示例
```bash
# 使用所有可用参数的完整配置
xmysql --dialect dameng -h localhost -o 5236 -u SYSDBA -p SYSDBA \
--dmPoolAlias "main-pool" \
--dmPoolMax 25 --dmPoolMin 5 \
--dmPoolTimeout 300 --dmQueueTimeout 30000 \
--dmQueueMax 2000 --dmQueueRequests \
--dmTestOnBorrow --dmValidationQuery "select 1 from dual"
```
### 生产环境配置
```bash
# 生产环境推荐配置(关闭访问日志,高并发优化)
xmysql --dialect dameng -h localhost -o 5236 -u SYSDBA -p SYSDBA \
--dmPoolMax 250 --dmPoolMin 50 --dmPoolTimeout 60 \
--dmQueueMax 20000 --dmQueueTimeout 60000 \
--dmTestOnBorrow --dmValidationQuery "select 1 from dual" \
--disableAccessLog
```
## 配置对照表
| 命令行参数 | PoolAttributes 接口属性 | 默认值 | 说明 |
|-----------|------------------------|--------|------|
| --dmPoolAlias | poolAlias | - | 连接池别名 |
| --dmPoolMax | poolMax | 16 | 最大连接数 |
| --dmPoolMin | poolMin | 8 | 最小连接数 |
| --dmPoolTimeout | poolTimeout | 60 | 连接闲置超时(秒) |
| --dmQueueMax | queueMax | 500 | 队列最大长度 |
| --dmQueueRequests | queueRequests | true | 是否队列请求 |
| --dmQueueTimeout | queueTimeout | 60000 | 队列超时(毫秒) |
| --dmTestOnBorrow | testOnBorrow | false | 连接前验证 |
| --dmValidationQuery | validationQuery | 'select 1;' | 验证查询SQL |
## 注意事项
1. 这些参数仅在 `--dialect dameng` 时生效
2. 所有数值参数都会被自动转换为相应的数据类型
3. 布尔参数(如 `--dmTestOnBorrow`、`--dmQueueRequests`)只需指定即表示启用
4. 如果不指定 `--dmPoolAlias`,则不会在连接配置中包含该属性
5. 连接字符串格式:`dm://username:password@host:port`
6. 使用 `dm` 前缀是为了避免与未来可能的MySQL连接池参数冲突
## 查看帮助
```bash
xmysql --help
```
这将显示所有可用的命令行参数及其说明。
## 故障排除
### 连接池队列已满错误 [20016]
如果遇到 `[20016] 连接池等待队列已满` 错误,说明当前配置无法处理高并发请求。
#### 问题原因
- 连接池所有连接都在使用中
- 等待队列达到最大长度限制
- 并发请求超过了系统处理能力
#### 解决方案
##### 1. 增加队列大小(立即生效)
```bash
# 将队列大小从 15000 增加到 50000
--dmQueueMax 50000
```
##### 2. 增加连接池大小(需要数据库支持)
```bash
# 增加连接池大小
--dmPoolMax 500 --dmPoolMin 100
```
##### 3. 调整超时时间
```bash
# 减少连接闲置超时,加快连接释放
--dmPoolTimeout 30
# 减少队列等待超时,快速失败
--dmQueueTimeout 30000
```
##### 4. 高并发优化配置示例
```bash
# 针对队列已满问题的优化配置
/opt/mysql-rest/mysql-rest-$(uname -m) \
-r 0.0.0.0 -n 55000 \
-h 127.0.0.1 -o 5236 \
--dialect dameng -u SYSDBA -p @WSX3edc \
--dmPoolMax 500 --dmPoolMin 100 \
--dmPoolTimeout 30 \
--dmQueueMax 50000 --dmQueueTimeout 30000 \
--dmTestOnBorrow --dmValidationQuery "select 1 from dual"
```
##### 5. 分阶段调优方法
```bash
# 第一步:仅增加队列大小
--dmQueueMax 30000
# 第二步:如果仍有问题,增加连接池
--dmPoolMax 400 --dmPoolMin 80
# 第三步:优化超时设置
--dmPoolTimeout 45 --dmQueueTimeout 45000
```
#### 监控建议
- 监控连接池使用率
- 监控队列等待时间
- 监控数据库连接数
- 设置告警阈值