要有好的跑批性能,有哪些参数要注意
问题现象
YashanDB在实际使用中有不少用于跑批量任务的场景,经常有用户咨询我们要取的好的跑批性能,有哪些参数要注意?
这里列举对性能有影响,特别是对跑批有影响的参数,供大家参考,更多性能调优,可参考官网 数据库性能基础 | YashanDB Doc
问题的风险及影响
影响跑批性能
问题影响的版本
YashanDB版本:23.2及以上所有版本
解决方法及规避方式
存储过程跑批在多个客户中出现过,在多次实践中,得出相关最佳配置,供参考如下。
1、空间划分
评估好提前规划好表空间,一次性把文件扩好,避免在跑批过程扩文件。
挂载多个磁盘,REDO和dbfiles划分不同盘(REDO有大量的读写,和dbfiles在不同的盘,可以充分利用IO)
REDO文件个数及大小:10个REDO文件,每个2G(文件足够大,避免日志追尾)
2、后台快照管理
关闭快照,或把快照保留较长时间,在跑批完成之后再修改会常规(默认7天)自动清理,避免在跑批的过程,触发了快照清理,影响性能
3、统计信息收集
在跑批之前,收集统计信息,如果历史数据不足或其他原因会造成统计信息在跑批的过程中生效,需要对相应的表做统计信息的锁定。
4、参数调整
配置项 |
参数 |
最佳值 |
说明/检查调整方法 |
REDO |
REDO_BUFFER_PARTS |
32(最大值) |
REDO_BUFFER的划分个数,不同session的日志写入不同的REDO_BUFFER段以便减少并发冲突 |
REDO_BUFFER_SIZE |
128M(最大值) |
|
|
checkpoint |
CHECKPOINT_INTERVAL |
2G |
避免跑批期间触发checkpoint,如果跑批数据量过大, 则不可避免会发生checkpoint,可以忽略此配置 |
CHECKPOINT_TIMEOUT |
3600 |
||
DBWR_BUFFER_SIZE |
32M(最大值) |
||
DBWR_COUNT |
16(最大值) |
||
IO |
REDOFILE_IO_MODE |
DSYNC |
使用异步, DEFAULT有掉电风险 |
DATAFILE_IO_MODE |
DSYNC |
使用异步 |
|
COMMIT_LOGGING |
BATCH |
使用批量 |
|
COMMIT_WAIT |
NOWAIT |
事务提交时无需等待日志落盘即返回成功。发生宕机可能导致数据不一致, 跑批的场景可以使用,因为发生异常可以重跑,在线交易类不可使用 |
|
并行 |
MAX_SESSIONS |
4096 |
|
OPEN_CURSORS |
4096 |
|
|
MAX_WORKERS |
1024 |
|
|
MAX_PARALLEL_WORKERS |
1024 |
|
|
DEGREE_OF_PARALLEL |
CPU核数一半 |
建议不超过CPU核数的一半,否则会导致性能严重劣化 |
|
WORK_AREA_POOL_SIZE |
客户端发起并行压测线程数*WORK_AREA_STACK_SIZE |
实际application pool中不止线程堆栈, 根据实际使用调整加大 |
|
WORK_AREA_STACK_SIZE |
64M(最大值) |
线程堆栈大小 |
|
WORK_AREA_HEAP_SIZE |
4M(最大值) |
会话内执行内存区(堆方式)大小 |
|
PQ_POOL_SIZE |
128M |
指定并行线程间数据传递使用的内存池大小。 |
|
内存 |
USE_LARGE_PAGES |
TRUE |
启用大页内存,需要操作系统启动大页内存, 并关闭透明大页, 配置大页内存页数 |
VM_BUFFER_SIZE |
根据业务数据量配置 |
排序等操作多,可以适当配搭, 通过观察V$VM,查看是否耗尽 |
|
DATA_BUFFER_SIZE |
根据业务数据量配置 |
全部数据加载到内存是最快的,配置过大则浪费了, 如业务数据量只有100G, 配置了200G则用不完, 观察awr报告中的free buffer wait事件,如果出现次数多则配置需要调高 |
|
SHARE_POOL_SIZE |
sql main + application pool + pl sql pool + dc |
查看V$global_mpool核查各项内存的消耗情况做调整, 具体参考 |
|
SQL_POOL_SIZE |
根据实际情况调整百分比 |
对应sql main pool 在share pool的占比, 缓存了SQL语句及其执行计划, 如果客户使用的sql语句很多, 特别是没绑定变量, 需要加大该池子 |
|
CURSOR_POOL_SIZE |
根据实际情况调整大小 |
取决于用户是否大量使用游标 |
|
_PL_POOL_MEMORY_PERCENT |
根据实际情况调整百分比 |
pl sql pool在share pool中占比大小 |
|
_PROCEDURE_LOCK_TIMEOUT |
100 |
存储过程编译等待超时的时间,单位为秒。 |
|
DICTIONARY_CACHE_SIZE |
根据实际情况调整百分比 |
|
|
LARGE_POOL_SIZE |
根据实际情况调整大小 |
|