据库异常sql耗尽CPU资源

这篇具有很好参考价值的文章主要介绍了据库异常sql耗尽CPU资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

核心系统出现数据库卡顿,严重影响前端业务响应,节点一数据库服务器CPU几乎耗尽,多次重启数据库依然没有效果,仔细诊断初步判定业务SQL执行效率不佳所致,特别是SQL_ID为1hwgwzgw0vfrc的SQL,半小时内执行次数比平时多了2300多次。高并发下大量消耗系统资源特别是CPU几乎被耗尽。最后通过修改SQL 1hwgwzgw0vfrc问题得以解决。

问题详细诊断过程

比较正常运行和异常时的awr报告,下面是获取9点半到10点的半个小时的awr报告,节点一正常时的数据库负载性能:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
节点一异常时的数据库负载性能:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
检查发现节点一DB Time在正常的时候消耗939.91分,cpu核数32核,已经接近满负荷,异常时消耗3421.59分,已经完全超负荷运行,导致数据库性能急剧下降。
检查CPU消耗情况,节点一正常情况
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
节点一发生性能问题
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql

检查发现正常运行的时候CPU还有9.8%空闲,发生性能问题时,CPU资源根本没有剩余,满负荷在运行。
通过“SQL ordered by CPU Time”检查sql语句消耗cpu情况,正常时,“1hwgwzgw0vfrc”耗CPU整体达47.65%,如下图:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
发生性能问题时,耗CPU整体达58.13%,如下图:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
通过“SQL ordered by Elapsed Time”检查sql语句执行情况,正常时,“1hwgwzgw0vfrc”运行6549次,每次2.75秒:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
发生性能问题时,执行8913次,每次14.62秒
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
由于原来cpu就快耗尽,异常时半个小时数据执行多了2000多次,导致CPU超负荷运行,整体性能下降,每次执行时间消耗变长。
检查节点二的awr报告,资源情况正常。
现场了解rac配置负载情况,客户是通过vip配置了两个节点,客户现场登录服务器,检查服务器CPU资源消耗情况:
节点一(WW01)
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql

节点二(ww02)
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
发现两个节点资源使用极不均衡,建议调整应用配置,最好直接通过scanip连接。
获取ash报告检查语句性能消耗情况:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
发现主要消耗语句sql_id为“1hwgwzgw0vfrc”,消耗近60%的资源,语句如下:

SELECT aab001, aab004, nvl((select (select role_id from sys_user_account_role where user_id = t.aac001) from sys_user_account t where (businessid = to_char(si_ab01.aab001) or (select aab003 from sys_user_account_exts t1 where user_id=t.aac001)=si_ab01.aab003) and is_locked=‘0’ and type=‘02’ and rownum < 1.5), ‘-1’) role_id , nvl(bab078, ‘0’), nvl(bab084, ‘-1’), nvl(AAE119, ‘-1’), aab003, AAB019, nvl((select account from sys_user_account t where (businessid = to_char(si_ab01.aab001) or (select aab003 from sys_user_account_exts t1 where user_id = t.aac001) = si_ab01.aab003) and is_locked = ‘0’ and type = ‘02’ and rownum < 1.5), ‘-1’) account from si_ab01 WHERE aab999 = :1 and rownum<1.5

进一步分析

通过sql_id,检查执行计划:
select * from table(dbms_xplan.DISPLAY_CURSOR(‘1hwgwzgw0vfrc’, null, ‘ADVANCED ALLSTATS LAST’));

据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
主要资源消耗在SYS_USER_ACCOUNT表上,其中PK_AC01_ACCOUNT_TYPE数据比较集中,由于数据查询比较复杂,在执行过程中也有做全表查询的,如下图:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
这说明走全表查询在数据库层面认为消耗比走索引低,由于整个sql执行消耗资源较高,建议开发做sql语句改写。
开发修改该语句后,业务恢复,CPU消耗情况也恢复正常:
据库异常sql耗尽CPU资源,oracle,oracle,数据库,sql
重新获取awr报告,检查CPU资源均正常。

故障总结

由于SQL语句(sql_id: 1hwgwzgw0vfrc)执行性能较差,导致CPU资源耗尽,影响了整体数据库运行,总结情况如下:
1、rac两个节点访问量不均衡,发生性能问题时节点一CPU资源耗尽,建议通过scanip去访问数据库。
2、发生异常情况时,消耗高资源(CPU)的sql语句“1hwgwzgw0vfrc”,sql执行次数比正常情况多,同正常比较,半个小时内就多执行了2300多次。
3、建议优化sql_id为“1hwgwzgw0vfrc”的sql语句,该语句已经优化,业务恢复正常。文章来源地址https://www.toymoban.com/news/detail-833470.html

到了这里,关于据库异常sql耗尽CPU资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Oracle 数据库 SQL 语句 】积累1

    : grouping sets ((分组字段1,分组字段2),()) : coalesce合并多个字段,显示第一个不为null的值

    2024年02月13日
    浏览(51)
  • Sql server 连接 Oracle数据库

    前提预警:本机必须装有Oracle客户端 检查是否安装Oracle客户端,并检查TNS信息是否配置完成 1.1、 在cmd中执行 sqlplus ,没有报错并出现Oracle版本号,则表示Oracle已安装 1.2、配置TNS信息(最上面的10.0.0.130可随意定义,eg:test、orcl、qerghasd…) 配置ODBC数据信息 2.1、打开ODBC数据

    2024年02月03日
    浏览(46)
  • 大数据之LibrA数据库系统告警处理(ALM-12002 HA资源异常)

    告警解释 HA软件周期性检测Manager的WebService浮动IP地址和数据库。当HA软件检测到浮动IP地址或数据库异常时,产生该告警。 当HA检测到浮动IP地址或数据库正常后,告警恢复。 告警属性 告警参数 对系统的影响 如果Manager的WebService浮动IP地址异常,用户无法登录和使用FusionIns

    2024年02月06日
    浏览(39)
  • Sql server和Oracle默认数据库

            SQL Server 和 Oracle 都有自带的一些默认数据库,保存了不同的系统信息和配置数据。         SQL Server 上的默认数据库:          master :SQL Server 引擎的系统级目录,存储了 所有系统层级的信息和元数据 ,例如登录账号信息。         tempdb:存储各种系

    2024年02月09日
    浏览(55)
  • oracle如何定期备份数据库sql文件

    Oracle数据库可以使用以下方法定期备份数据库的SQL文件: 使用Oracle的备份和恢复工具RMAN(Recovery Manager)进行备份。RMAN提供了全面而高效的数据库备份和恢复功能。您可以使用RMAN备份数据库的SQL文件,并将其存储在指定的位置。可以使用RMAN备份的命令来备份数据库,例如:

    2024年01月25日
    浏览(60)
  • Oracle数据库SQL Plus基础命令

    1.使用SQL*Plus登录Oracle数据库 开始 -- 所有程序 -- Oracle -- 应用程序开发 -- SQL Plus cmd窗口下输入:sqlplus 用户名/口令@主机字符串 2.使用CMD命令登录Oracle数据库 开始 -- 所有程序 -- 附件 -- 命令提示符 使用命令行登陆的连接命令格式为:sqlplus/@net_service_name username为用户名;passw

    2024年02月06日
    浏览(43)
  • DB(一):数据库概述、SQL概述、Oracle数据类型

    包括Oracle、DB2、SQL Server、MySQL数据库概述;数据定义语言DDL、数据操作语言DML、事务控制语言TCL、数据查询语言DQL、数据控制语言DCL语言介绍;NUMBER 、CHAR、VARCHAR2、DATE数据库类型;CHAR和VARCHAR2的存储编码、CHAR和VARCHAR2的最大长度、LONG和CLOB类型。 1、DB和DBMS (1)、数据库(

    2024年02月09日
    浏览(62)
  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(48)
  • ORACLE数据库 —— PL/SQL知识点2

    ORACLE数据库  PL/SQL语句基础知识点  适合有SQL基础的人群。  禁止转载! 内置函数 字符串函数     lower(列名|字符串)函数用于返回字符串的小写形式。         eg.SELECT ename,sal FROM emp WHERE ename=lower(\\\'ename\\\');     upper(列名|字符串)函数用于返回字符串的大写形式。       

    2024年02月08日
    浏览(44)
  • Oracle/PL/SQL数据库基础操作(持续更新)

            PL/SQL不是一个独立的编程语言;它是Oracle编程环境中的工具。 SQL* Plus是一个互动的工具,它可以在命令提示符下键入SQL和PL/SQL语句。这些命令发送到数据库进行处理。语句处理之后将结果发回,并在屏幕上显示出来。 分类 命令 DDL create:创建;drop:删除;alter:

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包