高并发bug排查,警惕高权限和无监督运维行为

小夏 科技 更新 2024-03-03

关于作者:

江健,薄冰科技创始人,甲骨文ACE,11G OCM,拥有多年甲骨文设计、管理和实施经验,精通数据库优化、甲骨文CBO和并行性。 Eagle Eye 监控核心设计和开发人员,是一名高级 python Web 开发人员。

背景

最近我访问客户网站时,客户报告说数据库几天前遇到了一个“bug”,希望我们能帮忙排查。

客户反馈现象如下:有一个非常核心的系统数据库,突然有一天用xxx schema登录后,正在运行的SQL处于并行状态,DOP非常高,在多次故障定位失败的情况下,只能暂时使用并行max servers参数将并发降低到32,以缓解过度并发的压力。

故障确认

我们来看看前几天数据库的情况,失败期确实很高。

切换到单个SQL操作**的情况,DOP非常高,然后被节流,这与客户描述一致。

我打开旁边的监测报告,DOP被大幅降级。

初始并行度为192,逻辑CPU为96,与自动并行时数据库的默认并发度非常相似。

初步调查

在客户的带领下,确认故障期与客户描述基本一致。 仅听描述,似乎有一个触发器用于在会话级别调整并发性或与资源管理器相关的东西。

但是,这是客户的核心生产系统,理论上应该不可能进行猜想的调整。 通过快速调查,证实了该猜想不正确。

二次检查

经过初步调查,我不禁怀疑客户的描述是否有问题。 顶层活动按用户过滤,突然发现用户级别没有并行性,很多运行在xxx用户下的SQL都没有并行性,其实只有一个并发度高的SQL。 这也说明,最初的调查方向已经偏离。

此SQL文本未并行指定提示,结合观察到的信息,有点怀疑,想找应用确认最近有没有变化。 甲方的另一位DBA斩钉截铁地说,一定没有改过,不仅没改过,还怀疑是Oracle的bug。

当他说这可能是一个错误时,我想申请在机器上做跟踪的许可,但在我说之前,我问他为什么怀疑这是一个错误。 他说了一句话,让我下定决心要写一篇文章来记录这个案例:“因为之前的SQL执行异常,他会用SQL Profile来修复SQL执行计划,但经过这次修复,完全没有效果。

震惊的罪魁祸首

实际上有一个sqlprofile? 令我惊讶的是,为什么我忽略了 SQLprofile SQL 基线疑难解答。

主要原因是他们之前已经优化过自己的系统,他们知道他们很难对核心进行更改,并且经常需要详细演示添加索引的好处,以及可能的危害,首先在测试中,准生产环境来验证逻辑读取的缩减率, 然后演示哪些 SQL 受到影响,并描述对 Redo 的影响。

拿着这些材料再去开发团队(嗯,外资企业),预约开会,多得到n封邮件确认,然后安排生产(每周只有一天可以生产在清晨),第二天生产完毕,需要在工厂观察,确保生产仓库的安全。

根据我对他们流程的了解,我几乎可以原谅自己对 sqlprofile 的疏忽。 看了一下SQL对应的执行计划,就有一个sqlprofile,它以sys开头,一般不在addm sql tune中。

确认了这一点,问题基本定位了,马上验证,果然这个系统的SQLprofile让SQL使用高并行度,并且让客户的DBA新生成的SQLprofile没有生效,结合审计等信息,后来也确认确实是甲方的另一个DBA在晚上运行了ADDM报告,并且看到报告给出的建议的好处,非常诱人,于是很快就采纳了这个建议,并请了几天假。

回顾和反思

这个案例在技巧上并不强,有很多值得深思的地方,但我感受最深的是,在系统数据库的运维中,对运维人员运维行为的监督严重不足。 然而,正是这种高权重、无监督的运维,经常带来故障,而且是相对难以排除的,至少经常是甲方DBA难以定位的故障。

在历史文章中有很多这样的情况,比如偷偷收集系统统计信息、省略添加磁盘命令、不重启就修改参数、重启后失败等。 弥补这种失误的办法,就是成为规矩,加入巡查,那么有没有好的做法来预测敌人的机会,防止它发生呢? 有成熟实践或对这类问题有顾虑的朋友,欢迎在评论区交流。

相似文章

    小程序开发 如何构建高并发、高可用的小程序后端

    小程序后端是小程序的重要组成部分,负责处理用户请求并提供相应服务。在小程序后端的开发中,如何构建一个高并发 高可用的后端是一个关键问题。本文将介绍一些构建高并发 高可用的小程序后端的技巧和策略。.选择正确的技术栈 选择合适的技术栈是构建高并发 高可用的小程序后端的关键之一。在选择技术堆栈时,您需要考...

    采访中询问如何解决高并发问题

    在互联网行业,高并发是一个共同而严峻的挑战。当系统暴露于大规模用户访问时,可能会导致系统性能下降 响应时间延长,甚至系统崩溃。因此,解决高并发问题对于保证系统的稳定性和用户体验非常重要。本文将从架构层面 数据库层面 缓存技术 优化等不同角度详细介绍高并发场景。.解决架构层面的高并发问题。. 横向扩展...

    在海量数据高并发的场景下,构建Go ES8企业级搜索微服务

    下設 ke chaoxingitcom GO ES企业级海量数据高并发场景解决方案。一 引言。在当今的数字时代,海量数据的生成和处理已成为企业面临的重要挑战。在高并发场景下,如何快速 准确地处理海量数据,保证系统的稳定性和性能,成为企业必须面对的问题。GO 和 Elasticsearch ES 的结...

    PHP Go 是模仿一本简单的书本开发的,实践了实际的高并发、高可用的微服务架构

    夏种植科 超兴吉特com PHP GO仿制简单书本,开发出高并发 高可用的微服务架构。 项目背景。简书是一个优秀的博客平台,具有高并发 高可用 可扩展等特点。为了提高我们的技术水平,我们决定使用PHP和GO开发一个模仿简书的博客平台,实践高并发 高可用的微服务架构。第二,技术选择。PHP PHP作为...

    PHP Go 是模仿一本简单的书本开发的,实践了实际的高并发、高可用的微服务架构

    下設 ke chaoxingitcom Php Go 开发模仿简书 微服务架构概述。开发一本简单的书,需要实现一个高并发 高可用 可扩展的微服务架构,以满足实际应用的需求。PHP 和 Go 语言的结合可以在 Web 应用程序开发中发挥各自的优势。php p HP 是一种功能强大的服务器端脚本语言,具...