【案例89】达梦数据库优化器参数导致的SQL执行错误

问题现象

客户反馈一个问题,在通过系统打开单据,进行关联用户查询的时候,系统报错:“不支持的复杂查询”。

问题分析

这个报错看上去是SQL语法不受支持导致。但这个SQL为发版标准SQL,是经过验证没有拼接错误的。先手动测试一下SQL。发现直接执行SQL也是有报错。问题依然存在。

对比测试,发现这个问题在另一个测试环境没有复现。因此这个问题应该是和参数的调整有关。于是检查正式环境和测试环境的参数对比发现,正式环境的OPTIMIZER_MODE参数被调整过。

这个参数是一个关键参数,是控制优化器模式的,在最新的DM v8版本中,这个参数的默认值为1,指的是使用新优化器模式,而当前环境将参数改为了0,则表示使用旧的优化器模式,应该是这个问题导致的原因。

经过测试,测试环境在OPTIMIZER_MODE设定为1时,SQL执行正常,可用查询出数据,但改为0并生效后,该SQL就会同样的-4034错误。因此可用确认问题所在。

解决方案

1、由于OPTIMIZER_MODE的默认值为1,系统中将其改为0,可能是有特定场景需要而调整。因此要修改该参数前,需要和项目上的运维人员确认一下变更记录,了解是因为什么原因或需求才进行修改的。调整参数是否会有影响。

2、修改方法

SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);

重启数据库生效。或者直接编辑 dm.ini文件,将参数的值修改为1,保存文件配置并重启达梦实例服务再测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值