Oracle 一次疑似Bug 14283239 - High CPU/IO for dictionary SQL against SYSAUTH$的处理

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

巡检数据库时发现某实例存在过度的latch争用,怀疑有大量的硬解析;进一步查看有很多的系统认证语句,导致数据库share pool 没有发挥应有的作用。

这台数据库主要承担门店业务数据上传后的汇总,在进行进一步的业务分析操作。同步程序部署在每家门店,每隔5分钟就会有以一次上传操作,其中一项是收银流程,从刷卡读信息到计算费用,判断余额,扣减,写流水等一些列操作在一起的,很可能是很多小的查询组合在一个事务中。

分析AWR报告:

image

大量的硬解析,且每个事务平均执行378条SQL
image

latch:shared pool等待事件很严重

image
SQL分析,有大量的数据库认证SQL
image
image

select /*+ connect_by_filtering index(sysauth$ i_sysauth1) */ privilege#, bitand(nvl(option$, 0), 8), grantee#, level from sysauth$ connect by grantee#=prior privilege# and privilege#>0 start with grantee#=:1 and privilege#>0

初拿到这些SQL,就怀疑是不是数据库有什么BUG,查询MOS后,还真找到了Bug 14283239 - High CPU/IO for dictionary SQL against SYSAUTH$,于是对确定可维护时间后,打了BUG;但等到第二天业务上来后,问题重现了,并且确认前一晚操作没有问题,那会是什么问题呢?

首先看下发起这类SQL的会话信息,可以确认都是门店同步程序发起的会话,那么怀疑就是同步程序中对数据库的操作触发了对用户权限的递归查询,很有可能是有类似 set role的动作。

select count(*) c,a.MACHINE,PROGRAM  from DBA_HIST_ACTIVE_SESS_HISTORY a join dba_users b on a.user_id = b.user_id where sql_id= '7umy6juhzw766' group by a.MACHINE,PROGRAM

image

但程序都是编译好的,没有源码,不可能知道同步程序的详细信息,那么在数据库层面可不可以进行优化呢?

大量的硬解析就是发生在这几条执行次数较多的SQL,SQL类似,value可能不一样;为避免相似SQL不能共享执行计划,可以设置参数

alter system set cursor_sharing = force;

image

在线修改之后,查看数据库监控,硬解析数量明显下降
image

再次查看AWR报告,发现SYSAUTH相关SQL已经被正常业务SQL取代
image
并持续对暴漏出来的业务SQL进行分析,优化,CPU使用率下降明显
image
image
由于不能搞清楚同步程序到底做了什么,还不能彻底解决问题;
cursor_sharing默认是EXACT模式,即完全相同的SQL才会被认为是同一条SQL,修改前后请观察数据库性能的变化。

目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL隐式游标:数据的“自动导游”与“轻松之旅”
【4月更文挑战第19天】Oracle PL/SQL中的隐式游标是自动管理的数据导航工具,简化编程工作,尤其适用于简单查询和DML操作。它自动处理数据访问,提供高效、简洁的代码,但不适用于复杂场景。显式游标在需要精细控制时更有优势。了解并适时使用隐式游标,能提升数据处理效率,让开发更加轻松。
|
1月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
|
1月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
55 3
|
1月前
|
SQL Oracle 关系型数据库
Oracle SQL:了解执行计划和性能调优
Oracle SQL:了解执行计划和性能调优
53 1
|
4月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
306 3
|
4月前
|
SQL 存储 Oracle
TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
**TDengine 3.3.2.0 发布摘要** - 开源与企业版均强化性能,提升WebSocket、stmt模式写入与查询效率,解决死锁,增强列显示。 - taos-explorer支持geometry和varbinary类型。 - 企业版引入UDT,允许自定义数据转换。 - 新增Oracle和SQL Server数据接入。 - 数据同步优化,支持压缩,提升元数据同步速度,错误信息细化,支持表名修改。 - 扩展跨平台支持,包括麒麟、Euler、Anolis OS等。
126 0
|
5月前
|
SQL Oracle 关系型数据库
一些非常有用的Oracle SQL
一些非常有用的Oracle SQL
43 4
|
6月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何SQL同步数据到Oracle数据库中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
74 0