Oracle XE 21c配置HammerDB性能基准测试出现KPEDBG类报错如何解决
问题说明
使用HammerDB针对Oracle Database 21c Express Edition(版本号21.3.0.0.0)开展TPC-C性能基准测试,已提前准备好schema创建脚本、驱动脚本,预先执行的表空间创建、tpcc用户创建操作均成功,但执行schema构建或运行基准测试时会随机触发报错,仅偶发场景可正常运行,且环境约束为不可迁移至Oracle企业版。
已完成的前置配置
- 切换至目标可插拔数据库XEPDB1,执行语句:
alter session set container=XEPDB1; - 创建10G容量、支持自动扩展的测试数据表空间:
create tablespace tpcctab datafile 'tpcctab.dat' size 10G autoextend on; - 创建5G容量、支持自动扩展的测试临时表空间:
create temporary tablespace tpcctemp tempfile 'tpcctemp.dat' size 5G autoextend on; - 在initXE.ora参数文件中添加共享调度器配置:
mts_dispatchers="(address=(partial=true)(protocol=tcp)(host=192.168.192.11.1)(port=1521))(dispatchers=8)"
随机报错类型
KPEDBG_HDL_PUSH_FCPTRMAXKPEDBG_HDL_POP_FCPTRKPEDBG-...TLS ORA-24550及关联错误- 偶发无报错、流程可正常执行
排查解决步骤
所有报错均为21c XE版本的已知兼容问题,按以下优先级操作即可解决:
- 移除手动配置的MTS共享服务器模式,改用专用连接
手动添加的mts_dispatchers配置会强制所有连接走共享服务器模式,21c XE的共享服务器模块对高并发下的游标处理、句柄回收存在已知bug,是触发KPEDBG_HDL_*系列句柄错误的核心原因。
操作:- 删除initXE.ora中所有
mts_dispatchers相关配置行 - 重启数据库实例生效
- 修改HammerDB中的Oracle连接串,明确指定专用连接模式,参考配置:
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.192.11.1)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XEPDB1))) - 删除initXE.ora中所有
- 关闭服务端非必要网络加密配置,修复ORA-24550 TLS错误
ORA-24550是21c默认开启的原生网络加密、校验功能与HammerDB内置的轻量Oracle驱动存在TLS版本协商冲突导致的。
操作:- 编辑数据库服务器端的
sqlnet.ora文件,添加以下两行配置:
SQLNET.ENCRYPTION_SERVER=REJECTED SQLNET.CRYPTO_CHECKSUM_SERVER=REJECTED- 重启数据库监听、数据库实例生效
- 编辑数据库服务器端的
- 调整隐含参数提升调试句柄上限,解决句柄溢出报错
21c XE版本默认将内核调试句柄上限设置得极低,高并发场景下很容易触发上限抛出KPEDBG_HDL_PUSH_FCPTRMAX错误。
操作:以sysdba身份登录数据库执行以下参数修改,重启实例生效:alter system set "_kpe_debug_handle_max"=4096 scope=spfile; alter system set event='10501 trace name context forever, level 1' scope=spfile; - 适配HammerDB侧配置降低触发概率
- Schema创建阶段将并行建表度设置为≤2,不要开高并行批量建表
- 基准测试爬坡阶段将虚拟用户新增速率设置为1个/秒,不要瞬间拉满全量并发
- 替换HammerDB内置的轻量Oracle驱动为19c版本完整Oracle Client驱动,进一步降低兼容问题概率
内容的提问来源于stack exchange,提问作者user17939629
相关产品推荐
相关产品推荐

