Skip to content

DM 并发参数

并发参数的作用

  • 控制并发会话数:限制最大并发连接数,防止系统资源耗尽
  • 优化锁管理:调整锁超时时间、死锁检测等参数
  • 提高事务处理效率:优化事务相关参数,提高事务处理速度
  • 控制线程数量:调整工作线程、I/O线程等数量
  • 优化并发控制:调整并发控制相关参数,减少锁冲突
  • 稳定系统运行:防止并发过高导致系统崩溃

并发参数的分类

  • 会话参数:控制并发会话数和会话相关资源
  • 锁参数:控制锁超时、死锁检测等
  • 并发控制参数:控制并发控制机制
  • 线程参数:控制工作线程、I/O线程等数量
  • 事务参数:控制事务相关参数
  • 内存参数:控制并发相关的内存分配

主要并发参数详解

1. 会话相关参数

MAX_SESSIONS

  • 描述:最大并发会话数
  • 默认值:100
  • 最小值:10
  • 最大值:65535
  • 调整建议:根据系统资源和负载情况调整,一般设置为CPU核心数的10-20倍
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'MAX_SESSIONS';

-- 修改值
SP_SET_PARA_VALUE(1, 'MAX_SESSIONS', 500);

MAX_SESSION_STACK_SIZE

  • 描述:每个会话的堆栈大小
  • 默认值:1024
  • 最小值:512
  • 最大值:8192
  • 单位:KB
  • 调整建议:根据应用程序需求调整,一般保持默认值

SESSION_MEM_SIZE

  • 描述:每个会话的内存大小
  • 默认值:2
  • 最小值:1
  • 最大值:64
  • 单位:MB
  • 调整建议:根据并发会话数调整,确保总会话内存不超过物理内存的20%
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'SESSION_MEM_SIZE';

-- 修改值
SP_SET_PARA_VALUE(2, 'SESSION_MEM_SIZE', 4);

SESSION_CACHED_CURSORS

  • 描述:每个会话缓存的游标数量
  • 默认值:50
  • 最小值:0
  • 最大值:1000
  • 调整建议:根据应用程序的游标使用情况调整,一般设置为50-200

2. 锁相关参数

LOCK_TIMEOUT

  • 描述:锁超时时间
  • 默认值:10
  • 最小值:0
  • 最大值:3600
  • 单位:秒
  • 调整建议:根据应用程序需求调整,一般设置为10-60秒
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'LOCK_TIMEOUT';

-- 修改值
SP_SET_PARA_VALUE(1, 'LOCK_TIMEOUT', 30);

DEADLOCK_CHECK_INTERVAL

  • 描述:死锁检测间隔时间
  • 默认值:1000
  • 最小值:100
  • 最大值:10000
  • 单位:毫秒
  • 调整建议:根据系统负载调整,一般设置为1000-5000毫秒

DEADLOCK_MAX_TIMEOUT

  • 描述:死锁检测的最大超时时间
  • 默认值:10000
  • 最小值:1000
  • 最大值:60000
  • 单位:毫秒
  • 调整建议:根据系统负载调整,一般设置为10000-30000毫秒

LOCK_NUM

  • 描述:锁的最大数量
  • 默认值:50000
  • 最小值:1000
  • 最大值:1000000
  • 调整建议:根据并发事务数调整,一般设置为MAX_SESSIONS的50-100倍

3. 并发控制参数

ENABLE_LOCK_ESCALATION

  • 描述:是否启用锁升级
  • 默认值:1(启用)
  • 取值范围:0(不启用),1(启用)
  • 调整建议:对于高并发系统,建议启用锁升级
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'ENABLE_LOCK_ESCALATION';

-- 修改值
SP_SET_PARA_VALUE(1, 'ENABLE_LOCK_ESCALATION', 1);

LOCK_ESCALATION_THRESHOLD

  • 描述:锁升级阈值
  • 默认值:1000
  • 最小值:100
  • 最大值:10000
  • 调整建议:根据系统负载调整,一般设置为1000-5000

LOCK_ESCALATION_PERCENT

  • 描述:锁升级百分比
  • 默认值:10
  • 最小值:1
  • 最大值:100
  • 调整建议:根据系统负载调整,一般设置为5-20%

TRANS_LOCK_MODE

  • 描述:事务锁模式
  • 默认值:0(行级锁)
  • 取值范围:0(行级锁),1(页级锁)
  • 调整建议:对于大多数系统,建议使用行级锁

4. 线程相关参数

WORKER_THREADS

  • 描述:工作线程数量
  • 默认值:4
  • 最小值:1
  • 最大值:64
  • 调整建议:根据CPU核心数调整,一般设置为CPU核心数的1-2倍
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'WORKER_THREADS';

-- 修改值
SP_SET_PARA_VALUE(2, 'WORKER_THREADS', 8);

IO_THR_GROUPS

  • 描述:I/O线程组数量
  • 默认值:1
  • 最小值:1
  • 最大值:16
  • 调整建议:根据存储设备类型和数量调整,一般设置为存储设备数量

IO_THR_PER_GRP

  • 描述:每个I/O线程组的I/O线程数量
  • 默认值:4
  • 最小值:1
  • 最大值:64
  • 调整建议:根据CPU核心数和存储设备性能调整,一般设置为CPU核心数的1/4-1/2

TASK_THREADS

  • 描述:任务线程数量
  • 默认值:4
  • 最小值:1
  • 最大值:64
  • 调整建议:根据系统负载调整,一般设置为CPU核心数的1-2倍

5. 事务相关参数

MAX_TRANS

  • 描述:最大并发事务数
  • 默认值:1000
  • 最小值:100
  • 最大值:100000
  • 调整建议:根据并发会话数调整,一般设置为MAX_SESSIONS的5-10倍
sql
-- 查看当前值
SELECT NAME, VALUE FROM V$DM_INI WHERE NAME = 'MAX_TRANS';

-- 修改值
SP_SET_PARA_VALUE(2, 'MAX_TRANS', 5000);

TRANS_LOG_SEND_WAIT_TIME

  • 描述:事务日志发送等待时间
  • 默认值:60
  • 最小值:10
  • 最大值:3600
  • 单位:秒
  • 调整建议:根据网络状况调整,一般设置为60-300秒

TRANS_COMMIT_WAIT_TIME

  • 描述:事务提交等待时间
  • 默认值:0
  • 最小值:0
  • 最大值:3600
  • 单位:秒
  • 调整建议:一般保持默认值

AUTO_COMMIT

  • 描述:是否启用自动提交
  • 默认值:0(不启用)
  • 取值范围:0(不启用),1(启用)
  • 调整建议:根据应用程序需求调整,生产环境一般不建议启用自动提交

6. 内存相关参数

SESSION_MEM_SIZE

  • 描述:每个会话的内存大小
  • 默认值:2
  • 最小值:1
  • 最大值:64
  • 单位:MB
  • 调整建议:根据并发会话数调整,确保总会话内存不超过物理内存的20%

SORT_BUF_SIZE

  • 描述:每个会话的排序区大小
  • 默认值:1024
  • 最小值:64
  • 最大值:1048576
  • 单位:KB
  • 调整建议:根据排序操作的频率和大小调整,一般设置为2048-8192 KB

HASH_AREA_SIZE

  • 描述:每个会话的哈希区大小
  • 默认值:1024
  • 最小值:64
  • 最大值:1048576
  • 单位:KB
  • 调整建议:根据哈希连接操作的频率和大小调整,一般设置为2048-8192 KB

并发参数配置方法

1. 使用系统过程修改

可以使用SP_SET_PARA_VALUE系统过程修改并发参数,该方法可以立即生效或重启后生效,具体取决于参数类型。

sql
-- 立即生效(系统级参数)
SP_SET_PARA_VALUE(1, 'LOCK_TIMEOUT', 30);

-- 重启后生效(会话级参数)
SP_SET_PARA_VALUE(2, 'MAX_SESSIONS', 500);

2. 修改dm.ini配置文件

可以直接修改dm.ini配置文件中的并发参数,修改后需要重启数据库实例才能生效。

ini
-- dm.ini文件示例
MAX_SESSIONS = 500
MAX_TRANS = 5000
LOCK_TIMEOUT = 30
DEADLOCK_CHECK_INTERVAL = 2000
WORKER_THREADS = 8
IO_THR_PER_GRP = 4
SESSION_MEM_SIZE = 4
SORT_BUF_SIZE = 4096
HASH_AREA_SIZE = 4096

3. 使用DM管理工具修改

可以使用DM管理工具图形界面修改并发参数:

  1. 启动DM管理工具,连接到数据库实例
  2. 选择"配置" -> "参数配置"
  3. 在左侧导航树中选择"并发参数"
  4. 修改相应的参数值
  5. 点击"应用"保存修改
  6. 根据提示重启数据库实例(如果需要)

4. 使用DM性能监控工具修改

可以使用DM性能监控工具实时监控和修改并发参数:

  1. 启动DM性能监控工具,连接到数据库实例
  2. 选择"性能" -> "并发监控"
  3. 查看当前并发使用情况
  4. 点击"参数调整"修改并发参数
  5. 保存修改并重启数据库实例(如果需要)

并发参数调优最佳实践

1. 总体调优原则

  • 根据系统资源调整:根据CPU核心数、内存大小等调整并发参数
  • 逐步调整:每次只调整少数几个参数,观察效果后再调整
  • 监控并发使用情况:定期监控并发会话数、锁等待等指标
  • 考虑应用程序特性:不同的应用程序有不同的并发需求
  • 避免过度并发:过度并发会导致系统资源耗尽
  • 优化应用程序:优化应用程序代码,减少并发冲突

2. 会话参数调优建议

  • 合理设置MAX_SESSIONS:根据系统资源和负载情况调整,一般设置为CPU核心数的10-20倍
  • 监控会话使用率:定期监控会话使用率,避免会话数不足或过多
  • 优化连接池:在应用程序中使用连接池,提高连接重用率
  • 设置合理的会话超时时间:避免空闲会话占用资源

3. 锁参数调优建议

  • 设置合理的LOCK_TIMEOUT:根据应用程序需求调整,一般设置为10-60秒
  • 启用死锁检测:生产环境建议启用死锁检测
  • 调整死锁检测间隔:根据系统负载调整,避免频繁检测影响性能
  • 监控锁等待情况:定期监控锁等待事件,识别锁冲突热点

4. 并发控制参数调优建议

  • 启用锁升级:对于高并发系统,建议启用锁升级
  • 设置合理的锁升级阈值:根据系统负载调整,避免频繁锁升级
  • 选择合适的锁模式:根据应用程序需求选择行级锁或页级锁
  • 优化SQL语句:优化SQL语句,减少锁持有时间

5. 线程参数调优建议

  • 调整WORKER_THREADS:根据CPU核心数调整,一般设置为CPU核心数的1-2倍
  • 调整I/O线程数量:根据存储设备性能调整,提高I/O处理能力
  • 监控线程使用率:定期监控线程使用率,避免线程数不足或过多
  • 考虑CPU核心数:线程数量不宜超过CPU核心数的2倍

6. 事务参数调优建议

  • 设置合理的MAX_TRANS:根据并发会话数调整,一般设置为MAX_SESSIONS的5-10倍
  • 优化事务设计:尽量使用短事务,减少锁持有时间
  • 避免长事务:长事务会导致锁冲突和系统资源占用
  • 使用合适的隔离级别:根据应用程序需求选择合适的隔离级别

并发监控与管理

1. 并发使用监控

可以使用以下视图监控并发使用情况:

  • V$SESSION:查看当前会话信息
  • V$TRANSACTION:查看当前事务信息
  • V$LOCK:查看当前锁信息
  • V$LOCK_WAIT:查看锁等待信息
  • V$DEADLOCK_HISTORY:查看死锁历史信息
  • V$SYSSTAT:查看系统统计信息,包括并发相关指标
sql
-- 查看当前会话数
SELECT COUNT(*) FROM V$SESSION;

-- 查看当前事务数
SELECT COUNT(*) FROM V$TRANSACTION;

-- 查看锁等待情况
SELECT * FROM V$LOCK_WAIT;

-- 查看死锁历史
SELECT * FROM V$DEADLOCK_HISTORY;

-- 查看并发相关统计信息
SELECT NAME, VALUE FROM V$SYSSTAT WHERE NAME LIKE '%CONCURRENCY%' OR NAME LIKE '%LOCK%' OR NAME LIKE '%SESSION%';

2. 并发故障诊断

  • 会话数不足:如果出现"会话数超过限制"错误,需要增加MAX_SESSIONS
  • 锁等待超时:如果出现"锁等待超时"错误,需要调整LOCK_TIMEOUT或优化SQL语句
  • 死锁:如果出现死锁,需要分析死锁原因,优化应用程序代码
  • 线程使用率过高:如果线程使用率过高,需要调整线程数量或优化应用程序

3. 并发管理建议

  • 定期监控:定期监控并发使用情况,及时发现问题
  • 设置告警:为并发相关指标设置告警阈值
  • 优化应用程序:优化应用程序代码,减少并发冲突
  • 使用连接池:在应用程序中使用连接池,提高连接重用率
  • 考虑读写分离:对于读写分离的场景,可以配置多个实例
  • 使用集群:对于高并发系统,考虑使用DMDSC、DMRAC等集群方案

常见问题(FAQ)

Q1: 如何确定合适的MAX_SESSIONS值?

A1: 确定合适的MAX_SESSIONS值需要考虑以下因素:

  • CPU核心数:一般设置为CPU核心数的10-20倍
  • 内存大小:每个会话需要消耗一定的内存
  • 存储设备性能:I/O性能限制了并发处理能力
  • 应用程序特性:不同的应用程序有不同的并发需求
  • 历史并发峰值:根据历史并发峰值调整

Q2: 锁等待超时怎么办?

A2: 处理锁等待超时的方法:

  • 增加LOCK_TIMEOUT值
  • 优化SQL语句,减少锁持有时间
  • 分析锁等待原因,识别锁冲突热点
  • 考虑使用更细粒度的锁
  • 优化应用程序设计,减少并发冲突

Q3: 如何处理死锁问题?

A3: 处理死锁问题的方法:

  • 启用死锁检测
  • 调整死锁检测间隔
  • 分析死锁原因,优化应用程序代码
  • 避免长事务
  • 优化SQL语句,减少锁持有时间
  • 考虑使用更细粒度的锁

Q4: 如何优化并发性能?

A4: 优化并发性能的方法:

  • 调整并发参数,提高并发处理能力
  • 优化应用程序代码,减少并发冲突
  • 使用连接池,提高连接重用率
  • 优化SQL语句,减少锁持有时间
  • 考虑使用读写分离
  • 考虑使用集群方案
  • 升级硬件设备,提高系统资源

Q5: 如何监控并发使用情况?

A5: 监控并发使用情况的方法:

  • 使用V$SESSION、V$TRANSACTION、V$LOCK等视图
  • 使用DM管理工具的并发监控功能
  • 使用DM性能监控工具
  • 设置并发相关指标的告警
  • 定期生成并发使用报告

Q6: 线程数量设置多少合适?

A6: 线程数量的设置需要考虑以下因素:

  • CPU核心数:线程数量不宜超过CPU核心数的2倍
  • 系统负载类型:CPU密集型和I/O密集型系统有不同的线程需求
  • 存储设备性能:I/O密集型系统需要更多的I/O线程
  • 应用程序特性:不同的应用程序有不同的线程需求

Q7: 如何处理会话数不足的问题?

A7: 处理会话数不足的方法:

  • 增加MAX_SESSIONS值
  • 优化应用程序,减少并发会话数
  • 使用连接池,提高连接重用率
  • 关闭空闲会话
  • 考虑使用读写分离
  • 考虑使用集群方案

Q8: 如何优化事务处理效率?

A8: 优化事务处理效率的方法:

  • 使用短事务,减少锁持有时间
  • 避免长事务
  • 优化SQL语句,减少事务执行时间
  • 选择合适的隔离级别
  • 调整事务相关参数
  • 考虑使用批量操作

Q9: 如何选择合适的锁模式?

A9: 选择合适的锁模式需要考虑以下因素:

  • 应用程序特性:不同的应用程序有不同的锁需求
  • 并发水平:高并发系统适合使用行级锁
  • 数据访问模式:读多写少的场景适合使用行级锁
  • 性能需求:行级锁比页级锁更细粒度,但性能开销更大

Q10: 如何避免过度并发?

A10: 避免过度并发的方法:

  • 合理设置MAX_SESSIONS值
  • 监控并发使用率,避免超过系统承载能力
  • 优化应用程序,减少并发冲突
  • 使用限流机制,控制并发请求数
  • 考虑使用队列,异步处理请求

版本差异说明

版本主要变化
DM 7支持基本的并发参数配置
DM 8增强了并发管理功能,支持更多并发参数
DM 8.1优化了并发控制机制,提高了并发处理能力

在进行并发参数调优时,需要注意以下几点:

  • 根据系统资源和负载情况调整并发参数
  • 逐步调整,观察效果后再进一步优化
  • 监控并发使用情况,及时发现问题
  • 考虑应用程序特性和业务需求
  • 优化应用程序代码,减少并发冲突
  • 避免过度并发,防止系统资源耗尽

通过合理的并发参数配置和调优,可以充分利用系统资源,提高DM数据库的并发处理能力,为业务提供高效、稳定的数据服务。