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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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,修改前后请观察数据库性能的变化。

目录
相关文章
|
3月前
|
并行计算 数据处理 Python
Python并发编程迷雾:IO密集型为何偏爱异步?CPU密集型又该如何应对?
在Python的并发编程世界中,没有万能的解决方案,只有最适合特定场景的方法。希望本文能够为你拨开迷雾,找到那条通往高效并发编程的光明大道。
47 2
|
4月前
|
开发框架 并行计算 算法
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
揭秘Python并发神器:IO密集型与CPU密集型任务的异步革命,你竟还傻傻分不清?
56 4
|
3月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
46 0
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
870 2
|
3月前
|
开发框架 并行计算 .NET
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
脑洞大开!Python并发与异步编程的哲学思考:IO密集型与CPU密集型任务的智慧选择!
34 1
|
4月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
219 5
|
4月前
|
开发框架 并行计算 .NET
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
燃烧吧,Python!异步编程如何点燃IO密集型任务,让CPU密集型任务也加速狂奔?
28 2
|
4月前
|
算法 Java 程序员
解锁Python高效之道:并发与异步在IO与CPU密集型任务中的精准打击策略!
在数据驱动时代,高效处理大规模数据和高并发请求至关重要。Python凭借其优雅的语法和强大的库支持,成为开发者首选。本文将介绍Python中的并发与异步编程,涵盖并发与异步的基本概念、IO密集型任务的并发策略、CPU密集型任务的并发策略以及异步IO的应用。通过具体示例,展示如何使用`concurrent.futures`、`asyncio`和`multiprocessing`等库提升程序性能,帮助开发者构建高效、可扩展的应用程序。
162 0
|
4月前
|
UED 开发者 Python
Python并发编程新纪元:异步编程如何重塑IO与CPU密集型任务的处理方式?
在Python编程中,异步编程作为一种非阻塞模式,通过允许程序在等待IO操作时继续执行其他任务,提高了程序的响应性和吞吐量。与传统同步编程相比,它减少了线程等待时间,尤其在处理IO密集型任务时表现出色,如使用`asyncio`库进行异步HTTP请求。尽管对CPU密集型任务的直接提升有限,但结合多进程或多线程可间接提高效率。异步编程虽强大,但也带来了代码复杂度增加和调试难度提升等挑战,需要开发者掌握最佳实践来克服这些问题。随着其技术的成熟,异步编程正在逐步改变我们处理IO与CPU密集型任务的方式,成为提升性能和优化用户体验的重要工具。
30 0
|
6月前
|
并行计算 监控 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
【7月更文挑战第16天】Python并发异步提升性能:使用`asyncio`处理IO密集型任务,如网络请求,借助事件循环实现非阻塞;`multiprocessing`模块用于CPU密集型任务,绕过GIL进行并行计算。通过任务类型识别、任务分割、避免共享状态、利用现代库和性能调优,实现高效编程。示例代码展示异步HTTP请求和多进程数据处理。
71 8

推荐镜像

更多