深入解析:由SQL解析失败看开发与DBA的性能之争

简介: 深入解析:由SQL解析失败看开发与DBA的性能之争 李华 云和恩墨高级技术顾问 编者注:在很多生产系统中,程序员经意不经意写下的一条SQL都可能带来性能上的巨大隐患,正确的、不正确的。

深入解析:由SQL解析失败看开发与DBA的性能之争





李华

云和恩墨高级技术顾问

编者注在很多生产系统中,程序员经意不经意写下的一条SQL都可能带来性能上的巨大隐患,正确的、不正确的。而DBA就要不断在这些问题中出生入死,本案例描述的那些不正确的SQL可能给我们带来的麻烦,而这类错误SQL往往为大家所忽视。这样的问题在最近的客户案例中不断涌现,在12c中同样为我们带来麻烦,而很多DBA可能并不了解,转引这篇文章与大家为警示。


以下案例来自大讲堂的一次分享,从这个案例中我们可以了解“错误的SQL”可能对数据库产生的种种影响。如何找到这些错误的、解析失败的SQL呢?我们先把方法列举在这里:

  1. 通过关联 x$kglcursor x$kglcursor_child_sqlid  视图;

  2. 通过使用 Oracle 10035 Event 事件可以找到解析失败的SQL;

  3. 通过 oracle systemdump 也可以找到解析失败 SQL;

以下我们来看看这个精彩的案例分享。

背景介绍

客户的一套重要生产系统,出现了性能问题。这个问题涉及的信息如下:

月底时候数据库主机的 CPU 利用率长期在100%左右。

数据库中出现大量的 latch: library cache 竞争


系统概况



该系统为 OLAP OLTP 混合系统,平时为交易型数据库。每个网点实时数据上传,月底会有统计类报表产生。


以下为数据库负载曲线,可以看到在月底复杂急剧上升,导致业务不能正常操作。



以下为故障时间点部分 AWR 截图。



从 LOAD PROFILE 看当前数据库每秒有158次的硬解析,总的解析在1082次。

这个时间点的 TOP 5 等待事件中 latch: library cache 与 kksfbc child completion 排在前列,library cachelatch 占到将近有 70%。


Latch: Oracle 用于控制内存并发的串行锁机制


共享池 latch 竞争一般导致的原因有以下集中:


  1. literal SQL 所谓的 literalSQL 就是没用使用绑定变量值的 SQL 比如 select * from enmo where id=100;

  2. 硬解析比如一个新执行的 SQL 没有在共享池中,那么就要经历一个硬解析的过程,关于过程这里就不在多讲

  3. SQL 不能共享,不能共享的原因有很多比如没有在同一个用户下面执行

  4. SQL VERSION 大量高版本 SQL 也会导致共享池的竞争

  5. 另外就是主机出现大量换页,比如在 AIX 环境下大量计算内存使用了 SWAP 会导致类似的问题

  6. 还有就是查询一些底层的视图比如 x$ksmsp 在某些版本下高并发的系统中直接查询这些视图会出现大量的 latch 竞争

  7. 还有就是 SGA 大量抖动或者模拟调整的时候也会导致此问题

  8. Oracle 各个版本上也存在相关的 BUG 会导致


根据以上几点我们去分析到底此问题出现在什么地方。


首先数据库等待事件除了 library cache latch 之后就是 kksfbc

K[Kernel]K[Kompile]S[Shared]F[Find]B[Best]C[Child]


该函数用以在软解析时找寻合适的子游标,是否该故障是由于大量 VERSION COUNT 引起呢?



从这个时间点 AWR 来看没有看到大量 version count 的SQL出现。

分析 latch 的时候 AWR 有一个非常重要的数据。



从 Latch Miss Source 的数据可以看到,绝大多数都是对于 shared pool latch 的 sleeps,


从 AWR Sleep 来看 shared pool 排在了第一位。从调用的函数来看都是发生在硬解析这个过程中。


以下为一些常见函数的功能:


Kghfrunp: KGH: Ask client to freeunpinned space

Kghdmp : x$ksmsp is a fixed table based onkgh metadata.  The number of latch  sleeps for "kghdmp" will increaseif x$ksmsp if an installation  selectsfrom this fixed table too frequently.

kghupr1 : un-pin recreatable

kghalo             KGH: main allocation entry point

kghgex             KGH: Get a new extent

kghalf             KGH: Non-recoverably allocate afreeable chunk of memory


有很多函数这里就不一一列举。


当前现在也可以排除人为查询底层视图导致的 latch 竞争因为没有看到相关函数出现,插播一个类似的案例。



像这种情况很明显就是有人查询了底层的视图导致的 shared pool 竞争。


从主机最早的信息来看也是没有 SWAP 竞争出现的。


SGA 没有大量的 resize 也可以排除掉由于 SGA 组件抖动引起的。


从以上信息,我们没有找到想要的结果,那么问题出现在哪里。


把上面几个原因都排除掉了,难道真是遇到 Oracle BUG 了么。


有的时候分析问题会陷入一些误区,比如一个数据库出现大量的 latch 竞争导致会话飙升然后把 process 撑满,从 time mode 里面来看的话可以发现 95%都是花费在了连接上面,那么到底是大量不正常的连接(比如连接泄漏)导致了数据库出现竞争呢,还是数据库出现问题导致会话不能等了然后不停的重连导致了问题呢。


从这个库这个时间点的 time mode 可以发现 75%的 db time 都是花费在了解析上面,这也是没有问题的因为这个时间点数据库竞争就出现在解析上面,但是为什么其中有 38%的 db time 发生在解析失败上面呢,也就是总共解析的一般时间都是错误的解析。硬解析只有5%左右。


我们来看一张正常时间点的 time mode 。





 



 












                   



                     

        






 

 


 





 


 

 










  1.   

 

















    


DBA笔试面试讲解
欢迎与我联系

目录
相关文章
|
10月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
830 3
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
|
存储 缓存 负载均衡
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
|
SQL 安全 关系型数据库
SQL注入之万能密码:原理、实践与防御全解析
本文深入解析了“万能密码”攻击的运行机制及其危险性,通过实例展示了SQL注入的基本原理与变种形式。文章还提供了企业级防御方案,包括参数化查询、输入验证、权限控制及WAF规则配置等深度防御策略。同时,探讨了二阶注入和布尔盲注等新型攻击方式,并给出开发者自查清单。最后强调安全防护需持续改进,无绝对安全,建议使用成熟ORM框架并定期审计。技术内容仅供学习参考,严禁非法用途。
2030 0
|
9月前
|
SQL 关系型数据库 MySQL
为什么这些 SQL 语句逻辑相同,性能却差异巨大?
我是小假 期待与你的下一次相遇 ~
370 0
|
SQL 存储 自然语言处理
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
SQL的解析和优化的原理:一条sql 执行过程是什么?
|
SQL 关系型数据库 PostgreSQL
CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异
本文深入探讨了PostgreSQL中CTE(公共表表达式)与子查询的选择对SQL性能的影响。通过分析两者底层机制,揭示CTE的物化特性及子查询的优化融合优势,并结合多场景案例对比执行效率。最终给出决策指南,帮助开发者根据数据量、引用次数和复杂度选择最优方案,同时提供高级优化技巧和版本演进建议,助力SQL性能调优。
1483 1
|
人工智能 API 开发者
HarmonyOS Next~鸿蒙应用框架开发实战:Ability Kit与Accessibility Kit深度解析
本书深入解析HarmonyOS应用框架开发,聚焦Ability Kit与Accessibility Kit两大核心组件。Ability Kit通过FA/PA双引擎架构实现跨设备协同,支持分布式能力开发;Accessibility Kit提供无障碍服务构建方案,优化用户体验。内容涵盖设计理念、实践案例、调试优化及未来演进方向,助力开发者打造高效、包容的分布式应用,体现HarmonyOS生态价值。
1005 27
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。

热门文章

最新文章

推荐镜像

更多
  • DNS