当前位置: 首页 > news >正文

【案例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,保存文件配置并重启达梦实例服务再测。

http://www.dtcms.com/a/108373.html

相关文章:

  • 在Ubuntu20.04开发Dify插件教程,部署Dify插件脚手架
  • 深度学习 Deep Learning 第15章 表示学习
  • 针对 MySQL 数据库的详细说明,分类列出临时资源(临时表、游标、未提交事务、会话变量、预编译语句)的创建、清理方式及未清理后果,并以表格总结
  • [CH32] RISC-V汇编指令解释
  • linux下springboot项目守护进程编写
  • arm64平台下linux访问寄存器
  • Python----机器学习(线性回归:前向传播和损失函数)
  • 【C++基础知识】 C 预处理器中的 #line 指令详解
  • RabbitMQ应用2
  • Linux系统之SFTP-搭建SFTP服务器
  • ui-tars和omni-parser使用
  • JavaScript 模块化详解( CommonJS、AMD、CMD、ES6模块化)
  • 网络安全-等级保护(等保) 1-0 等级保护制度公安部前期发文总结
  • 蓝桥杯 web 表格数据转化(组件挂载、模板字符串)
  • 【硬件视界9】网络硬件入门:从网卡到路由器
  • C# 扩展方法
  • 跨网连接vscode
  • 银联三级等保定级报告
  • CMake学习--Window下VSCode 中 CMake C++ 代码调试操作方法
  • 闭环SOTA!北航DiffAD:基于扩散模型实现端到端自动驾驶「多任务闭环统一」
  • 面基spring如何处理循环依赖问题
  • conda 清除 tarballs 减少磁盘占用 、 conda rename 重命名环境、conda create -n qwen --clone 当前环境
  • 机器学习、深度学习和神经网络
  • vscode调试python(transformers库的llama为例)
  • C#实现HiveQL建表语句中特殊数据类型的包裹
  • 用docker部署goweb项目
  • RainbowDash 的 Robot
  • C++学习笔记(三十一)——map
  • Git的基础使用方法
  • 微信小程序唤起app