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

五花八门客户问题(BUG) - 数据库索引损坏

问题

曾经有个客户问题,让我们开发不知所措了很久。简单点说就是客户的index周期性的损坏,即使全部重建后经历大约1~2周数据update后也会坏掉。导致的直接结果:select出来的数据不对。问题很严重。

直接看损坏的index文件看不出什么蛛丝马迹,因为它已经面目全非。所以我们一直想拿到第一条导致update出错的insert、update,或者delete.

开始探索

沿着上面提到的思路,给力的support写了一个trigger,只要每次更新(insert、update,或者delete)数据,trigger就调用index检查程序检查index文件是否有问题。客户也比较配合的部署上了,但是只过了几天就禁用掉了,因为每次检查index文件都耗时巨大,直接拖慢了客户business performance。

另寻他路

除了trigger,我们还可以出diagnostic build, 基本就是往怀疑的地方加log,此种办法耗时耗力:先在对应的版本上改代码-> 编译 -> 发给客户 -> 客户部署,重启数据库. 一般来往一次耗时一两周,而且一次都不一定成功。

后来我又想出一个办法:客户发我们问题表,同时我们帮客户记录下客户的所有更新直到select结果不对。我们有继承数据(index没问题的表),在实验室一条条的重复更新客户操作即可。这个办法涉及客户数据,取决于他们在不在乎。好在客户不care这些。

BUG

后来我们真的在实验室重现了,罪魁祸首竟然是index建在最后一个字段大量更新后就会有问题。看来测试不能放过任何一种情况啊,起码得设计三个字段然后所有可以创建index的列的组合都要设计test case。

附加产出

如何记录客户的更新:我们有一个replication功能(本人负责),正常是把更新发给另外一台机器的,但也可以暂时不发而是写入一个log文件,于是我拿到log文件就拿到了客户的更新。

把log文件中的更新写入表:我写了一个replay.py解析log文件中的每一条更新,调用数据库接口写入表中。

相关文章:

  • docker镜像仓库hub.docker.com无法访问
  • 本地搭建Linux DataEase数据可视化分析工具并实现公网访问
  • 举例说明自然语言处理(NLP)技术。
  • 汽车网络安全--ISO\SAE 21434解析(一)
  • AI:大语言模型训练方法 - 机器学习
  • LLMs 应用程序的构建利器:LangChain 助您驰骋 AI 世界 | 开源日报 No.100
  • xml文本转Java对象
  • 基于PicGo实现Typora图片自动上传GitHub
  • React全站框架Next.js使用入门
  • STM32算法
  • 【NEON】学习资料汇总
  • Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了银牌总结)
  • LLM之Agent(五)| AgentTuning:清华大学与智谱AI提出AgentTuning提高大语言模型Agent能力
  • 用23种设计模式打造一个cocos creator的游戏框架----(十)迭代器模式
  • 聊聊spring.mvc.servlet.load-on-startup
  • ORACLE使用Mybatis-plus批量插入
  • 服务器数据恢复—ocfs2文件系统被格式化为其他文件系统如何恢复数据?
  • LabVIEW在不同操作系统上使VI、可执行文件或安装程序
  • kubeadm 安装k8s1.28.x 底层走containerd 容器
  • Nacos源码解读04——服务发现
  • 北外滩集团21.6亿元摘上海虹口地块,为《酱园弄》取景地
  • 晋级中部非省会第一城,宜昌凭什么
  • 印巴战火LIVE丨印巴互相发动无人机袭击,巴官员称两国已在国安层面接触
  • 上海优化营商环境再攻坚,企业和机构有哪些切实感受?
  • 同观·德国|默茨当总理后,能否带领德国在欧盟“说了算”?
  • 央行:5月8日起,下调个人住房公积金贷款利率0.25个百分点