外观
DM 系统参数优化
参数优化原则
- 了解业务场景:不同业务场景对数据库的要求不同,如 OLTP 和 OLAP 场景的参数设置差异较大
- 结合硬件环境:根据服务器的 CPU、内存、存储等硬件资源调整参数
- 逐步调整:从小值开始,逐步调整参数,观察性能变化
- 监控效果:通过性能视图和 AWR 报告监控参数调整效果
- 版本适配:不同版本的 DM 数据库参数默认值和特性可能不同
参数优化流程
- 收集信息:了解业务场景、硬件配置和当前性能瓶颈
- 分析当前配置:查看当前参数设置,识别不合理配置
- 制定优化方案:根据性能瓶颈和最佳实践制定参数优化方案
- 实施优化:在线或离线修改参数
- 验证效果:通过性能测试和监控验证优化效果
- 调整优化方案:根据验证结果调整优化方案,持续优化
内存参数优化
内存是数据库性能的关键资源,合理分配内存可以减少磁盘 I/O,提高查询速度和并发处理能力。
核心内存参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| MEMORY_POOL | 200MB | 内存池大小,用于分配内部对象 | 根据实例规模调整,建议 200-1000MB |
| BUFFER | 100MB | 数据缓冲区大小,用于缓存数据页 | 建议设置为物理内存的 40%-60% |
| BUFFER_POOLS | 8 | 数据缓冲区个数 | 建议设置为 CPU 核心数的 1-2 倍 |
| RECYCLE | 50MB | 回收缓冲区大小,用于缓存不常用数据 | 建议设置为 BUFFER 的 20%-30% |
| HUGE_BUFFER | 0MB | 大字段缓冲区大小,用于缓存大字段数据 | 大字段查询较多时建议设置为 100-500MB |
| SORT_BUF_SIZE | 6MB | 排序缓冲区大小 | 排序操作较多时建议设置为 16-64MB |
| HJ_BUF_SIZE | 12MB | 哈希连接缓冲区大小 | 哈希连接操作较多时建议设置为 32-128MB |
| DICT_BUF_SIZE | 32MB | 字典缓冲区大小,用于缓存数据字典 | 数据库对象较多时建议设置为 64-256MB |
内存参数优化案例
场景:OLTP 业务,8 核 CPU,32GB 内存
优化方案:
ini
MEMORY_POOL = 500
BUFFER = 16384 # 32GB * 50%
BUFFER_POOLS = 8
RECYCLE = 4096 # BUFFER 的 25%
HUGE_BUFFER = 200
SORT_BUF_SIZE = 32
HJ_BUF_SIZE = 64
DICT_BUF_SIZE = 128IO 参数优化
I/O 是数据库性能的常见瓶颈,优化 I/O 相关参数可以提高数据读写效率,减少 I/O 等待时间。
核心 IO 参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| IO_THR_GROUPS | 1 | IO 线程组数 | 建议设置为存储设备个数或 CPU 核心数的 1/4 |
| IO_THR_INI | 4 | 每个 IO 线程组的初始 IO 线程数 | 建议设置为 4-8 |
| IO_THR_MAX | 8 | 每个 IO 线程组的最大 IO 线程数 | 建议设置为 8-16 |
| DISK_WAIT_TIME | 10 | 磁盘 I/O 等待时间(毫秒) | 存储性能较好时建议设置为 5-10,性能较差时建议设置为 15-20 |
| IO_SLICE_SIZE | 16 | IO 切片大小(KB) | SSD 存储建议设置为 64-128,HDD 存储建议设置为 16-32 |
| LOG_IO_SIZE | 256 | 日志 I/O 大小(KB) | 建议设置为 256-1024,提高日志写入效率 |
IO 参数优化案例
场景:使用 SSD 存储,8 核 CPU
优化方案:
ini
IO_THR_GROUPS = 2
IO_THR_INI = 4
IO_THR_MAX = 8
DISK_WAIT_TIME = 5
IO_SLICE_SIZE = 64
LOG_IO_SIZE = 512并发参数优化
并发参数控制数据库的并发处理能力,合理设置可以提高系统吞吐量,减少锁等待和死锁。
核心并发参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| MAX_SESSIONS | 100 | 最大会话数 | 根据预期并发连接数调整,建议设置为预期最大值的 1.5-2 倍 |
| MAX_SESSION_STACK_SIZE | 1024KB | 会话栈大小 | 复杂查询较多时建议设置为 2048-4096KB |
| WORKER_THREADS | 8 | 工作线程数 | 建议设置为 CPU 核心数的 1-2 倍 |
| TASK_THREADS | 4 | 任务线程数 | 建议设置为 CPU 核心数的 1/2 |
| LOCK_WAIT_TIMEOUT | 10 | 锁等待超时时间(秒) | 建议根据业务需求调整,一般设置为 5-30 秒 |
| DEADLOCK_CHECK_INTERVAL | 1000 | 死锁检查间隔(毫秒) | 建议设置为 500-2000 毫秒 |
| ENABLE_MONITOR | 1 | 是否启用监控 | 生产环境建议设置为 1,便于性能监控和分析 |
并发参数优化案例
场景:高并发 OLTP 业务,16 核 CPU,预期最大连接数 500
优化方案:
ini
MAX_SESSIONS = 1000
MAX_SESSION_STACK_SIZE = 2048
WORKER_THREADS = 16
TASK_THREADS = 8
LOCK_WAIT_TIMEOUT = 15
DEADLOCK_CHECK_INTERVAL = 1000
ENABLE_MONITOR = 1SQL 优化相关参数
SQL 优化相关参数可以影响查询优化器的行为,提高 SQL 执行效率。
核心 SQL 优化参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| OPTIMIZER_MODE | CHOOSE | 优化器模式(CHOOSE/RULE/COST) | 建议设置为 COST,使用基于成本的优化器 |
| HJ_ENABLE | 1 | 是否启用哈希连接 | 哈希连接效率较高,建议保持默认值 1 |
| SJ_ENABLE | 1 | 是否启用排序合并连接 | 一般保持默认值 1 |
| NL_JOIN_ENABLE | 1 | 是否启用嵌套循环连接 | 一般保持默认值 1 |
| UNION_SORT | 1 | UNION 操作是否排序 | 不需要去重时建议设置为 0,提高性能 |
| FORCE_INDEX | 0 | 是否强制使用索引 | 一般保持默认值 0,由优化器自动选择 |
| PARALLEL_DEGREE | 1 | 默认并行度 | 数据仓库场景建议根据 CPU 核心数调整,如 4-8 |
SQL 优化参数案例
场景:OLAP 业务,复杂查询较多,16 核 CPU
优化方案:
ini
OPTIMIZER_MODE = COST
HJ_ENABLE = 1
SJ_ENABLE = 1
NL_JOIN_ENABLE = 1
UNION_SORT = 1
FORCE_INDEX = 0
PARALLEL_DEGREE = 4日志相关参数优化
日志参数影响数据库的事务处理能力和数据安全性,合理设置可以平衡性能和安全性。
核心日志参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| RLOG_SIZE | 256MB | 重做日志文件大小 | 建议设置为 512MB-2GB,减少日志切换频率 |
| RLOG_POOL_SIZE | 256KB | 重做日志缓冲区大小 | 建议设置为 1-4MB,提高日志写入效率 |
| FAIRNESS_TIMESLICE | 20 | 日志写入公平性时间片(毫秒) | 高并发场景建议设置为 5-10,提高写入公平性 |
| COMMIT_WAIT | 0 | 提交等待模式(0: 异步, 1: 同步) | 数据安全性要求高时设置为 1,性能要求高时设置为 0 |
| COMMIT_SCAN | 0 | 提交扫描模式(0: 不扫描, 1: 扫描) | 一般保持默认值 0,减少 CPU 开销 |
日志参数优化案例
场景:对数据安全性要求较高的 OLTP 业务
优化方案:
ini
RLOG_SIZE = 1024
RLOG_POOL_SIZE = 2048
FAIRNESS_TIMESLICE = 10
COMMIT_WAIT = 1
COMMIT_SCAN = 0存储相关参数优化
存储参数影响数据库的存储结构和 I/O 性能,合理设置可以提高存储利用率和 I/O 效率。
核心存储参数
| 参数名 | 默认值 | 说明 | 优化建议 |
|---|---|---|---|
| EXTENT_SIZE | 16 | 数据文件扩展大小(页) | 建议设置为 16-64,减少文件碎片 |
| PAGE_SIZE | 8 | 数据页大小(KB) | OLTP 场景建议设置为 8KB,OLAP 场景建议设置为 16-32KB |
| SEGMENT_SPACE_MANAGEMENT | AUTO | 段空间管理方式(AUTO/MANUAL) | 建议设置为 AUTO,自动管理段空间 |
| DBFILE_PATH | 数据文件存放路径 | 建议将数据文件和日志文件分开存放,提高 I/O 并行度 | |
| LOG_PATH | 日志文件存放路径 | 建议使用高速存储设备,如 SSD |
存储参数优化案例
场景:混合负载业务,使用 SSD 存储
优化方案:
ini
EXTENT_SIZE = 32
PAGE_SIZE = 16
SEGMENT_SPACE_MANAGEMENT = AUTO
DBFILE_PATH = /data/dm/data
LOG_PATH = /data/dm/log版本差异与兼容性
不同版本的 DM 数据库在参数默认值和特性上存在差异,优化时需要考虑版本兼容性。
DM 7 vs DM 8 核心参数差异
| 参数名 | DM 7 默认值 | DM 8 默认值 | 说明 |
|---|---|---|---|
| BUFFER | 100MB | 100MB | 相同,但 DM 8 支持更大的缓冲区大小 |
| MAX_SESSIONS | 100 | 100 | 相同,但 DM 8 支持更多的会话数 |
| WORKER_THREADS | 4 | 8 | DM 8 默认值更大,更适合现代硬件 |
| MEMORY_POOL | 100MB | 200MB | DM 8 默认值更大,提高了内存利用率 |
| OPTIMIZER_MODE | CHOOSE | COST | DM 8 默认使用基于成本的优化器 |
DM 8.1 新特性参数
DM 8.1 新增了以下优化相关参数:
- PARALLEL_EXECUTION:并行执行开关,控制是否启用并行执行
- AUTO_SAMPLE_SIZE:自动采样大小,影响统计信息收集效率
- ENABLE_PLAN_HINT:是否启用执行计划提示
- ADAPTIVE_PLAN:是否启用自适应执行计划
参数优化最佳实践
1. 根据业务场景优化
- OLTP 场景:优化并发参数,提高事务处理能力
- OLAP 场景:优化内存参数和并行度,提高查询效率
- 混合负载:平衡 OLTP 和 OLAP 参数,或使用读写分离
2. 结合硬件环境优化
- 内存充足:增加数据缓冲区大小,减少磁盘 I/O
- CPU 核心数多:增加工作线程数和缓冲区个数
- SSD 存储:调整 I/O 切片大小和并发参数,充分利用 SSD 性能
3. 监控关键指标
- 内存使用率:监控 BUFFER、RECYCLE 等内存组件的使用率
- I/O 等待时间:监控磁盘 I/O 等待时间,识别 I/O 瓶颈
- 锁等待:监控锁等待次数和时间,识别并发瓶颈
- SQL 执行时间:监控慢查询,识别需要优化的 SQL
4. 避免过度优化
- 不要盲目调整所有参数,只优化存在瓶颈的参数
- 不要设置过大的参数值,避免资源浪费和性能下降
- 定期复查参数设置,根据业务变化调整优化方案
常见参数优化问题与解决方案
1. 内存不足
问题:数据库实例内存使用率过高,导致系统性能下降。
解决方案:
- 检查是否有内存泄漏
- 调整内存参数,减少不必要的内存分配
- 增加服务器物理内存
- 考虑使用内存管理工具监控和优化内存使用
2. I/O 瓶颈
问题:磁盘 I/O 等待时间过长,导致查询缓慢。
解决方案:
- 增加数据缓冲区大小,减少磁盘 I/O
- 优化 SQL,减少不必要的数据扫描
- 使用 SSD 存储设备
- 调整 I/O 相关参数,如 IO_THR_GROUPS、IO_SLICE_SIZE 等
3. 并发性能差
问题:高并发场景下,数据库响应时间延长,吞吐量下降。
解决方案:
- 增加工作线程数和最大会话数
- 优化锁等待超时时间和死锁检查间隔
- 优化事务设计,减少长事务
- 考虑使用读写分离或分库分表
4. 优化器选择了低效执行计划
问题:查询优化器选择了低效的执行计划,导致查询缓慢。
解决方案:
- 更新统计信息,确保优化器有准确的成本估算
- 调整优化器相关参数,如 OPTIMIZER_MODE
- 使用执行计划提示(HINT)指导优化器选择正确的执行计划
- 考虑使用 SQL 绑定,固定执行计划
常见问题(FAQ)
Q1: 如何查看当前数据库实例的参数设置?
A1: 可以通过以下方式查看:
- 查询
V$DM_INI视图:SELECT * FROM V$DM_INI; - 使用
SP_GET_PARA_VALUE存储过程:CALL SP_GET_PARA_VALUE(1, 'BUFFER', ?, ?); - 查看 dm.ini 配置文件
- 使用 DM 管理工具查看
Q2: 哪些参数可以在线修改?
A2: 部分参数可以在线修改,部分参数需要重启数据库实例才能生效。可以通过 V$DM_INI 视图的 INST_FLAG 字段查看参数是否需要重启实例:
INST_FLAG = 0:不需要重启,在线修改后立即生效INST_FLAG = 1:需要重启实例才能生效
Q3: 如何在线修改参数?
A3: 可以使用 ALTER SYSTEM 命令在线修改参数:
sql
-- 在线修改内存池大小为 500MB
ALTER SYSTEM SET "MEMORY_POOL" = 500 MEMORY;
-- 修改参数并写入配置文件,重启后生效
ALTER SYSTEM SET "BUFFER" = 8192 SPFILE;Q4: 参数优化后如何验证效果?
A4: 可以通过以下方式验证参数优化效果:
- 性能测试:执行相同的测试用例,比较优化前后的响应时间和吞吐量
- 监控指标:监控内存使用率、I/O 等待时间、锁等待等指标
- AWR 报告:生成优化前后的 AWR 报告,比较关键性能指标
- 慢查询日志:分析慢查询日志,查看慢查询数量和执行时间变化
Q5: 如何识别需要优化的参数?
A5: 可以通过以下方式识别需要优化的参数:
- 性能瓶颈分析:根据性能测试和监控结果识别瓶颈
- 最佳实践对比:将当前参数与最佳实践进行对比
- AWR 报告分析:通过 AWR 报告识别性能问题和需要优化的参数
- 专家经验:根据数据库专家的经验和建议优化参数
Q6: 不同业务场景下的参数优化重点是什么?
A6: 不同业务场景的参数优化重点不同:
- OLTP 场景:优化并发参数、内存参数和日志参数,提高事务处理能力
- OLAP 场景:优化内存参数、并行度和 I/O 参数,提高查询效率
- 混合负载:平衡 OLTP 和 OLAP 参数,或使用读写分离架构
Q7: 如何避免参数优化导致的性能问题?
A7: 可以通过以下方式避免参数优化导致的性能问题:
- 小步调整:每次只调整少量参数,观察效果后再调整其他参数
- 备份配置:优化前备份当前配置,以便出现问题时恢复
- 测试验证:在测试环境验证优化效果后再应用到生产环境
- 监控预警:设置性能监控和预警,及时发现性能问题
Q8: DM 数据库是否支持自动参数优化?
A8: DM 8 开始支持自动参数优化功能,可以通过以下方式启用:
- 设置
AUTO_PARAM_TUNING = 1启用自动参数调优 - 使用
DBMS_AUTO_TASK_ADMIN包管理自动调优任务 - 定期查看自动调优报告,了解优化建议
Q9: 如何优化 DM 数据库的启动时间?
A9: 可以通过以下方式优化 DM 数据库的启动时间:
- 调整
BUFFER和RECYCLE参数,减少启动时的内存分配时间 - 优化
DBFILE_PATH和LOG_PATH,使用高速存储设备 - 减少数据库对象数量,如合并小表空间
- 调整
CHECK_DB_TYPE参数,减少启动时的数据库检查
Q10: 如何优化 DM 数据库的备份恢复性能?
A10: 可以通过以下方式优化备份恢复性能:
- 调整
BACKUP_BUF_SIZE参数,增加备份缓冲区大小 - 使用并行备份,调整
PARALLEL_DEGREE参数 - 使用高速存储设备存放备份文件
- 优化
RLOG_SIZE和LOG_IO_SIZE参数,提高日志写入效率
