Skip to content

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_GROUPSIO线程组数量存储设备数量每个IO线程组对应一个存储设备或RAID组
IO_THR_PER_GROUP每个IO线程组的线程数4-8根据存储设备的IO处理能力调整
IO_WAIT_TIMEIO等待时间(ms)3000IO操作的超时时间,根据存储设备的响应时间调整
IO_SLAVE_NUMIO从线程数量0一般建议不启用,除非存储设备支持并行IO

2. IO调度配置

IO调度用于管理和优化IO请求的处理顺序,提高IO吞吐量。

参数名称描述建议值调整依据
IO_SCHEDULERIO调度器类型0(默认调度器)可以根据存储设备类型调整,如SSD建议使用NOOP调度器
IO_BUF_SIZEIO缓冲区大小(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_THREADSIO任务线程数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是否启用Hint1(启用)允许使用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 = 60

2. 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 = 32

3. 混合场景

混合场景同时包含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 = 2

4. 大数据场景

大数据场景的特点是数据量特别大、查询复杂、计算密集。

优化建议

  • 数据库缓冲区(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 DmServiceDMSERVER

2. 动态参数调整

对于支持动态调整的参数,可以通过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 7DM 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数据库技术支持的帮助