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

简介:

巡检数据库时发现某实例存在过度的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,修改前后请观察数据库性能的变化。

目录
相关文章
|
1月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
120 8
|
6月前
|
监控 C#
【Function App】如果一个拥有多个Function App的Plan遇见了High CPU问题? 如何方便定位是哪一个Function App引发的呢?
在Azure Function App测试中,若多个Function App共用同一App Service Plan资源,当出现High CPU问题时,由于Function App公开指标无法直接观测CPU状态,可通过启用Application Insights解决。其Live Metrics功能可过滤并查看每个Function App的CPU使用情况。具体步骤为:将所有Function App连接至同一Application Insights资源,进入Live Metrics页面按Role筛选监控数据。附有三段C#代码示例,分别展示占用CPU、Memory及普通功能的实现方法。
169 37
|
6月前
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
226 6
|
7月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
7月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
|
7月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
9月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
11月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
4697 2
|
12月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
1453 6
|
12月前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
412 3

热门文章

最新文章