外观
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 = 40963. 使用DM管理工具修改
可以使用DM管理工具图形界面修改并发参数:
- 启动DM管理工具,连接到数据库实例
- 选择"配置" -> "参数配置"
- 在左侧导航树中选择"并发参数"
- 修改相应的参数值
- 点击"应用"保存修改
- 根据提示重启数据库实例(如果需要)
4. 使用DM性能监控工具修改
可以使用DM性能监控工具实时监控和修改并发参数:
- 启动DM性能监控工具,连接到数据库实例
- 选择"性能" -> "并发监控"
- 查看当前并发使用情况
- 点击"参数调整"修改并发参数
- 保存修改并重启数据库实例(如果需要)
并发参数调优最佳实践
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数据库的并发处理能力,为业务提供高效、稳定的数据服务。
