Skip to content

DM 系统参数优化

参数优化原则

  1. 了解业务场景:不同业务场景对数据库的要求不同,如 OLTP 和 OLAP 场景的参数设置差异较大
  2. 结合硬件环境:根据服务器的 CPU、内存、存储等硬件资源调整参数
  3. 逐步调整:从小值开始,逐步调整参数,观察性能变化
  4. 监控效果:通过性能视图和 AWR 报告监控参数调整效果
  5. 版本适配:不同版本的 DM 数据库参数默认值和特性可能不同

参数优化流程

  1. 收集信息:了解业务场景、硬件配置和当前性能瓶颈
  2. 分析当前配置:查看当前参数设置,识别不合理配置
  3. 制定优化方案:根据性能瓶颈和最佳实践制定参数优化方案
  4. 实施优化:在线或离线修改参数
  5. 验证效果:通过性能测试和监控验证优化效果
  6. 调整优化方案:根据验证结果调整优化方案,持续优化

内存参数优化

内存是数据库性能的关键资源,合理分配内存可以减少磁盘 I/O,提高查询速度和并发处理能力。

核心内存参数

参数名默认值说明优化建议
MEMORY_POOL200MB内存池大小,用于分配内部对象根据实例规模调整,建议 200-1000MB
BUFFER100MB数据缓冲区大小,用于缓存数据页建议设置为物理内存的 40%-60%
BUFFER_POOLS8数据缓冲区个数建议设置为 CPU 核心数的 1-2 倍
RECYCLE50MB回收缓冲区大小,用于缓存不常用数据建议设置为 BUFFER 的 20%-30%
HUGE_BUFFER0MB大字段缓冲区大小,用于缓存大字段数据大字段查询较多时建议设置为 100-500MB
SORT_BUF_SIZE6MB排序缓冲区大小排序操作较多时建议设置为 16-64MB
HJ_BUF_SIZE12MB哈希连接缓冲区大小哈希连接操作较多时建议设置为 32-128MB
DICT_BUF_SIZE32MB字典缓冲区大小,用于缓存数据字典数据库对象较多时建议设置为 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 = 128

IO 参数优化

I/O 是数据库性能的常见瓶颈,优化 I/O 相关参数可以提高数据读写效率,减少 I/O 等待时间。

核心 IO 参数

参数名默认值说明优化建议
IO_THR_GROUPS1IO 线程组数建议设置为存储设备个数或 CPU 核心数的 1/4
IO_THR_INI4每个 IO 线程组的初始 IO 线程数建议设置为 4-8
IO_THR_MAX8每个 IO 线程组的最大 IO 线程数建议设置为 8-16
DISK_WAIT_TIME10磁盘 I/O 等待时间(毫秒)存储性能较好时建议设置为 5-10,性能较差时建议设置为 15-20
IO_SLICE_SIZE16IO 切片大小(KB)SSD 存储建议设置为 64-128,HDD 存储建议设置为 16-32
LOG_IO_SIZE256日志 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_SESSIONS100最大会话数根据预期并发连接数调整,建议设置为预期最大值的 1.5-2 倍
MAX_SESSION_STACK_SIZE1024KB会话栈大小复杂查询较多时建议设置为 2048-4096KB
WORKER_THREADS8工作线程数建议设置为 CPU 核心数的 1-2 倍
TASK_THREADS4任务线程数建议设置为 CPU 核心数的 1/2
LOCK_WAIT_TIMEOUT10锁等待超时时间(秒)建议根据业务需求调整,一般设置为 5-30 秒
DEADLOCK_CHECK_INTERVAL1000死锁检查间隔(毫秒)建议设置为 500-2000 毫秒
ENABLE_MONITOR1是否启用监控生产环境建议设置为 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 = 1

SQL 优化相关参数

SQL 优化相关参数可以影响查询优化器的行为,提高 SQL 执行效率。

核心 SQL 优化参数

参数名默认值说明优化建议
OPTIMIZER_MODECHOOSE优化器模式(CHOOSE/RULE/COST)建议设置为 COST,使用基于成本的优化器
HJ_ENABLE1是否启用哈希连接哈希连接效率较高,建议保持默认值 1
SJ_ENABLE1是否启用排序合并连接一般保持默认值 1
NL_JOIN_ENABLE1是否启用嵌套循环连接一般保持默认值 1
UNION_SORT1UNION 操作是否排序不需要去重时建议设置为 0,提高性能
FORCE_INDEX0是否强制使用索引一般保持默认值 0,由优化器自动选择
PARALLEL_DEGREE1默认并行度数据仓库场景建议根据 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_SIZE256MB重做日志文件大小建议设置为 512MB-2GB,减少日志切换频率
RLOG_POOL_SIZE256KB重做日志缓冲区大小建议设置为 1-4MB,提高日志写入效率
FAIRNESS_TIMESLICE20日志写入公平性时间片(毫秒)高并发场景建议设置为 5-10,提高写入公平性
COMMIT_WAIT0提交等待模式(0: 异步, 1: 同步)数据安全性要求高时设置为 1,性能要求高时设置为 0
COMMIT_SCAN0提交扫描模式(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_SIZE16数据文件扩展大小(页)建议设置为 16-64,减少文件碎片
PAGE_SIZE8数据页大小(KB)OLTP 场景建议设置为 8KB,OLAP 场景建议设置为 16-32KB
SEGMENT_SPACE_MANAGEMENTAUTO段空间管理方式(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 默认值说明
BUFFER100MB100MB相同,但 DM 8 支持更大的缓冲区大小
MAX_SESSIONS100100相同,但 DM 8 支持更多的会话数
WORKER_THREADS48DM 8 默认值更大,更适合现代硬件
MEMORY_POOL100MB200MBDM 8 默认值更大,提高了内存利用率
OPTIMIZER_MODECHOOSECOSTDM 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: 可以通过以下方式查看:

  1. 查询 V$DM_INI 视图:SELECT * FROM V$DM_INI;
  2. 使用 SP_GET_PARA_VALUE 存储过程:CALL SP_GET_PARA_VALUE(1, 'BUFFER', ?, ?);
  3. 查看 dm.ini 配置文件
  4. 使用 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: 可以通过以下方式验证参数优化效果:

  1. 性能测试:执行相同的测试用例,比较优化前后的响应时间和吞吐量
  2. 监控指标:监控内存使用率、I/O 等待时间、锁等待等指标
  3. AWR 报告:生成优化前后的 AWR 报告,比较关键性能指标
  4. 慢查询日志:分析慢查询日志,查看慢查询数量和执行时间变化

Q5: 如何识别需要优化的参数?

A5: 可以通过以下方式识别需要优化的参数:

  1. 性能瓶颈分析:根据性能测试和监控结果识别瓶颈
  2. 最佳实践对比:将当前参数与最佳实践进行对比
  3. AWR 报告分析:通过 AWR 报告识别性能问题和需要优化的参数
  4. 专家经验:根据数据库专家的经验和建议优化参数

Q6: 不同业务场景下的参数优化重点是什么?

A6: 不同业务场景的参数优化重点不同:

  • OLTP 场景:优化并发参数、内存参数和日志参数,提高事务处理能力
  • OLAP 场景:优化内存参数、并行度和 I/O 参数,提高查询效率
  • 混合负载:平衡 OLTP 和 OLAP 参数,或使用读写分离架构

Q7: 如何避免参数优化导致的性能问题?

A7: 可以通过以下方式避免参数优化导致的性能问题:

  1. 小步调整:每次只调整少量参数,观察效果后再调整其他参数
  2. 备份配置:优化前备份当前配置,以便出现问题时恢复
  3. 测试验证:在测试环境验证优化效果后再应用到生产环境
  4. 监控预警:设置性能监控和预警,及时发现性能问题

Q8: DM 数据库是否支持自动参数优化?

A8: DM 8 开始支持自动参数优化功能,可以通过以下方式启用:

  1. 设置 AUTO_PARAM_TUNING = 1 启用自动参数调优
  2. 使用 DBMS_AUTO_TASK_ADMIN 包管理自动调优任务
  3. 定期查看自动调优报告,了解优化建议

Q9: 如何优化 DM 数据库的启动时间?

A9: 可以通过以下方式优化 DM 数据库的启动时间:

  1. 调整 BUFFERRECYCLE 参数,减少启动时的内存分配时间
  2. 优化 DBFILE_PATHLOG_PATH,使用高速存储设备
  3. 减少数据库对象数量,如合并小表空间
  4. 调整 CHECK_DB_TYPE 参数,减少启动时的数据库检查

Q10: 如何优化 DM 数据库的备份恢复性能?

A10: 可以通过以下方式优化备份恢复性能:

  1. 调整 BACKUP_BUF_SIZE 参数,增加备份缓冲区大小
  2. 使用并行备份,调整 PARALLEL_DEGREE 参数
  3. 使用高速存储设备存放备份文件
  4. 优化 RLOG_SIZELOG_IO_SIZE 参数,提高日志写入效率