oracleRAC集群.docx
- 文档编号:8258986
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:32
- 大小:722.62KB
oracleRAC集群.docx
《oracleRAC集群.docx》由会员分享,可在线阅读,更多相关《oracleRAC集群.docx(32页珍藏版)》请在冰豆网上搜索。
oracleRAC集群
11.1 实时应用集群(RAC)2
11.1.1 并行数据库2
11.1.2 OracleRAC的体系结构3
11.1.3 OracleRAC系统的内部工作方式5
2.全局缓存资源(GCS)和全局队列服务(GES)6
3. 缓存熔合和资源协调7
4.以前图像7
11.1.4 SCN处理8
1.RAC不会崩溃吗8
2.小结9
11.1.5 RAC性能调整概述9
1.RAC集群互连性能10
2.互连通信量——会话等待10
11.1.6 RAC等待事件和互连统计数据11
1.GES锁定阻塞者和等待者(BlockerandWaiter)15
2.熔合读写17
11.1.7 集群互连调整——硬件等级18
11.1.8 使用企业管理器网格控制调整RAC25
数据库性能标签27
Oracle的并行服务器首先由Oracle6.1(beta)和Oracle6.2(有限客户版本产品)引入,但只在VAX/VMS上广泛使用。
直到出现Oracle9i,Oracle才真正有了集群产品(实时应用集群,RealApplicationClustering,RAC),当时他们几乎全部(据说是95%)重写产品代码。
在Oracle10g中,RAC不但已经变得成熟,而且已经成为了网格计算(整个使用OracleRAC或集群体系结构的服务器网格)的奠基石。
除了使用多个服务器来增强可用性和提高性能以外,Oracle还改进了Oracle7.1中首先引入的并行查询技术。
并行查询选项(ParallelQueryOption,PQO)现在称为并行执行选项(ParallelExecutionsOption,PEO),它使查询操作和DML语句可以并行执行,从而显著提升性能。
每一个版本的RDBMS内核都对PEO进行了增强处理。
在Oracle10g中,绝大多数操作都可以并行执行,包括查询(并行SQL执行)、DML和DDL操作、分区内并行处理、数据复制和恢复的并行处理及数据加载;多个并行查询服务器进程甚至可以在同一个分区上执行。
本章主要内容:
● 实时应用集群(RAC)概述和体系结构
● 调整RAC互连
● 查找RAC等待事件
● 使用企业管理器网格控制(EnterpriseManagerGridControl)调整网格(大范围RAV实现方式)
● 并行操作的基本概念
● 并行DML、DDL语句和操作
● Oracle9i的并行DML语句和操作
● 并行处理和分区
● 操作之间和操作内部的并行处理
● 使用并行操作生成表和索引的示例
● 并行DML语句和示例
● 通过V$视图监控并行操作
● 在并行操作时使用EXPLAINPLAN和AUTOTRACE
● 调整并行执行和Oracle9i初始化参数
● 并行加载
● 性能比较和监控并行操作
● 其他并行处理的注意事项
11.1 实时应用集群(RAC)
信息系统的高性能和高可用性是企业日常操作的主要需求。
随着最近几十年对存储信息依赖性的不断增长,需要积累和分析大量数据。
因此对高性能的数据库的需求以及保持这种数据库随时联机的认知和要求也不断增加。
全局操作和电子商务的增长也非常依赖高可用性的存储数据。
由于对数据库系统的不均匀和不可预知加载,许多商业团体迫切需要寻找高性能系统和合适的并行系统来支持复杂的大型数据库系统。
可伸缩性是另一种重要特性。
随着业务的增长,数据积累和数据交互也随之增长。
越来越多的用户和应用程序开始使用数据库系统。
数据库系统应当能够满足数据日益增长的需要,同时又不会降低性能、减少可伸缩性的范围。
Oracle9i引入了实时应用集群(RAC)来解决这些问题。
本节没有涵盖RAC功能的所有方面,只是着重介绍了RAC的一些重要概念及其内部工作方式。
本书的这一部分没有专门讨论RAC。
11.1.1 并行数据库
并行集群数据库是一种复杂的应用程序,它能够并发地从集群中的任何服务器访问同一个数据库(数据表组、索引和其他对象),同时不会破坏数据的完整性。
并行数据库通常包含多个同时访问相同物理存储器或数据的实例(节点/服务器)。
依据存储访问类型,并行系统有两种实现方式:
无共享模型或磁盘共享模型。
在无共享模型(也称为数据分区模型)中,每个系统都有一部分数据库,每个分区只能由所属系统读取或修改。
数据分区让每个系统都能够本地缓存处理器内存中的部分数据库,而不需要跨系统通信来提供数据访问并发性和一致性控制。
IBM和Microsoft的数据库都能够这样操作,以前的也能这样。
而Oracle采用磁盘共享模型,这使得它们在网格计算中遥遥领先。
在磁盘共享模型中,集群的所有节点都可以访问包含数据的所有磁盘。
磁盘共享体系结构需要合适的锁定管理技术来控制更新并发控件。
集群中的每个节点都能直接访问保存共享数据的所有磁盘。
每个节点都有局部数据库缓冲区缓存。
Oracle的RAC数据库就这样运行。
为了突出高可用性和高性能,Oracle很早就已经提供了Oracle并行服务器(OracleParallelServer,OPS)。
在Oracle9i中,它融入下一代,将OPS重新构建为实时应用集群(RAC)。
RAC采用磁盘共享模型,因此也能访问所有共享磁盘,同时也广泛包含协调节点间资源的机制。
磁盘共享技术在过去几年得到了快速发展,给RAC也带来了许多好处。
存储区网络(SAN)技术对服务器隐藏了硬件单元、控制器、磁盘驱动和互连的许多复杂方面,它只提供存储卷(storagevolume)。
同样,集群中的一组服务器提供单个系统图像和计算资源。
另一方面,有些新的技术公司(例如Egenera)对处理区网络(PAN)的兴趣也越来越浓厚(参见
11.1.2 OracleRAC的体系结构
从高级别上来看,RAC是访问单个Oracle数据库的多个Oracle实例(节点)。
该数据库是存储在共享存储系统上的物理数据库。
每个实例都在单独的主机(也称为节点或服务器)上。
所有节点都通过私有互连集群,所有节点都能访问共享存储。
所有节点都可以并发执行相同数据库中的事务。
集群管理软件(通常由集群供应商提供)提供单个系统图像,控制节点成员,监控节点状态。
从广义上说,主要组件包括:
● 节点/服务器
● 高速私有互连(将节点连接在一起)
● 集群管理器或OSD(操作系统依赖层)
● 共享磁盘或存储器
● 集群文件系统或原始设备
● 卷管理器
● 公共网络
集群互连
如果一块数据在一个节点上,而用户在另一个节点需要它,Oracle使用缓存熔合通过互连(连接节点的电线,或是某种类型的开关/纤维)将数据块传递到另一个节点。
并行处理依赖在多个处理器中传递消息。
运行并行程序的处理器需要数据和指令,然后执行计算。
每个处理器定期检查其他节点或主节点,然后计划下一步动作,或同步结果提交。
这些活动依赖消息传递软件,例如满足行业标准的消息传递接口(MessagePassingInterface,MPI)。
在并行数据库中,有大量消息传递和数据库块或页面要传递到另一个节点的本地缓存。
大多数功能和性能取决于传输媒介或方法的效率。
对于集群的整体性能和并行应用的使用而言,它变得至关重要。
因为并行数据库没有对用户可以连接和访问哪些节点强加任何约束条件,所以用户可以选择连接到集群中的任何节点。
不考虑应用程序的本质,OLTP或存储数据库的数据,使用互连将数据块从一个节点移动到另一个节点是一种广泛做法。
集群互连提供某种类型的扩充缓存来压缩所有节点的缓存,这种作用是集群最重要的设计特性之一。
通常,集群互连可用于下面这些高级功能:
● 健康、状态和消息同步
● 分布式锁定管理器(DLM)消息
● 访问远程文件系统
● 应用程序专用通信量
● 集群别名路由
通过在集群内一组节点之间分布计算而获得的高性能需要集群互连来提供高数据传输率和节点间的低等待通信。
同时,互连需要能够检测和隔离错误,使用备用路径。
互连的一些基本要求有:
● 短消息的低延迟
● 大量消息高速并可持续的数据率
● 每条消息的低主CPU利用率
● 流程控制、错误控制和心跳连续性监控
● 执行控制程序直接与主机进程交互(操作系统迂回)的主机接口
● 可测量的交换网络
许多集群供应商都创造了非常具有竞争力的技术。
下面描述的许多互连产品接近SMP(symmetricmultiprocessing,对称多处理)总线的延迟级别。
表11-1总结了各种互连性能(此时它们仍然比较快)。
● HP内存通道 内存通道互连是一种高速网络互连,它为应用程序提供集群内地址空间。
应用程序将地址空间映射到它们自己的虚拟地址空间作为8KB页面,然后就像使用正常的内存一样,从该地址空间读取或写入该地址空间。
● Myrinet Myrinet是一种高效、高性能的数据包通信和交换技术。
它广泛用于Linux集群。
Myrinet软件支持大多数常见主机和操作系统。
该软件是开源的。
● 可伸缩的互连(SCI) SCI是Sun公司的最佳集群互连,因为它具有高数据率和低延迟。
与使用低性能方法相比,使用SCI能够更好地伸缩强调互连的应用程序。
SunSCI实现远程共享内存(RemoteSharedMemory,RSM),一种绕过SolarisTCP/IP通信系统开销的特性。
这样可以提高集群性能。
● Veritas 数据库版本/高级集群(DBE/AC)通信由LLT(低延迟传输)和GAB(组成员和原子广播)服务组成。
LLT提供内核到内核的通信,并可作为IP堆栈的性能推进器。
使用LLT代替IP可以减少IP堆栈的延迟和系统开销。
它现在称为存储器基础(StorageFoundation)。
● HPHyperFabric消息传递协议(HyperMessagingProtocol,HMP) HPHyper
Fabric支持IP上的标准TCP/UDP和HP所有的HMP。
HyperFabric通过提供多个网络接口卡之间连接通信量的透明加载平衡,扩充TCP/UDP的可伸缩性和可读性。
HMP加上操作系统迂回性能和对协议缺载的硬件支持,提供低延迟和非常低的CPU利用率。
要构建高性能的Oracle实时应用集群,选择正确的互连至关重要。
选择适合环境的适当技术时要小心。
可以与供应商协商以获得最新的可用硬件。
见表11-1。
表11-1 一些互连产品及其性能
度量标准
典型的SMP总线
内存通道
Myrinet
SCI
GigabitEthernet
延迟(微秒)
0.5
3
7到9
9
100
CPU系统开销(微秒)
<1
<1
<1
每秒的消息数(百万)
>10
>2
硬件带宽
(MB/秒)
>500
>100
~250
~50
这里的关键是,进入磁盘在毫秒范围内,而通过互连则在微秒或单个数字的毫秒范围内。
11.1.3 OracleRAC系统的内部工作方式
在Oracle9iRAC中,我们不再讨论DLM、PCM、非PCM、锁定监控器等。
在Oracle10g中,大多数功能被以全局缓存服务(GlobalCacheService)的名义取代或实现。
现在将锁定作为保留资源。
以前版本中的后台进程仍然存在但发挥的作用不同。
1.RAC实例和进程
RAC是多实例数据库。
多个实例同时访问同一个数据库。
从RAC实例和独立Oracle实例之间的结构方面来看没有太多区别。
除了所有普通Oracle进程(例如PMON、SMON、LGWR和DBWR)之外,还有许多专门进程,它们可以协调实例内通信,利用集群中节点之间共享的资源。
因为有实例内缓冲动作和新的数据块(称为以前图像数据块,用来保持数据的完整性),所以使用了SGA的其他资源。
● LMON 全局队列服务监控器(LMON)通过监控整个集群来管理全局队列和资源。
LMON管理实例和进程终止以及全局缓存服务的相关恢复。
● LMD 全局队列服务守护程序(GlobalEnqueueServiceDaemon,LMD)是锁定代理进程,它管理对全局缓存服务队列的队列管理器服务请求,从而控制对全局队列和资源的访问。
LMD进程也处理死锁检测和远程队列请求。
● LMSn 这些全局缓存服务进程(LMSn)是全局缓存服务(GCS)的进程。
RAC软件提供多达10个全局缓存服务进程。
LMSn的数量随着集群中节点间消息通信量数量的变化而变化。
LMSn进程完成如下操作:
• 处理全局缓存服务资源的远程实例的中断。
• 为共享资源管理资源请求和跨实例调用操作。
• 构建一列无效锁定元素,在恢复过程中确认锁定元素。
• 处理全局锁定死锁检测,监控锁定转换超时。
● LCK进程 管理全局队列请求和跨实例广播。
● DIAG DiagnosabilityDaemon监控实例的健康状况。
它捕获实例进程失败的数据。
2.全局缓存资源(GCS)和全局队列服务(GES)
GCS和GES(它们都是基本的RAC进程)发挥了关键作用。
GCS确保数据的单个系统图像,即使数据被多个实例访问。
GCS和GES是实时应用集群的集成组件,它们协调对共享数据库的同时访问,还协调对数据库和数据库缓存内共享资源的同时访问。
GES和GCS共同维护全局资源目录(GlobalResourceDirectory,GRD)来记录有关资源和队列的信息。
GRD保存在内存中,存储在所有实例上。
每个实例都管理部分目录。
分布式特性是RAC容错的关键点。
协调共享缓存服务器内的并发任务称为同步。
同步使用私有互连和大量消息传输。
下面这些类型的资源需要同步:
数据块和队列。
GCS整体维护数据块模式,并负责实例间的数据块传输。
LMS进程处理GCS消息,并完成大多数GCS处理。
队列是一种共享内存结构,它串行化对数据库资源的访问。
它可以是局部的,也可以是全局的。
Oracle在3种模型中使用队列:
①空(N)模式;②共享(S)模式;③独占(X)模式。
数据块是读写入和读写出缓冲器的基本结构。
它通常是最经常被请求的资源。
GES维护或处理字典缓存、库缓存、事务锁定和DDL锁定的同步。
换句话说,GES管理队列而不是数据块。
为了同步访问数据字典缓存,需要在独占模式和单节点集群数据库中使用闩锁。
在集群数据库缓存中使用全局队列。
3. 缓存熔合和资源协调
因为实时应用集群中的每个节点都有自己的内存(缓存)(不与其他节点共享),所以RAC必须协调不同节点的缓存,同时减少可能降低性能的其他磁盘I/O。
缓存熔合这种技术使用高速互连来提供集群中实例之间从缓存到缓存的数据块传输。
缓存熔合功能允许脏数据块的直接内存写,从而不需要强迫磁盘写和重读(或ping)提交的数据块。
然而,这不是说不会发生磁盘写。
缓存取代和出现检查点时仍然需要磁盘写。
缓存熔合解决了涉及实例间并发性的问题:
多个节点上的并发读操作、不同节点上的并发读写、不同节点上的并发写操作。
如果数据块不一定总是在实例的缓存中,那么Oracle只从磁盘读取它们。
因为推迟了数据块的写,所以它们通常包含来自多个事务的修改。
只有当出现检查点时,修改过的数据块才会被写到磁盘。
进一步讨论之前,我们需要熟悉Oracle9iRAC中引入的一些概念:
资源模式和资源角色。
因此相同数据块可以同时存在于多个实例中,所以有两个标识符可以帮助协调这些数据块:
● 资源模式。
模式有空模式、共享模式和独占模式。
数据块可以用不同模式保存,取决于资源占有者是要修改数据还是只读它们。
● 资源角色。
这些角色可以局部管理和全局管理。
全局资源目录(GRD)不是数据库。
它是内部结构的集合,用来查找数据块的当前状态。
当数据块传输出本地缓存之外,并传输到另一个实例的缓存中,就更新了GRD。
在GRD中可用下面有关资源的信息:
● 数据块标识符(DataBlockIdentifier,DBA)
● 大多数当前版本的位置
● 数据块的模式(N、S、X)
● 数据块的角色(局部或全局)
4.以前图像
要保持数据的完整性,在RAC的9i版本中引入了以前图像(PastImage,PI)这个新概念。
数据块的以前图像在发送数据块之前保存在内存中,作为它是不是脏数据块的标志。
当失败时,GCS可以通过读PI来重构数据块的当前版本。
这个PI不同于CR数据块,重构读一致性图像时需要它。
数据块的CR版本表示某个时间点上数据的一致图。
例如,实例A的事务A已经更新数据块5上的行2,后来实例B的事务B更新了同一个数据块5上的行6。
数据块5从实例A转换为实例B。
同时,在实例A上创建了数据块5的PI。
11.1.4 SCN处理
系统变更数(SystemChangeNumber,SCN)专门确定提交的事务和它进行的变更。
SCN是逻辑时戳,定义某个时间点上数据库的提交版本。
Oracle给每个提交的事务分配一个唯一的SCN。
在RAC内,因为有多个实现提交的实例,所以需要在实例内维护SCN变更,但同时它们必须在集群内的所有实例之间同步。
所以,SCN由全局缓存服务使用LamportSCN生成模式、硬件时钟或专门的SCN服务器处理。
SCN记录在重做日志中,以便在Oracle9iRAC中可以同步恢复操作。
1.RAC不会崩溃吗
RAC会崩溃吗?
当然会。
不好的设计或选择会让它崩溃。
除了数据库本身之外,还有许多组件与提供数据库服务有关。
RAC可以准备就绪并运行,但客户不能实现它。
在涉及的客户机和数据库服务器之间有中间网络组件。
它们可能失败。
破坏所有硬件的自然灾难——例如火灾、洪水和地震——可能让集群和数据库不能运行。
假设组件可能失败,RAC会提供最大限度的保护,并提供连续的数据库服务。
即使丢失许多组件,RAC集群仍然可以运行。
但它需要依据涉及的所有组件提供冗余设计。
设计是关键字。
建立两个或更多节点还不够;双重互连、到存储单元的双路径、双存储单元、双电源、双公共网络接口等将创建健壮的实时应用集群。
表11-2显示单个组件失败的结果。
表11-2 单个组件失败的结果
结 果
组 件
失败的结果
可行
CPUpanic/崩溃
节点失败,其他节点仍然有用
可行
内存崩溃
节点失败,其他节点仍然有用
可行
互连
双重互连,可行
(续表)
结 果
组 件
失败的结果
崩溃
互连交换
节点不能通信
可行
OS失败/冻结
节点失败,其他节点仍然有用
崩溃
集群管理器s/w
集群冻结,所有节点失效
可行
DB实例崩溃
在其他节点上运行的实例提供数据库服务
可行
控制文件(破坏/丢失)
使用多元化控制文件
可行
重做日志文件
多元化重做文件
崩溃
丢失的数据文件
需要媒介恢复
崩溃
人为错误
取决于错误类型
崩溃
删除的对象
DB可用,但应用程序停止
崩溃
DB软件故障
DB可能在所有实例上停止
只要有一个Oracle实例在集群中可用,客户应用程序就有数据访问,可以毫无疑问地执行其应用程序。
2.小结
本节绝对没有涵盖RAC功能的所有方面。
它仅仅着重讨论了RAC的一些重要概念和内部运行方式(当然,这也会改变)。
理解特定RAC要求和全局共享缓存的实现方式有助于正确设计RAC及其应用。
充分讨论RAC可能需要一整本书的篇幅,而接下来几节将通过调整RAC来帮您理解它。
11.1.5 RAC性能调整概述
与RAC实现方式相关的性能问题应该依次关注以下方面:
● 传统数据库调整和监控(本书的大部分内容)
● RAC集群互连性能(本章和第5章)
● 监控工作量性能(本书大部分内容,特别是第5章)
● 监控特别与RAC相关的争用(本章)
● 在调整RAC特定操作之前,应该分别调整每个实例:
• 应用调整
• 数据库调整
• 操作系统调整
● 然后开始调整RAC。
正常或传统数据库监控在本书的其他章节(特别是第5章)讨论。
本章讨论与RAC相关的数据库性能。
单独调整每个实例之后,再关注通过集群互连通信的进程。
1.RAC集群互连性能
RAC调整最复杂的方面涉及监控和与全局服务目录(GSD)相关的进程的后续调整。
与GSD相关的一组进程是GES和GCS。
GSD进程通过集群互连通信。
如果没有将集群互连配置为有效处理数据包,那么整个RAC实现方式的性能就会很糟糕。
不管与性能相关的调整和其他方面的配置如何,结果总是这样。
2.互连通信量——会话等待
等待影响互连通信量的非空闲等待事件的会话由查询监控,该查询使用全局动态性能视图gv$session_wait列出GCS等待。
在STATSPACK或AWR报表中也可以查看这些等待。
监控的主要等待如表11-3所示。
表11-3 监控的主要等待
等 待
等待描述
全局缓存遇忙
当会话要等待完成资源上正在进行的操作时出现的等待事件
gc缓存遇忙
当进程必须等待数据块变得可用(因为另一个进程正在获得该数据块的资源)时发生的等待事件
缓存遇忙全局CR
通过全局缓存一致读取(读所需的数据块)上的等待
要确定经历系统上等待的会话,就要完成下面的任务。
查询V$SESSION_WAIT,确定是不是所有会话都要经历与RAC相关的等待(当前)。
确定导致这些会话争用的对象。
尽量调整对象或查询以减少争用。
例如,查询v$session_wait,确定是不是所有会话都会经历与RAC缓存相关的等待。
注意,经常使用GV$视图来显示整个集群的统计数据,而V$视图仍然会显示单个节点的统计数据。
如果计划使用RAC,必须将多个节点的V$视图和查询扩充为GV$视图。
本节只是帮助您查看所有组件的初级指导。
本书这一部分没有专门讨论RAC,但这些内容有助于您调整RAC。
SELECT inst_id,event,p1FILE_NUMBER,p2BLOCK_NUMBER,WAIT_TIME
FROM gv$session_wait
WHERE eventIN('bufferbusyglobalcr','globalcachebusy',
'bufferbusyglobalcache');
该查询的输出结果如下所示:
INST_IDEVENT FILE_NUMBERBLOCK_NUMBERWAIT_TIME
---------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracleRAC 集群