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

【YashanDB知识库】insert语句有编码不识别字,执行卡住问题

问题现象

insert语句卡住,yasdb worker线程cpu占用99.9%

问题风险及影响

sql执行不了

问题影响版本

22.2.16.1、23.3.0.61及之前版本

问题发生原因

lex解析时,对于不能识别字符的特殊场景,形成死循环。

1、alter system kill session ‘22,26’; kill掉session后,发现session显示状态为killed,但是session一直存在,未退出。

2、由于session kill后,一直未销毁,cpu也被占用,猜测sql跑某个步骤未退出。用堆栈调试,发现lex解析时,陷入死循环。

发现数据如下图,‘.\203\066\312\063’,换成16进制为0x83,0x36,0xCA,0x33,这些字符既不是gbk、也不是utf编码。

解决方法及规避方式

1、yasboot cluster restart -c yashandb -d

2、输入正常的字符编码的sql

问题分析和处理过程

复现用例,这些字符既不是gbk、也不是utf编码,正常写insert sql是写不出来的,所以使用16进制替换字符的方式,使用c驱动来复现。

'.'字符是普通字符

0x83,0x36,0xCA,0x33这四个字符组成的数据既不是gbk编码、也不是utf编码的字符。

服务端是gbk编码,lex解析时,在gbkNextCharLengthb处,在0x83字符mblen为-1,往前走1位,'.'字符mblen为1,往后走1,形成死循环。

内核代码bug,修改代码即可。

经验总结

1、数据同步迁移时,数据转换的编码最好先约定好,对于编码格式不能识别的字符,转换为能识别的编码。

2、终端、客户端编码需要一致。


http://www.kler.cn/a/449483.html

相关文章:

  • R语言数据分析案例46-不同区域教育情况回归分析和探索
  • 重塑数字文档处理:TX Text Control的2024年里程碑
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
  • IT运维的365天--021 服务器上的dns设置后不起作用
  • echarts画风向杆
  • Vue进阶之Vue RouterSSR
  • 掌握命令行参数的艺术:Python的`argparse`库
  • Java 连接 FTP 服务器全解析
  • 35道面向初中级前端的基础面试题
  • 汉塔上网行为管理 ping.php 远程命令执行漏洞复现(附脚本)
  • 计算机毕设-基于springboot的校园招聘网站的设计与实现(附源码+lw+ppt+开题报告)
  • Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
  • VScode中配置ESlint+Prettier详细步骤(图文详情)
  • 重温设计模式--建造者模式
  • 基于矩阵乘积态的生成模型:量子力学与生成任务的结合
  • Transformer自注意力机制详解
  • Rust之抽空学习系列(五)—— 所有权(上)
  • 《点点之歌》“意外”诞生记
  • 【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
  • springboot+vue的高校宿舍管理系统
  • iOS - 超好用的隐私清单修复脚本(持续更新)
  • DDoS防护中的流量清洗与智能调度
  • 云原生服务网格Istio实战
  • Spring学习(一)——Sping-XML
  • Sigrity Speed2000 仿真分析教程与实例分析文件路径
  • 【漫话机器学习系列】019.布里(莱)尔分数(Birer score)