外观
DM 性能参数配置
性能参数配置是数据库优化的重要组成部分,合理的参数配置可以充分发挥数据库的性能潜力,提高系统的响应速度和并发处理能力。DM数据库提供了丰富的性能参数,涵盖内存管理、IO处理、并发控制、SQL优化等多个方面。
性能参数配置的目标是根据硬件环境、业务需求和工作负载特点,调整数据库的各项参数,使数据库在资源利用和性能表现之间达到最佳平衡。良好的性能参数配置可以:
- 提高数据库的响应速度和吞吐量
- 减少资源浪费,提高资源利用率
- 增强数据库的并发处理能力
- 优化SQL查询的执行效率
- 提高数据库的稳定性和可靠性
内存参数配置
内存是数据库性能的关键资源之一,合理的内存配置可以减少磁盘IO,提高数据库的响应速度。DM数据库的内存参数主要包括数据库缓冲区、共享内存、会话内存等。
1. 数据库缓冲区
数据库缓冲区用于缓存数据文件中的数据页,减少磁盘IO操作。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| BUFFER | 数据库缓冲区大小(MB) | 物理内存的40%-60% | 根据物理内存大小调整,内存越大,缓冲区可以设置越大 |
| BUFFER_POOLS | 缓冲区池数量 | CPU核心数的1/4到1/2 | 增加缓冲区池数量可以提高并发访问性能 |
| BUFFER_SHARE | 是否启用缓冲区共享 | 0(不启用) | 一般建议不启用,避免缓冲区竞争 |
| BUFFER_HOT_RATIO | 热数据比例 | 70 | 热数据占缓冲区的比例,根据数据访问模式调整 |
| BUFFER_COLD_RATIO | 冷数据比例 | 30 | 冷数据占缓冲区的比例,与热数据比例之和为100 |
2. 共享内存
共享内存用于存放数据库的全局信息,如锁信息、会话信息等。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| SHARE_MEM_SIZE | 共享内存大小(MB) | 1024-4096 | 根据数据库规模和并发会话数调整 |
| DICT_BUF_SIZE | 字典缓冲区大小(MB) | 128-512 | 数据库对象数量越多,需要的字典缓冲区越大 |
| CATALOG_BUF_SIZE | 目录缓冲区大小(MB) | 64-256 | 目录对象数量越多,需要的目录缓冲区越大 |
3. 会话内存
会话内存用于存放每个会话的私有数据,如SQL语句、执行计划等。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| SESSION_MEM_SIZE | 每个会话的内存大小(KB) | 1024-4096 | 根据并发会话数和SQL复杂度调整 |
| SORT_BUF_SIZE | 排序缓冲区大小(KB) | 4096-16384 | 排序操作频繁的系统,建议增大排序缓冲区 |
| HJ_BUF_SIZE | 哈希连接缓冲区大小(KB) | 8192-32768 | 哈希连接操作频繁的系统,建议增大哈希连接缓冲区 |
| JOIN_BUF_SIZE | 连接缓冲区大小(KB) | 4096-16384 | 连接操作频繁的系统,建议增大连接缓冲区 |
IO参数配置
IO性能是数据库性能的重要瓶颈之一,合理的IO参数配置可以提高磁盘IO的利用率和吞吐量。
1. IO线程配置
IO线程用于处理数据库的磁盘IO操作,包括数据文件的读写和日志文件的写入。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| IO_THR_GROUPS | IO线程组数量 | 存储设备数量 | 每个IO线程组对应一个存储设备或RAID组 |
| IO_THR_PER_GROUP | 每个IO线程组的线程数 | 4-8 | 根据存储设备的IO处理能力调整 |
| IO_WAIT_TIME | IO等待时间(ms) | 3000 | IO操作的超时时间,根据存储设备的响应时间调整 |
| IO_SLAVE_NUM | IO从线程数量 | 0 | 一般建议不启用,除非存储设备支持并行IO |
2. IO调度配置
IO调度用于管理和优化IO请求的处理顺序,提高IO吞吐量。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| IO_SCHEDULER | IO调度器类型 | 0(默认调度器) | 可以根据存储设备类型调整,如SSD建议使用NOOP调度器 |
| IO_BUF_SIZE | IO缓冲区大小(KB) | 8-64 | 根据存储设备的特性调整,SSD可以使用较小的缓冲区 |
| IO_MAX_IO_REQUESTS | 最大IO请求数 | 128-512 | 存储设备支持的最大并发IO请求数 |
3. 日志IO配置
日志IO用于处理重做日志的写入操作,影响数据库的事务处理性能。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| RLOG_BUF_SIZE | 重做日志缓冲区大小(MB) | 16-64 | 事务频繁的系统,建议增大重做日志缓冲区 |
| RLOG_POOL_SIZE | 重做日志池大小(MB) | 8-32 | 与重做日志缓冲区配合使用,提高日志写入性能 |
| RLOG_SEND_APPLY_MON | 是否启用日志发送应用监控 | 0(不启用) | 一般建议不启用,避免性能开销 |
并发参数配置
并发参数用于控制数据库的并发处理能力,包括最大会话数、工作线程数、锁管理等。
1. 会话与连接
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| MAX_SESSIONS | 最大会话数 | 1024-4096 | 根据业务并发需求调整 |
| MAX_SESSION_STACK_SIZE | 会话栈大小(KB) | 1024 | 根据SQL复杂度调整 |
| CONNECTION_TIMEOUT | 连接超时时间(s) | 60-300 | 防止连接资源被长时间占用 |
| IDLE_TIMEOUT | 空闲会话超时时间(min) | 60-1440 | 自动回收长时间空闲的会话资源 |
2. 工作线程
工作线程用于处理数据库的各种任务,如SQL执行、IO操作等。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| WORKER_THREADS | 工作线程数 | CPU核心数 | 根据CPU核心数调整,一般建议与CPU核心数相同 |
| TASK_THREADS | 任务线程数 | CPU核心数的1/2到1 | 用于处理后台任务,如检查点、日志归档等 |
| IO_TASK_THREADS | IO任务线程数 | 8-16 | 用于处理IO相关的任务 |
3. 锁管理
锁管理参数用于控制数据库的锁行为,影响并发处理能力。
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| LOCK_MODE | 锁模式 | 0(默认锁模式) | 可以根据业务需求调整,如读多写少的系统可以使用乐观锁 |
| LOCK_TIMEOUT | 锁等待超时时间(s) | 30-120 | 防止会话长时间等待锁资源 |
| DEADLOCK_CHECK_INTERVAL | 死锁检查间隔(ms) | 1000 | 定期检查死锁,避免死锁长时间存在 |
| MAX_LOCKS | 最大锁数量 | 100000-500000 | 根据并发事务数量调整 |
SQL优化参数配置
SQL优化参数用于优化SQL查询的执行效率,包括查询优化器、执行计划、索引使用等。
1. 查询优化器
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| OPTIMIZER_MODE | 优化器模式 | 0(基于成本的优化器) | 一般建议使用基于成本的优化器,自动选择最优执行计划 |
| OPTIMIZER_LEVEL | 优化器级别 | 2(中级优化) | 根据SQL复杂度调整,复杂SQL可以使用高级优化 |
| HINT_FLAG | 是否启用Hint | 1(启用) | 允许使用Hint提示优化器选择特定的执行计划 |
| FORCE_INDEX_USED | 是否强制使用索引 | 0(不强制) | 一般建议不强制,让优化器自动选择 |
2. 执行计划
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| PLAN_CACHE_SIZE | 执行计划缓存大小(MB) | 64-256 | 根据SQL数量和复杂度调整,缓存频繁执行的SQL执行计划 |
| PLAN_CACHE_LIMIT | 单个执行计划的大小限制(KB) | 8192 | 限制单个执行计划的大小,避免占用过多内存 |
| AUTO_REOPTIMIZE | 是否启用自动重优化 | 1(启用) | 允许优化器根据实际执行情况调整执行计划 |
3. 索引使用
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| INDEX_USED_RATE | 索引使用率阈值(%) | 80 | 当索引使用率低于此阈值时,优化器可能选择全表扫描 |
| INDEX_STATS_UPDATE | 是否自动更新索引统计信息 | 1(启用) | 定期更新索引统计信息,确保优化器选择正确的执行计划 |
| INDEX_MERGE | 是否启用索引合并 | 1(启用) | 允许优化器合并多个索引的结果 |
存储参数配置
存储参数用于配置数据库的存储行为,包括表空间管理、数据文件管理、存储格式等。
1. 表空间管理
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| AUTO_EXTENT_SIZE | 自动扩展大小(MB) | 64-256 | 数据文件自动扩展的大小,根据数据增长速度调整 |
| MAX_EXTENT_SIZE | 最大扩展大小(MB) | 4096-16384 | 数据文件的最大大小,根据存储需求调整 |
| EXTENT_MANAGE_TYPE | 区管理类型 | 0(字典管理) | 一般建议使用字典管理,简单易用 |
2. 数据文件管理
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| DBFILE_PATH | 数据文件路径 | 单独的磁盘或分区 | 建议将数据文件放在单独的磁盘或分区,提高IO性能 |
| DBFILE_INIT_SIZE | 数据文件初始大小(MB) | 512-2048 | 根据表空间的预期大小调整 |
| DBFILE_STORAGE | 数据文件存储类型 | 0(普通存储) | 可以根据存储设备类型调整,如SSD可以使用高性能存储 |
3. 存储格式
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| PAGE_SIZE | 数据页大小(KB) | 8-32 | 根据数据访问模式调整,OLTP系统建议使用8KB,OLAP系统建议使用16KB或32KB |
| EXTENT_SIZE | 区大小(MB) | 1-8 | 根据表的大小调整,大表可以使用较大的区大小 |
| SEGMENT_SPACE_MANAGE | 段空间管理方式 | 0(自动管理) | 建议使用自动管理,简化管理工作 |
日志参数配置
日志参数用于配置数据库的日志行为,包括重做日志、归档日志、日志格式等。
1. 重做日志
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| RLOG_FILE_SIZE | 重做日志文件大小(MB) | 256-1024 | 日志文件越大,日志切换频率越低,减少系统开销 |
| RLOG_PARALLEL_ENABLE | 是否启用并行日志写入 | 1(启用) | 启用并行日志写入可以提高日志写入性能 |
| RLOG_SYNC_MODE | 日志同步模式 | 0(异步同步) | 一般建议使用异步同步,平衡性能和安全性 |
2. 归档日志
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| ARCH_INI | 是否启用归档模式 | 1(启用) | 生产环境建议启用归档模式,确保数据安全 |
| ARCH_KEEP_DELETE | 是否自动删除归档日志 | 1(启用) | 启用自动删除可以避免归档目录空间不足 |
| ARCH_KEEP_DAYS | 归档日志保留天数 | 7-30 | 根据数据备份策略调整 |
3. 日志格式
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| LOG_ENCRYPT_FLAG | 是否启用日志加密 | 0(不启用) | 根据安全需求调整,启用加密会影响性能 |
| LOG_COMPRESS_FLAG | 是否启用日志压缩 | 0(不启用) | 根据存储需求调整,启用压缩会增加CPU开销 |
备份恢复参数配置
备份恢复参数用于配置数据库的备份恢复行为,包括备份策略、恢复策略、备份压缩等。
1. 备份策略
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| BACKUP_BUFF_SIZE | 备份缓冲区大小(MB) | 64-256 | 缓冲区越大,备份速度越快,但会占用更多内存 |
| BACKUP_PARALLEL | 是否启用并行备份 | 1(启用) | 启用并行备份可以提高备份速度 |
| BACKUP_COMPRESS | 是否启用备份压缩 | 0(不启用) | 根据存储需求调整,启用压缩会增加CPU开销 |
2. 恢复策略
| 参数名称 | 描述 | 建议值 | 调整依据 |
|---|---|---|---|
| RECOVER_PARALLEL | 是否启用并行恢复 | 1(启用) | 启用并行恢复可以提高恢复速度 |
| RECOVER_BUF_SIZE | 恢复缓冲区大小(MB) | 64-256 | 缓冲区越大,恢复速度越快,但会占用更多内存 |
| RECOVER_AUTO_ROLLBACK | 是否自动回滚未提交事务 | 1(启用) | 恢复时自动回滚未提交的事务,确保数据一致性 |
不同场景下的参数优化
1. OLTP场景
OLTP(在线事务处理)场景的特点是并发事务多、数据访问频繁、响应时间要求高。
优化建议:
- 增大数据库缓冲区(BUFFER),建议设置为物理内存的50%-60%
- 增加工作线程数(WORKER_THREADS),建议与CPU核心数相同
- 增大重做日志缓冲区(RLOG_BUF_SIZE),建议设置为32-64MB
- 增大执行计划缓存(PLAN_CACHE_SIZE),建议设置为128-256MB
- 调整锁超时时间(LOCK_TIMEOUT),建议设置为30-60秒
关键参数配置示例:
ini
BUFFER = 16384
BUFFER_POOLS = 8
WORKER_THREADS = 16
RLOG_BUF_SIZE = 64
PLAN_CACHE_SIZE = 256
LOCK_TIMEOUT = 602. OLAP场景
OLAP(在线分析处理)场景的特点是数据量大规模、查询复杂、响应时间要求相对较低。
优化建议:
- 增大数据库缓冲区(BUFFER),建议设置为物理内存的60%-70%
- 增大排序缓冲区(SORT_BUF_SIZE),建议设置为16384-32768KB
- 增大哈希连接缓冲区(HJ_BUF_SIZE),建议设置为32768-65536KB
- 调整优化器级别(OPTIMIZER_LEVEL),建议设置为3(高级优化)
- 增大数据页大小(PAGE_SIZE),建议设置为16KB或32KB
关键参数配置示例:
ini
BUFFER = 24576
BUFFER_POOLS = 12
SORT_BUF_SIZE = 32768
HJ_BUF_SIZE = 65536
OPTIMIZER_LEVEL = 3
PAGE_SIZE = 323. 混合场景
混合场景同时包含OLTP和OLAP工作负载,需要在事务处理和数据分析之间取得平衡。
优化建议:
- 数据库缓冲区(BUFFER)设置为物理内存的50%-60%
- 工作线程数(WORKER_THREADS)设置为CPU核心数
- 排序缓冲区(SORT_BUF_SIZE)设置为8192-16384KB
- 执行计划缓存(PLAN_CACHE_SIZE)设置为128-256MB
- 优化器级别(OPTIMIZER_LEVEL)设置为2(中级优化)
关键参数配置示例:
ini
BUFFER = 20480
BUFFER_POOLS = 10
WORKER_THREADS = 16
SORT_BUF_SIZE = 16384
PLAN_CACHE_SIZE = 192
OPTIMIZER_LEVEL = 24. 大数据场景
大数据场景的特点是数据量特别大、查询复杂、计算密集。
优化建议:
- 数据库缓冲区(BUFFER)设置为物理内存的60%-70%
- 增加IO线程组数量(IO_THR_GROUPS)和每个组的线程数(IO_THR_PER_GROUP)
- 增大数据文件的初始大小(DBFILE_INIT_SIZE)和自动扩展大小(AUTO_EXTENT_SIZE)
- 启用并行备份和恢复(BACKUP_PARALLEL、RECOVER_PARALLEL)
- 调整优化器级别(OPTIMIZER_LEVEL)为3(高级优化)
关键参数配置示例:
ini
BUFFER = 32768
BUFFER_POOLS = 16
IO_THR_GROUPS = 4
IO_THR_PER_GROUP = 8
DBFILE_INIT_SIZE = 4096
AUTO_EXTENT_SIZE = 512
BACKUP_PARALLEL = 1
RECOVER_PARALLEL = 1
OPTIMIZER_LEVEL = 3配置方法
1. 配置文件修改
通过修改dm.ini配置文件来调整参数:
shell
# 编辑dm.ini文件
vi /opt/dmdbms/data/DAMENG/dm.ini
# 修改参数值,如:
BUFFER = 16384
WORKER_THREADS = 16
# 保存文件后重启数据库使参数生效
systemctl restart DmServiceDMSERVER2. 动态参数调整
对于支持动态调整的参数,可以通过SQL命令在线调整,无需重启数据库:
sql
-- 查看参数是否支持动态调整
SELECT para_name, para_value, is_sys, is_infile, is_dynamic FROM v$parameter WHERE para_name = 'BUFFER';
-- 动态调整参数(仅支持动态参数)
ALTER SYSTEM SET 'BUFFER' = 16384 SPFILE;
-- 查看参数当前值
SELECT para_value FROM v$parameter WHERE para_name = 'BUFFER';3. 会话级参数调整
对于会话级参数,可以在会话级别调整,仅影响当前会话:
sql
-- 查看会话级参数
SELECT * FROM v$session_parameter WHERE sess_id = SESSION_ID();
-- 设置会话级参数
ALTER SESSION SET 'OPTIMIZER_LEVEL' = 3;验证与监控
1. 参数验证
修改参数后,需要验证参数是否生效:
sql
-- 查看参数当前值
SELECT para_name, para_value FROM v$parameter WHERE para_name IN ('BUFFER', 'WORKER_THREADS', 'RLOG_BUF_SIZE');
-- 查看动态参数是否生效
SELECT para_name, para_value FROM v$dynamic_parameter WHERE para_name = 'BUFFER';2. 性能监控
监控参数调整后的性能变化,验证参数调整的效果:
sql
-- 监控数据库性能指标
SELECT name, value FROM v$sysstat WHERE name LIKE '%CPU%' OR name LIKE '%IO%' OR name LIKE '%BUFFER%';
-- 监控会话性能
SELECT sess_id, user_name, cpu_usage, io_usage, mem_usage FROM v$session_stat WHERE status = 'ACTIVE';
-- 监控SQL执行效率
SELECT sql_text, exec_time, avg_time, calls FROM v$sqlinfo WHERE exec_time > 1000 ORDER BY exec_time DESC;3. 性能测试
通过性能测试工具验证参数调整的效果:
- 使用DM性能测试工具进行基准测试
- 使用SysBench或TPCC工具进行压力测试
- 模拟实际业务场景进行性能测试
- 比较参数调整前后的性能差异
不同版本的差异
DM 7 vs DM 8
| 参数名称 | DM 7 | DM 8 |
|---|---|---|
| BUFFER | 支持静态调整 | 支持动态调整 |
| WORKER_THREADS | 固定值 | 可调整,建议与CPU核心数相同 |
| OPTIMIZER_LEVEL | 仅支持2个级别 | 支持3个级别,优化能力更强 |
| PLAN_CACHE_SIZE | 较小的默认值 | 较大的默认值,缓存更多执行计划 |
| IO_THR_GROUPS | 不支持 | 支持,可根据存储设备调整 |
| RLOG_PARALLEL_ENABLE | 不支持 | 支持,提高日志写入性能 |
DM 8.1 新特性
- 新增了更多动态参数,支持在线调整
- 增强了参数自动调优功能
- 新增了针对不同场景的参数模板
- 优化了内存管理算法,提高内存利用率
- 增强了IO调度机制,提高IO性能
常见问题(FAQ)
Q1: 参数调整后,数据库性能没有明显提升怎么办?
A1: 可能的原因和解决方案:
- 参数调整不当:重新分析工作负载特点,调整合适的参数
- 存在其他性能瓶颈:检查是否存在磁盘IO、网络、CPU等其他瓶颈
- SQL语句问题:优化SQL语句,创建合适的索引
- 硬件资源不足:考虑增加硬件资源,如内存、CPU、存储等
Q2: 如何确定最佳的缓冲区大小?
A2: 确定最佳缓冲区大小的方法:
- 逐步增大缓冲区大小,观察性能变化
- 监控缓冲区命中率,目标是达到95%以上
- 观察磁盘IO变化,缓冲区增大后,磁盘IO应该减少
- 根据物理内存大小调整,一般不超过物理内存的60%
Q3: 动态调整参数需要注意什么?
A3: 动态调整参数的注意事项:
- 只有支持动态调整的参数才能在线调整
- 动态调整的参数可能需要重启数据库才能永久生效
- 调整参数时要谨慎,避免影响数据库的稳定性
- 建议在业务低峰期进行参数调整
- 调整后要密切监控数据库性能
Q4: 如何监控参数调整的效果?
A4: 监控参数调整效果的方法:
- 监控数据库的响应时间和吞吐量变化
- 监控系统资源使用率,如CPU、内存、磁盘IO等
- 监控SQL查询的执行时间和计划变化
- 监控数据库的并发处理能力
- 定期生成性能报告,分析性能趋势
Q5: 如何优化高并发场景下的数据库性能?
A5: 高并发场景的优化建议:
- 增加工作线程数,提高并发处理能力
- 调整锁管理参数,减少锁等待和死锁
- 优化SQL语句,减少锁持有时间
- 增加数据库缓冲区,减少磁盘IO
- 调整IO参数,提高IO吞吐量
- 考虑使用读写分离架构,分担主库压力
Q6: 如何处理参数配置冲突?
A6: 处理参数配置冲突的方法:
- 理解参数之间的依赖关系,避免配置冲突
- 参考DM数据库官方文档,了解参数的建议值和限制
- 进行充分的测试,验证参数配置的合理性
- 遇到冲突时,优先保证数据库的稳定性
- 寻求DM数据库技术支持的帮助
