oracle 等待事件

1.db file scattered read

含义:当一个SQL语句需要从数据文件中读取多块非连续的数据块时,就会发生db file scattered read等待事件。这意味着数据分散在不同的位置,数据库需要进行多次I/O操作来收集所需的信息。场景:这种事件常见于全表扫描或者索引快速扫描(index fast full scan)操作,因为这些操作通常不按照数据块的物理顺序进行访问。
性能影响:由于涉及多个分散的I/O操作,与顺序读相比,散列读可能会有更高的I/O开销,特别是在I/O子系统响应时间较长的情况下。

2.db file sequential read

含义:当数据库以连续的顺序从数据文件中读取数据块时,会发生db file sequential read等待事件。这意味着数据块是按顺序排列的,可以连续读取,减少了磁头移动的时间。场景:这种事件通常发生在通过索引访问表数据(如索引范围扫描)或者直接通过ROWID访问单行数据时,因为这些操作往往能够预测到下一个要读取的数据块位置。性能影响:顺序读相对高效,因为它利用了磁盘I/O的局部性原理,减少了寻道时间和旋转延迟。在I/O子系统性能良好的情况下,顺序读的速度通常比散列读快。

3.enq: TX - row lock contention

ENQ:代表“Enqueue”,是Oracle中用于实现资源锁定和队列管理的一个系统,确保在多用户环境中对共享资源的访问能够有序进行。TX:指代Transaction,说明这个等待事件与数据库事务处理中的锁有关。row lock contention:意味着有多个事务尝试同时修改或锁定同一行数据。在Oracle中,为了维护数据的一致性和完整性,当一个事务正在更新某一行时,会为此行加上排他锁(X锁),阻止其他事务同时修改该行。如果此时有其他事务也尝试修改这行数据,它就必须等待当前持有锁的事务完成并释放锁。这种等待通常表示数据库中存在一定程度的并发冲突,特别是在高并发事务处理的应用场景下更为常见。过多的行锁争用可能导致事务响应时间延长,影响数据库的整体性能。解决和优化方法:
优化SQL查询:减少不必要的数据更新操作,尽量使用批量处理来减少锁的粒度和持续时间。
使用绑定变量:避免因SQL语句的硬解析导致的不必要的锁争用。
分析并调整事务设计:确保事务尽可能短小,减少持有锁的时间。
考虑乐观锁或悲观锁策略:根据业务需求选择合适的锁策略,乐观锁可以在一定程度上减少直接的锁争用。
数据库参数调整:比如调整锁相关参数,如TX_LOCK_TIMEOUT等,来管理锁等待行为。

4.buffer busy waits

表示数据库进程在尝试访问一个数据缓冲区(buffer)时,该缓冲区正被另一个进程占用,因此当前进程必须等待直到该缓冲区变为可用。这个等待事件通常与高度并发的数据库活动相关,特别是在以下几种情况中较为常见:块争用:当多个会话试图同时访问同一个数据库块(例如,表块、索引块)时,如果这些块还没有被加载到内存中的数据缓冲区缓存里,或者已经被加载但正被其他会话锁定,就会产生buffer busy waits。热块争用:在高并发事务处理场景下,某些数据块(如索引叶节点、热门表的特定块)可能被频繁访问,导致这些块成为“热块”。多个会话同时尝试修改这些热块时,就会引起争用。长时间运行的查询或事务:如果某个查询或事务长时间持有对缓冲区的锁定,也会导致其他需要访问相同缓冲区的会话等待。缓冲池大小不足:如果数据缓冲区缓存(Buffer Cache)的大小不足以满足当前的工作负载,频繁的缓冲区替换会导致更多的等待事件。解决和优化策略:增加数据缓冲区缓存大小:根据系统监控和性能分析结果,适当增加DB_CACHE_SIZE参数值,以增大数据缓冲区缓存,减少缓冲区争用。优化SQL查询:减少大表的全表扫描,优化查询逻辑,使用索引来减少需要访问的数据块数量。调整数据库参数:比如调整DB_BLOCK_CHECKSUM(关闭校验和检查以减少CPU开销)、DB_BLOCK_LRU_LATCHES(增加LRU latch的数量以减少闩锁等待)等。使用绑定变量:减少硬解析,以减少缓冲区争用的可能性。分析争用热点:使用Oracle的AWR报告或ASH(Active Session History)数据来定位具体的争用对象,然后针对性地优化访问模式或调整索引策略。考虑分区或分片:对于非常大的表或索引,可以考虑进行分区,以分散访问压力,减少对单一数据块的争用。解决buffer busy waits问题对于提高数据库的并发处理能力和整体性能至关重要。

5.cursor: mutex X

游标的互斥(mutex)锁。在Oracle中,游标是用来处理SQL语句执行上下文的内部结构,包括解析、执行计划生成及结果集处理等信息。这个等待事件具体指的是:Mutex锁:Mutex是一种轻量级的锁机制,用于保护共享资源免受并发访问的影响,确保同一时间只有一个会话可以修改该资源。在Oracle中,游标上的Mutex锁(特别是Mutex X,即独占型Mutex锁)用于控制对游标定义和状态的访问,尤其是当存在多个会话试图同时打开、关闭或修改同一个游标的状态时。等待原因:当一个会话尝试获取一个游标的Mutex X锁,而该锁已被其他会话持有时,就会发生cursor: mutex X等待事件。这通常意味着有并发操作正在进行,比如多个会话试图同时执行DDL(数据定义语言)操作,或者在执行动态SQL时创建、修改或销毁相同的游标。潜在场景:
动态SQL执行频繁,尤其是在PL/SQL代码块中,每次执行不同的SQL语句都可能创建新的游标。
应用程序设计不当,导致重复打开和关闭相同的游标。
数据库内部操作,如统计信息的自动收集、优化器的重优化等,也可能涉及游标的Mutex锁。解决策略:
优化SQL和PL/SQL代码:减少动态SQL的使用,尽量使用绑定变量和静态SQL,以复用已存在的游标。
分析和调整应用逻辑:确保不会过度创建和关闭游标,特别是在循环中重复执行相似查询时。
调整数据库参数:虽然直接调整与Mutex相关的参数可能较难直接改善此问题,但合理配置资源管理、调整会话和进程相关参数可能间接帮助减少竞争。
监控和诊断:使用Oracle的等待事件、ASH报告和SQL监控工具来定位具体导致Mutex争用的SQL或PL/SQL代码段,进而针对性地优化。
减少cursor: mutex X等待事件的发生,可以提升数据库的并发处理能力,减少响应时间,从而提高整体性能。

6.direct path read

direct path read 是Oracle数据库中的一个等待事件,它表示数据库进程绕过传统的Buffer Cache(数据缓冲区缓存),直接从数据文件中读取大量数据到PGA(程序全局区)的直接路径操作中。这个等待事件通常与大容量数据加载操作相关,例如使用DIRECT方式的INSERT、CREATE TABLE AS SELECT、MERGE操作,以及数据泵(Data Pump)的导出导入等操作。以下是关于direct path read的几个关键点:目的:为了提高大容量数据操作的效率,避免大量的数据读写操作影响到Buffer Cache的性能,以及减少对其他常规事务处理的干扰。直接路径读取跳过了数据缓存,减少了缓存污染和缓存争用的可能性。适用场景:当需要快速加载大量数据到表中,并且这些数据之后会被频繁查询而不是立即更新时,直接路径读是一个很好的选择。它适用于数据仓库加载、批量数据处理等场景。资源使用:直接路径读会消耗更多的I/O资源,因为它直接从磁盘读取数据。但是,由于省去了将数据先加载到Buffer Cache再从缓存写入磁盘的过程,总体上可以减少内存和CPU的使用,尤其是在数据量非常大时。性能影响:虽然短期内可能因为直接的磁盘I/O操作而导致更高的I/O等待,但从整体数据加载任务的角度看,它可以显著提高数据加载的效率,尤其是在I/O子系统能够高效处理大量连续读取请求的情况下。与直接路径写(Direct Path Write)的关系:直接路径读通常与直接路径写一起出现,构成了一种高效的批量数据处理模式,数据直接从数据文件读取后,再直接写入到目标表或文件中,整个过程尽量减少对Buffer Cache的依赖。总之,direct path read是一个优化大容量数据读取操作的机制,特别适合于数据仓库加载和批量处理作业,旨在通过减少对Buffer Cache的依赖来提高数据处理的吞吐量和效率。

7.control file sequential read

表示数据库进程在顺序读取控制文件中的信息。控制文件是Oracle数据库的核心组成部分之一,存储了数据库的物理和逻辑结构信息,包括但不限于数据文件、重做日志文件的位置和状态、表空间信息、数据库名称和版本等元数据。当以下操作发生时,可能会观察到control file sequential read等待事件:
数据库启动:数据库实例在启动时需要读取控制文件来验证和获取数据库的结构信息。
日志切换:重做日志文件切换时,数据库需要更新控制文件中的相关信息。
数据字典统计信息更新:某些维护操作,如自动段空间管理(ASSM)的位图块更新,可能需要读取控制文件。
备份和恢复操作:执行数据库备份或恢复操作时,需要读取控制文件来确认数据库的状态和需要处理的文件列表。
表空间或数据文件操作:添加、删除、重命名表空间或数据文件时,需要访问控制文件以更新其内容。
由于控制文件通常较小且存储在高速存储设备上,因此这类等待通常不会成为性能瓶颈。然而,如果控制文件频繁地被大量并发请求访问,或者存储设备响应缓慢,也可能导致性能问题。优化建议:
确保控制文件位于快速的存储介质上,以减少I/O等待时间。
监控控制文件的访问模式,如果发现异常的高等待,检查是否有不合理的数据库活动或配置问题。
在一些极端场景下,考虑增加控制文件的副本数量,分布于不同的磁盘,以提供更好的容错能力和I/O平衡,但这通常不是出于性能考虑,而是为了提高可用性和可靠性。
--查询阻塞和被阻塞的session
SELECT a.INST_ID,a.sid,a.SERIAL#,a.USERNAME,a.SQL_ID,a.PROGRAM,a.EVENT,a.BLOCKING_SESSION,a.WAIT_TIME_MICROFROM GV$SESSION AWHERE (A.INST_ID, a.SID) in(select b.BLOCKING_INSTANCE, b.BLOCKING_SESSION from gv$session b)
union all
select a.INST_ID,a.sid,a.SERIAL#,a.USERNAME,a.SQL_ID,a.PROGRAM,a.EVENT,a.BLOCKING_SESSION,a.WAIT_TIME_MICROFROM GV$SESSION Awhere a.BLOCKING_SESSION is not nullorder by BLOCKING_SESSION nulls first;--最近30分钟内ASH采样到的等待事件排名
select *from (select inst_id,rank() over(partition by inst_id order by cnt desc) rk,event,cntfrom (select ash.INST_ID, ash.EVENT, count(*) CNTfrom gv$active_session_history ashwhere ash.SAMPLE_TIME > sysdate - 1 / 24 / 60 * 30and event is not nullgroup by ash.INST_ID, ash.EVENT))where rk <= 10;--某段事件内ASM采样到的等待事件排名
select a.inst_id, a.event, a.sql_id, a.sql_cnt, b.cnt event_cnt, sql_rkfrom (select inst_id,event,sql_id,sql_cnt,rank() over(partition by event order by sql_cnt desc) sql_rkfrom (select ash.INST_ID, ash.EVENT, ash.SQL_ID, count(*) sql_cntfrom gv$active_session_history ashwhere to_char(ash.SAMPLE_TIME, 'YYYY-MM-DD HH24:MI:SS') >'2024-06-20 14:00:00'AND to_char(ash.SAMPLE_TIME, 'YYYY-MM-DD HH24:MI:SS') <'2024-06-20 16:00:00'AND EVENT IS NOT NULLGROUP BY ASH.INST_ID, ASH.EVENT, ASH.SQL_ID)) A,(SELECT INST_ID, EVENT, CNTFROM (SELECT INST_ID,rank() over(partition by INST_ID order by cnt desc) rk,EVENT,CNTFROM (SELECT ASH.INST_ID, ASH.EVENT, COUNT(*) CNTFROM GV$ACTIVE_SESSION_HISTORY ASHwhere to_char(ash.SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS') >'2024-06-20 14:00:00'AND to_char(ash.SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS') <'2024-06-20 16:00:00'AND EVENT IS NOT NULLGROUP BY ASH.INST_ID, ASH.EVENT))WHERE RK <= 3) BWHERE A.INST_ID = B.INST_IDAND A.EVENT = B.EVENTAND A.SQL_RK <= 5ORDER BY INST_ID, EVENT_CNT DESC, SQL_CNT DESC, SQL_RK;--查看过去7天sql执行的hash_plan_id和资源消耗统计变化
select sql_id,endtime,plan_hash_value,nvl2(exed, exed, 0) exec_avg_times_ms,nvl2(ems, ems, 0) exec_once_time_ms,nvl2(cms, cms, 0) "avg_CCWAIT(ms)",nvl2(ams, ams, 0) "avg_APWAIT(ms)",nvl2(clms, clms, 0) "avg_CMWAIT(ms)",nvl2(ioms, ioms, 0) "AVG_IOWAIT(ms)",nvl2(ctms, ctms, 0) "AVG_CPU_WAIT(ms)",nvl2(bfgets, bfgets, 0) "AVG_buffer gets",nvl2(drd, drd, 0) "avg_disk reads",nvl2(sd, sd, 0) "avg_sort",nvl2(fet, fet, 0) "avg_fetch",nvl2(rpd, rpd, 0) "avg_rows process",snap_idfrom (select a.sql_Id,to_char(b.end_interval_time, 'yyyymmdd hh24:mi:ss') endtime,a.executions_delta exed,a.plan_hash_value,round(decode(a.executions_delta,0,0,a.elapsed_time_delta / a.executions_delta) / 1000,2) ems,round(decode(a.executions_delta,0,0,a.ccwait_delta / a.executions_delta) / 1000,2) cms,round(decode(a.executions_delta,0,0,a.apwait_delta / a.executions_delta) / 1000,2) ams,round(decode(a.executions_delta,0,0,a.clwait_delta / a.executions_delta) / 1000,2) clms,round(decode(a.executions_delta,0,0,a.iowait_delta / a.executions_delta) / 1000,2) ioms,round(decode(a.executions_delta,0,0,a.cpu_time_delta / a.executions_delta) / 1000,2) ctms,round(decode(a.executions_delta,0,0,a.buffer_gets_delta / a.executions_delta),2) bfgets,round(decode(a.executions_delta,0,0,a.disk_reads_delta / a.executions_delta),2) drd,round(decode(a.executions_delta,0,0,a.sorts_delta / a.executions_delta),2) sd,round(decode(a.executions_delta,0,0,a.fetches_delta / a.executions_delta),2) fet,round(decode(a.executions_delta,0,0,a.rows_processed_delta / a.executions_delta),4) rpd,b.snap_idfrom dba_hist_sqlstat a, dba_hist_snapshot bwhere sql_id = 'xxxxxxxxx'and a.snap_id = b.snap_idand a.instance_number = b.instance_number--and b.instance_number=1and a.executions_delta <> 0and b.end_interval_time > sysdate - 7)order by snap_id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 修炼|人人编程手册|001 计算思维

在微信中阅读,关注公众号:CodeFit。 > 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 1. 计算思维 在我们正式开启 Python 修炼之旅前,先来了解一个关键的概念 —— 计算思维。 计算思维,其核心本质在于 抽象 …

顶顶通呼叫中心中间件-替换授权文件使授权文件生效指南

一、登录my.ddrj.com下载授权文件 登录地址&#xff1a;用户-顶顶通授权管理系统 登录之后正式授权然后点击查看把license.json下载下来&#xff0c;然后替换到fs的授权文件路径&#xff0c;默认路径是&#xff1a;/ddt/fs/conf 如果安装路径不一样就需要自己去看看授权文件存…

PostgreSQL从创建数据库到赋予和删除权限

下面是一个完整的 PostgreSQL 示例&#xff0c;展示了如何创建数据库、用户、模式&#xff08;schema&#xff09;、表、视图、函数&#xff0c;并赋予用户权限以及删除权限的步骤。假设你已经安装并配置了 PostgreSQL。 首先&#xff0c;登录到 PostgreSQL 的命令行客户端&…

中石化加油卡有什么用?

对于有车一族来说&#xff0c;有一张加油卡真的可以省下不少钱 但是像我们这种没车的人&#xff0c;即使得到加油卡也毫无用武之地 久而久之&#xff0c;难免会造成卡过期的情况出现 还好&#xff0c;前两天把我手上堆积了好久的加油卡在收卡云上卖出去了&#xff0c;99折真…

低代码开发:引领HR数字化变革新时代

引言 低代码开发是一种创新的软件开发方法&#xff0c;它允许开发人员通过图形用户界面和配置而非传统的计算机编程来创建应用程序。这种方法与传统的代码驱动开发模式形成了鲜明的对比&#xff0c;后者要求开发者具备深厚的编程技能&#xff0c;并花费大量时间编写和调试代码。…

nodejs从基础到实战学习笔记-模块化、包

二、模块化 2.1 什么是模块化 模块化是指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 2.1.1 把代码进行模块化拆分的好处 提高了代码的复用性提高了代码的可维护性可以实现按需…

Docker 镜像库国内加速的几种方法

在国内&#xff0c;拉取 Docker 镜像速度慢 / 时不时断线 / 无账号导致限流等&#xff0c;比较痛苦。 这里提供几个当前可用的镜像仓库&#xff0c;更新到/etc/docker/daemon.json即可。 更新完记得运行&#xff1a; sudo systemctl daemon-reload sudo systemctl restart …

打印水仙花数

题目&#xff1a;打印出所有的“水仙花数”&#xff0c;所谓“水仙花数”是指一个三位数&#xff0c;其各位数字立方和等于该数本身。 例如&#xff1a;153是一个“水仙花数”&#xff0c;因为153 1的三次方 &#xff0b;5的三次方&#xff0b;3的三次方。 程序分析&#xff…

axios文件上传

var formData new FormData(); //file是文件对象 formData.append("file",file.raw); axios.post("/SchoolApi/Center/ImportStudentData", formData, { headers: { Content-type: multipart/form-data} }) .then(res > {// 上传成功后的处理console.…

外文文献下载资源大全

外文文献下载资源通常指可以免费或付费下载英文或其他语言学术文献的平台。这些资源可以按照不同行业或学科进行分类&#xff0c;以便用户更容易找到他们需要的文献。以下是一些主要的资源平台&#xff0c;它们提供不同行业的文献下载服务&#xff1a; 1、PubMed 学科&#x…

百元价位真无线蓝牙耳机怎么选?四款宝藏平价机型盘点

在繁忙的现代生活中&#xff0c;真无线蓝牙耳机凭借其便携性、无线连接以及出色的音质&#xff0c;已经成为了许多人的必备配件&#xff0c;面对市场上琳琅满目的产品&#xff0c;如何在百元价位内挑选出一款性价比高、性能出色的真无线蓝牙耳机&#xff0c;确实是一个值得深思…

【前端】前端权限管理的实现方式:基于Vue项目的详细指南

前端权限管理的实现方式&#xff1a;基于Vue项目的详细指南 在Web开发中&#xff0c;前端权限管理是一个确保应用安全性和优化用户体验的关键部分。本文将详细介绍前端权限管理的几种实现方式&#xff0c;并通过Vue项目中的代码示例来演示具体实现方法。 前端权限管理的基本实…

低代码智能协同办公:开启高效办公新时代

随着科技的飞速发展&#xff0c;人工智能逐渐成为各行各业的重要组成部分。低代码智能协同办公作为一种创新型的办公方式&#xff0c;正逐步改变着人们的办公习惯&#xff0c;为企业带来更高的效率和更优的体验。本文将从低代码智能协同办公的定义、特点、应用场景等方面展开论…

赶紧收藏!2024 年最常见 20道设计模式面试题(九)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道设计模式面试题&#xff08;八&#xff09;-CSDN博客 十七、迭代器模式如何提供对集合对象的迭代访问&#xff1f; 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许…

【Android】【Compose】Compose的简单介绍

前言 Jetpack Compose 是谷歌推出的用于构建现代化 Android 应用界面的工具包。它采用了声明式的方式来定义用户界面&#xff0c;与传统的 XML 布局和视图层次结构相比&#xff0c;Compose 提供了更直观、更简洁的方式来创建和管理界面组件。 需求配置 Android 版本要求 An…

马斯克的Grok-1:开源AI模型的突破与挑战

在人工智能&#xff08;AI&#xff09;飞速发展的当下&#xff0c;xAI公司推出的最新作品Grok-1&#xff0c;不仅标志着技术的一大突破&#xff0c;也预示着AI领域的一次重大里程碑。这个经过四个月辛勤开发的模型&#xff0c;拥有高达3140亿参数的专家混合体系结构&#xff0c…

IT行业目前正处于快速发展和变革之中,未来也将持续呈现多种趋势。

现状 数字化转型&#xff1a; 企业和组织正在大规模进行数字化转型&#xff0c;加速采用云计算、大数据分析、人工智能等技术来提升效率和创新能力。安全和隐私&#xff1a; 随着信息泄露和网络攻击的频发&#xff0c;信息安全和隐私保护成为了IT行业的重要议题&#xff0c;企…

iOS开发工具-网络封包分析工具Charles

一、Charles简介 Charles 是在 Mac 下常用的网络封包截取工具&#xff0c;在做 移动开发时&#xff0c;我们为了调试与服务器端的网络通讯协议&#xff0c;常常需要截取网络封包来分析。 Charles 通过将自己设置成系统的网络访问代理服务器&#xff0c;使得所有的网络访问请求…

百度地图上设置挖空效果的电子围栏

公司项目有个需求是要在百度地图上设置电子围栏,电子围栏很简单嘛,就是一个覆盖物就能搞定了,然而UI又在搞事情,设计的效果图中电子围栏外卖填充颜色,电子围栏内不填充颜色。 最后我还是写出了这个效果,浅浅的复盘一下: 狗狗太可爱了给他用电子围栏描个边边 我是怎么…

海思NNIE精度对比详细操作指南

海思NNIE部署推理经常会遇到精度下降问题,但是又摸不着头脑究竟是什么原因,因此需要做精度分析来排查是不是算子问题或者是具体哪个算子问题。本文撰写详细操作说明文档,具体可以参考资料:海思NNIE之Mobilefacenet量化部署-腾讯云开发者社区-腾讯云 1.打开日志等级 不知道…