惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
小众软件
小众软件
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
博客园_首页
T
Tailwind CSS Blog
The Cloudflare Blog
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
P
Proofpoint News Feed
aimingoo的专栏
aimingoo的专栏
Recent Announcements
Recent Announcements
T
The Blog of Author Tim Ferriss
D
Docker
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - zping

从数据库优化到治病(4)---从误诊到康复全过程 帮助你改变命运的58个智慧 庸者谋事,智者谋局 鸾书精华(10)--仁者爱人信仰习惯等 13TB的StarRocks大数据库迁移过程 数据抽取平台pydatax使用案例---11个库项目使用 多年客户金币计算错误解决过程 MySQL无开通SQL全审计下的故障分析方法 历程 | 华为十年:从DBA到副总裁的辛酸与喜悦 MySQL核心业务大表归档过程 风水的核心原理 思考能力的提升从把复杂问题简单化开始 东岳大帝回生宝训 学会灵活地用“中庸”的思想,善思多变,是成功的保证 准提法介绍 工作疑难问题解决7例 读懂王阳明的人,不再有烦恼 中医养生的最高境界:养心 真正的行善是一种内心的修炼和升华 我和我的DBA之路
报表查询数据异常解决方法
zping · 2024-04-29 · via 博客园 - zping

  缘起

    今天早上一到公司,技术支持的小伙就说一个后台报表,计算的任务完成率超过100%,有异常,客户要用,比较急,要解决这个问题。

   

  解决过程

        自从接了上任的报表计算,这个就头疼,没办法硬着头皮查什么原因,报表的SQL比较简单,一个查:接受任务数表a, 一个查:完成任务数表b

        a和b表,都是直接计算的结果表。 

        第一步: 看看是否原始查询报表的导致数据缺少,如join,left join登,去掉相关表的关联,修改join如left join,看看数据是否有变化,

          修改完,数据还是没变化,确认不是SQL关联和join表的问题

        第二步: 单独拿出执行的SQL,为了取到合适的SQL,特意开了腾讯云的云审计,查询后获取完整的SQL,单独查询“”接收任务数“和“”完成任务数”,

         单独查询查出的数据和上面的显示是一样的,看计算的存储过程,也复杂,找不到是存储过程哪错,怎么知道计算数据是错的。 怎么处理?

         这就陷入的困境,不知道计算的数据哪个是错的,可能2个多错,可能其中只有一个错的,怎么排查?这时技术支持有提示新信息,感觉这个问题必须解决。

         弄了一阵子,没有头绪,感觉就烦,这个事情也没什么意思,都是多少年前的问题还遗留到现在出现,出现抵触的心情。但是事情要解决!

         心静了一下,分析了一下,2个数据到底是哪个出现问题,还是复杂的存储过程计算逻辑有bug,先从哪里入手? 

         这些数据,就这个完成任务数据大,是否可以先查这个任务完成数据,根据常识,先暂且认为接收任务数是对的,先把完成任务完成数据排查清楚(计算清楚)

         接着就把计算完成任务数,计算SQL整理出来,使用最原始的SQL,查询出结果,发现和计算的结果不一致,结果只有7600多,少于新任务数的7700多,更是少于计算的8400多的原来结果

         这样确认了计算结果出现问题,就用原始的计算SQL,从新repalce into替换原来的老数据,查询报表发现还是有问题,原来表中有2个日期(任务日期task_date,完成日期finish_date),我只通过finish_date写入替换,历史的数据task_date的确有些数据,但是这个都是完成历史数据,和这个任务日期无关,查了一下,的确可以删除掉,执行下面SQL清理垃圾数据OK 

delete from b where task_date>='2024-04-01' and task_date <= '2024-04-28' 

        执行后,报表的完成数据已经OK

    总结 

          1,   遇事情不要急躁和退却,只会添加烦劳,对解决问题毫无帮助

          2,当不知道如何入手时,可以根据常识去判断,从最容易出错的地方入手,减少排查面

          3,使用了中间结果,可以直接用原始SQL数据查询,跳过原始的复杂计算逻辑排查