RAC 里面的锁机制(转)

RAC 里面的锁机制
一般的锁lock,是用来控制并发的数据结构, 就是说如果有两个进程同时修改同一个数据, 为
了防止出现混乱和意外, 用锁来控制访问数据的次序。有锁的可以先访问,另外一个进程要等
到第一个释放了锁,才能拥有锁,继续访问。

总体来说,RAC里面的锁分两种, 一种是本地主机的进程之间的锁,另外一种是不同主机的进程
之间的锁。
本地锁机制
ORACLE的数据是按照数据块设计的, 每个用户session都会有一个代理进程来执行相应的数据
操作, 而这时候还会有其他的很多用户session, 也各自有自己的代理进程, 他们很可
能对同一个记录做改动。因为系统的记录有千百万条,所以正确的设计一个好的锁机制,
对于系统性能和维护是非常重要的, 否则稍不注意, 将会造成极大的性能浪费。

所以oracle在设计本地进程的锁的时候,采用了两种机制,一类叫做lock,另外一类叫做
latch.lock用来实现我们常见的大部分数据的保护, 比如记录的行级锁, 而latch一般在遍历
某些数据链表的时候用来保护这些关键数据。

这样分类和锁的效率有关, 因为一般的锁非常的耗时,好很长时间才能释放,可能要耗费成百
上千个硬件操作,所以oracle专门针对需要短时间的数据保护设计了一种特别的锁,叫
latch,只要几个硬件操作就可以完成。用来对某些特别的数据结构的保护。

常见的lock是行级锁, 原理比较简单,就是针对每个事务,在每个数据块的头上,记录上这个
事务号的详细信息,然后在数据快里面的每个记录后面,也记录一下这个事务的编号,
这样当下一个事务到来的时候, 他也在数据块的头上,记录了自己的信息, 但是他查看到这
个记录的时候,发现已经有别的事务抢先了, 不可进行操作, 只能把针对这个记录的修
改排到队列里面, 等待后面完成。

  不同主机间的锁机制

在不同主机间的锁,oracle采用了DLM(Distributed Lock Management)机制, 这里就有一个粒
度的问题,如何设计锁的粒度,让性能达到最优?

我们知道,在ORACLE RAC里面,数据是全局共享的, 就是说每个进程看到的数据块都是一样
的,在不同机器间,数据块可以传递。DLM 设计的这个锁的粒度就往上调了一级,到了数
据块级别, 而不是行级, 因为在多个机器间共享行级锁实在是太耗费资源了

针对不同类型的数据块, 比如某些metadata 或者很少改动的数据块, 和另外那些包含数据记
录内容的数据块, DLM的操作机制也是不一样的。

如果是metadata,那么RAC的每个锁进程在锁定本地数据块的时候,发一个广播信息给其他的节
点,告诉他们对应的锁,通过广播机制实现不同主机之间的内容同步。

对于数据块, 有通过一个GRD 的表格, 这个表格里面记录的所有的数据块在各个机器上的分
布,和当前谁有最新的版本,如果有某个主机对其进行了修改,需要通过这个GRD表做个更
新,别的主机进程如果也需要改动这个数据块,就从GRD里面查谁有最新的版本,然后要求前面的主
机把这个数据块传送过来,再做改动, 最后需要把改动同步到磁盘上, 保证一至性。

<think>好的,我现在需要帮用户解决如何生成和分析Oracle AWR报告的问题。首先,我得回忆一下用户提供的引用内容,看看里面有没有相关的步骤。用户提到了引用[2],里面详细描述了生成AWR报告的步骤,包括进入特定目录运脚本,选择格式等。另外,引用[1]和[4]也提到了AWR报告的生成命令,比如awrrpt.sql和其他相关脚本,比如awrrpti.sql用于RAC实例选择,awrddrpt用于比对报告。这些信息需要整合到回答中。 用户的需求是生成和分析AWR报告,所以我的回答需要分两部分。生成部分需要详细步骤,包括连接到数据库、运脚本、选择快照时间范围、选择格式等。可能还需要提到不同的脚本用途,比如RAC环境下的处理,这对用户可能有帮助。分析部分则需要指出报告中哪些部分重要,比如负载概况、SQL统计、等待事件等,用户可能需要知道这些部分的作用以便进性能调优。 还要注意用户提到的系统级指令,比如使用正确的中文回答,生成相关问题,以及引用标识。引用标识需要对应到正确的引用来源,比如生成步骤主要参考引用[2],而分析部分可能引用[3]和[4]。 另外,用户提供的示例中,问题部分需要生成相关问题,我需要根据AWR报告的主题提出相关的问题,比如生成方法、分析指标、常见性能问题、时间范围选择、RAC环境差异等。这些问题要自然相关,帮助用户进一步探索。 需要注意避免使用Markdown格式,但用户给的示例中在相关问题部分用了§§符号,不过根据用户当前的指令,可能已经调整。需要确保回答结构清晰,分步骤说明,并且语言简洁明了。可能还需要提醒用户需要sysdba权限,以及快照的生成时间间隔,这些细节是否在引用中提到?例如引用[2]提到需要以sysdba身份运脚本,而引用[4]提到AWR自动采集数据,所以可能需要说明快照的生成机制。 最后检查是否符合所有系统级指令:内公式是否正确(虽然这里可能用不上),独立公式是否正确,LaTeX语法正确,中文回答,生成相关问题,引用标识正确。确保每个引用只在需要的地方标注,比如生成步骤引用[2],分析部分引用[3][4],可能还有比对报告引用[1]。 总结步骤: 1. 生成AWR报告的步骤,详细说明每一步,包括脚本位置、执方式、选项选择。 2. 分析AWR报告的关键部分,指出每个部分的重点。 3. 生成相关问题,确保覆盖生成方法、分析指标、常见问题、时间选择、RAC差异等。 4. 正确添加引用标识,每个引用只在相关部分标注。</think>### 如何生成Oracle AWR报告 #### **生成步骤** 1. **连接数据库** 使用`sysdba`权限登录数据库: ```bash sqlplus / as sysdba ``` 2. **运生成脚本** 进入Oracle脚本目录并执`awrrpt.sql`: ```sql @$ORACLE_HOME/rdbms/admin/awrrpt.sql ``` 根据提示选择: - **报告格式**:HTML(可读性更好)或TXT - **快照时间范围**:输入起始和结束快照ID(可通过查询`DBA_HIST_SNAPSHOT`获取)[^2] 3. **特殊场景处理** - **RAC环境**:使用`awrrpti.sql`选择特定实例[^1] - **比对报告**:使用`awrddrpt.sql`生成不同时段的性能对比报告[^1] #### **如何分析AWR报告** 1. **核心指标解读** - **负载概况**:查看`Load Profile`中的TPS、逻辑读/物理读等指标,判断系统压力[^3] - **Top等待事件**:分析`Top 5 Timed Events`,如`db file sequential read`(索引扫描)或`enq: TX - row lock contention`(竞争) - **SQL统计**:关注`SQL ordered by Elapsed Time`,识别高耗时SQL[^4] 2. **性能瓶颈定位** - **资源争用**:检查`Buffer Wait Statistics`和`Enqueue Activity` - **I/O问题**:查看`IO Stats`中各数据文件的读写延迟 - **配置优化**:通过`Instance Efficiency Percentages`判断缓存命中率(如Buffer Hit > 90%)[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值