美文网首页linux redhat & OracleMVVM. RAC
RAC之间消息传输流量控制

RAC之间消息传输流量控制

作者: 重庆思庄 | 来源:发表于2019-03-12 16:02 被阅读0次

RAC系统中,对于节点和节点之间数据块一致性的保证是通过消息的机制来保证的,也就是我们常说的gcs和ges的这些消息来确保的。这些消息分别有LMD和LMS的进程在实例之间进行传输。

LMD负责处理message的信息,如块的状态,lock level等信息。而LMS会负责数据块的传输。我们这不讨论一致性的机制,主要关注在消息传输的流量和控制上。

不管是LMS还是LMD的消息传递,这些信息传输,都是通过UDP的协议透过私网进行消息的传递的。而在实例之间进行消息传输的时候,消息的传递是彼此交互式的,不能由一个节点一直发送,而另外一个节点只负责持续的负责接收。所以在实例之间传输的时候就要平衡,传输消息的几率,控制彼此之间的合理流量,RAC里通过引入ticket的概念对彼此之间传输的流量和几率进行控制。

对于ticket概念的理解和best practice,Oracle有两篇相关文档可以参考:

Resolving ORA-481 and "terminating the instance due to error 481" (Doc ID 1950963.1)

Best Practices and Recommendations for RAC databases using very large SGA (e.g. 100 GB) (Doc ID 1619155.1)

这里我们可以看到,Oracle是通过某一个节点持有的ticket的数量对发送和接受消息进行流量控制的。一个节点发送一则消息队列的同时会带着一个ticket到对端,对端的ticket会增加。本地的ticket会减少,本地节点会根据可用的buffer和已经收到的信息以及发送的请求ticket的信息(null-req)计算本地可用的tickets。当本地没有ticket可用,本地的LMS/LMD就会进入消息等待队列,并持续的检查ticket latch里的信息,判断是否有可用的ticket的信息可用。直到对端发送回message,并带回可用的tickets后,本地才能再继续发送消息到对端。

我们可以查询动态视图:GV$GES_TRAFFIC_CONTROLLER 来获取每个节点上avalible的tickets数量,并且可以通过TCKT_WAIT判断LMS或者LMD是否正在等待ticket。如果我们持续的看到这里彼此都在等待,说明UDP buffer里package信息,没有被及时的处理,或者在传输的过程丢掉了。当然,我们也可以凭经验看lms/lmd在crash之前里的队列的消息传输情况来判断是否是ticket不足引发的问题。这不如直接获取的GV$GES_TRAFFIC_CONTROLLER直观。

我们最为常见的问题就是:

1. RAC hang / LMD crashes instance with ORA-600[kjmscndscq:timeout] (Doc ID 1619155.1)

2. ORA-00481 After "The instance eviction reason is 0x2" due to Lack of Ticket (Doc ID 1644015.1)

这两个问题相对比较明显:

告警日志中:ORA-600[kjmscndscq:timeout]或者 ora-00481错误之前提示的"The instance eviction reason is 0x2" 

都是说明实例之间的由于tickets短缺,引发了LMS/LMD之间的消息传输超时出现的故障。

这种问题在HP的平台上尤为明显,因为HP平台上的LMS一般都不是真正的RR(real time)模式的进程,导致LMS没能得到CPU的及时调度。关于进程优先级的问题,请参考以下文档: HP-UX: HPUX_SCHED_NOAGE and Scheduling Priority-Policy for LMS in RAC (Doc ID 759082.1)

所以对于HP的平台上的用户,如果SGA区比较大(通常超过100G),业务频繁在多个节点上更新相同的表活数据块,是很容易碰见此类问题的。

以下文档给出了大部分的解决方案:

ORA-00481 After "The instance eviction reason is 0x2" due to Lack of Ticket (Doc ID 1644015.1)

Best Practices and Recommendations for RAC databases using very large SGA (e.g. 100 GB) (Doc ID 1619155.1)

如果您在12.1.0.2的版本上运行您的系统,需要注意的是LMD进程在各个节点之间要保持数量一致(默认的个数是和CPU个数相关的),如果LMD个数不同,需要打补丁17821214。

oracle培训

相关文章

  • RAC之间消息传输流量控制

    RAC系统中,对于节点和节点之间数据块一致性的保证是通过消息的机制来保证的,也就是我们常说的gcs和ges的这些消...

  • 计算机网络笔记——数据链路层(停等协议、GBN、SR)

    数据链路层流量控制 流量控制:防止发送端发送和接收端接收速度不匹配造成传输错误 传输层和数据链路层均有流量控制,但...

  • 蓝牙mesh上层传输层

    上层传输层从访问层获取消息或内部生成上层传输层控制消息,并将这些消息传输到对端的上层传输层。对于来自访问层的消息,...

  • 《分布式技术原理与算法解析》学习笔记Day26

    流量控制 什么是流量控制? 网络传输中的流量控制就是让发送方发送数据的速度不要太快,这样可以让接收方来得及接收数据...

  • 常见网络协议讲解

    1、TCPTransmission Control Protocol(传输控制协议)---应用程序之间的通信(传输...

  • 传输层之TCP

    TCP报文结构 TCP特点 1、面向连接 2、可靠传输 3、流量控制 4、拥塞控制 TCP连接 ...

  • 数据链路层的流量控制与可靠传输机制

    流量控制 、可靠传输与滑动窗口机制 流量控制涉及对链路上的帧的发送速率的控制 ,以使接收方有足够的缓冲空间来接收每...

  • 传输层

    传输层的俩个协议 TCP:需要将要传输的文件分段,传输,建立回话,可靠传输,流量控制 UDP:一个数据包就能够完成...

  • 3.数据链路层

    数据单位(数据传输单元):帧,具有流量控制功能。作用:在物理层基础上,通过建立数据链路连接,采用差错控制与流量控制...

  • 网络-运输层

    《计算机网络》读书笔记,主要介绍内容包括:TCP首部、流量控制、拥塞控制、TCP传输的连接管理 传输层有两种协议 ...

网友评论

    本文标题:RAC之间消息传输流量控制

    本文链接:https://www.haomeiwen.com/subject/scjnpqtx.html