问题现象
YashanDB在实际使用中有不少用于跑批量任务的场景,有哪些参数要注意?
问题的风险及影响
影响跑批性能
问题影响的版本
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 | 根据实际情况调整大小 |
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。