Oracle并行处理Word格式.docx
- 文档编号:5761652
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:12
- 大小:23.88KB
Oracle并行处理Word格式.docx
《Oracle并行处理Word格式.docx》由会员分享,可在线阅读,更多相关《Oracle并行处理Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
每个节点拥有一个数据子集,拥有节点使用单一进程或线程,以独占方式执行对此数据子集的所有访问。
数据访问不能在分区内并行。
(有时,也用术语“虚拟处理器”来代替节点。
“虚拟处理器”是在SMP计算机上模拟不共享节点的一种机制。
为了简单,在讨论不共享体系结构时,我们将统一使用“节点”作为术语)。
换句话说,纯不共享系统使用分区或受限访问方法在多个处理节点间划分工作。
节点对数据所有权的改变相对少见——为了适应业务需求的改变而进行的数据库重组、添加或删除节点以及节点故障是所有权更改的典型原因。
这种数据所有权的改变对纯不共享系统而言总是意味着要进行人工管理。
从概念上看,可以认为纯不共享系统与分布式数据库非常相似。
为了在某个节点上执行要求的读/写操作,该节点上的事务必须将消息发送给拥有需要被访问的数据的其它节点,并协调在其它节点上完成的工作。
将消息传递给其它节点,在它们拥有的数据集上请求执行特定操作(功能)称为功能传送。
另一方面,如果从远程节点请求简单数据,则必须访问完整的数据集并将它从拥有节点返回至请求节点(数据传送)。
在不共享体系结构下的并行处理像分布式数据库一样运作。
每个节点以独占方式拥有其数据分区。
没有其它任何节点可以访问此数据,而使节点成为单一的访问点和故障点
此方法具有一些基本缺点,无法解决今天高端环境对可伸缩性和高可用性要求:
(1)、首先,不共享方法在用于共享一切的SMP硬件时并不是最佳的。
为了获得并行处理的益处而要求对数据进行物理分区,在共享一切的SMP系统中很明显是一种人工的、过时的要求。
因为在SMP系统中每个处理器都可以对所有数据进行直接的、等同的访问。
(2)、其次,在不共享方法中使用严格的基于分区的并行处理策略,通常会导致不正常的资源利用。
例如以下两种情况:
在没有必要访问表的所有分区时;
或当单一节点所拥有的更大的未分区表是操作的一部分时。
在这些情况下,限制分区内并行处理的紧密所有权模式,无法利用所有可用的处理能力,因而不能提供最佳的处理能力使用方案。
(3)、第三,由于具有对节点对应物理数据分区的关系,不共享系统在适应变化的业务需求方面一点都不灵活。
当业务增长时,无法方便地以增量方式扩充系统来适应增长的业务需求。
可以升级所有现有的节点,保持它们对称并避免数据重新分区。
在大多数情形下,升级所有节点费用太高;
必须添加新节点并重组(进行物理重新分区)现有数据库。
一个不需要进行任何重组的方案总是比必须重组的方案要更好,即使可以利用到最复杂的重组工具。
(4)、最后,由于使用严格的受限制的访问模式,不共享系统无法完全利用群集系统为保证系统高可靠性所提供的潜在的容错能力。
毫无疑问,基于使用静态数据分布的不共享体系结构,大量的并行处理可以在实验室条件下并行化和扩展。
然而,在每个现实环境中,必须正确地解决上面谈到的问题才能满足今天高端关键任务要求。
执行时的动态并行——共享一切
使用Oracle的动态并行处理框架,可以共享所有数据。
并行化和将工作分成更小的单元的决策,并不受限于数据库设置(创建)时所做的任何预先确定的静态数据分布。
由于能够为每个语句构造不受限制的、优化的数据子集,执行时动态并行可以提供与不共享体系结构等同的或甚至更好的可伸缩性。
每个查询在访问、连接和处理数据的不同部分时都有它自己的特征。
因此,每个SQL语句在被解析时都要进行优化和并行化处理。
数据更改时,如果有更加优化的并行执行计划可用,或者系统中新添加了一个节点,那么Oracle可以自动适应新的情况。
这样可为并行化任何种类的操作提供最高程度的灵活性:
(1)、在语句执行前,对于每个查询要求,会动态地优化并行访问的物理数据子集。
(2)、对于每个查询,都会优化其并行度。
与不共享环境不同,不存在必需的最小并行度来调用所有节点访问所有数据,这是访问所有数据的基础要求。
(3)、操作可以根据当前工作负载、特征和查询的重要性,使用一个、一些或全部RealApplicationCluster节点并行运行。
只要语句得到优化和并行化,就可以知道所有后续的并行子任务。
原始进程变为查询协调器;
并行处理服务器(PX服务器)从一个或多个节点上的并行处理服务器的公用缓冲池得到分配,并开始并行执行该操作。
与不共享体系结构相似,共享一切体系结构中的每个并行处理服务器在其个人数据子集上独立工作。
数据或功能在并行进程之间的传送机制也与上述的不共享体系结构相似或者相同。
确定请求的并行计划之后,每个并行处理服务器都知道其数据集和任务,而进程间通信就像在不共享环境中一样很少。
然而,与不共享体系结构不同,每个并行处理的SQL语句不需要考虑任何物理数据库布局限制就可以进行优化。
这使得每个并行处理可以构造最佳的数据子集,从而提供与纯不共享体系结构相比同等的,甚至在大多数情形下更好的可伸缩性和性能。
只要有益,并行操作的后续步骤就会由一个并行处理服务器进行组合和处理,从而减少数据传送或功能传送的需求。
为什么共享一切比不共享更好?
不共享体系结构可以追溯到将海量并行处理(MPP)系统看作唯一能提供可伸缩的高端并行计算的硬件体系结构。
MPP系统中的每个节点都有它自己的系统组件(CPU、内存和磁盘),在不同的子任务上工作,并且不能共享其任何资源。
这一切都已过去。
现在,大多数成功的、广泛使用的并行硬件系统都是对称多处理器系统(SMP),要么是单机的,要么是作为松耦合的群集。
SMP系统利用共享公用内存和磁盘资源的多处理器,因而也被称为“共享一切”系统。
纯不共享体系结构的支持者总是声称共享一切体系结构(特别是群集环境)对于高端环境会缺乏可伸缩性并引起显著的开销,因而这种体系结构不能用于具有高度并行和/或并发性的高端应用。
这种说法是错误的。
今天的硬件和软件技术已经解决了过去所有的问题,如高速群集互连或OracleRealApplicationClusters的高速缓存融合体系结构。
Oracle的动态并行处理框架建立在与不共享软件相同的并行高级计算基础设计之上,具有所有的优点,还增强了其功能并克服了不共享方法在体系结构上的缺点。
基于不共享原理的软件可以看作是第一代、但已经过时的数据库并行处理软件。
RAC环境中,一个并行的执行可能分布到多个实例上执行。
如果连接OracleRAC数据库时,一个节点上的并发操作可以分布到多个节点上同时执行。
看一个简单的例子:
SQL>
CONN
TEST/TEST@TESTRAC已连接。
SQL>
SELECT
INSTANCE_NAME
FROM
V$INSTANCE;
INSTANCE_NAME
----------------
testrac2
GV$INSTANCE;
testrac1
*
V$VERSION;
BANNER
----------------------------------------------------------------
Oracle
Database
10g
Enterprise
Edition
Release
10.2.0.3.0
-
64bi
PL/SQL
Production
CORE
TNS
for
Solaris:
Version
NLSRTL
Production
这是一个10g的环境,下面建立一张测试表,建立过程中设置表的并行度:
CREATE
TABLE
T_PARALLEL
PARALLEL
16
2
AS
A.*
DBA_OBJECTS
A,
DBA_TABLES
3
WHERE
ROWNUM
<
=
5000000;
表已创建。
SET
AUTOT
ON
COUNT(*)
T_PARALLEL;
COUNT(*)
----------
5000000
执行计划
----------------------------------------------------------
Plan
hash
value:
70256698
----------------------------------------------------------------------------------------------------------
|
Id
|
Operation
Name
Rows
Cost
(%CPU)|
Time
TQ
|IN-OUT|
PQ
Distrib
|
0
STATEMENT
1
1081
(2)|
00:
13
SORT
AGGREGATE
2
PX
COORDINATOR
3
SEND
QC
(RANDOM)
:
TQ10000
Q1,00
P->
S
(RAND)
4
PCWP
5
BLOCK
ITERATOR
4588K|
PCWC
6
ACCESS
FULL|
Note
-----
-
dynamic
sampling
used
this
statement
从执行计划可以看到,Oracle选则了并行执行。
新连接一个会话,在执行上面这个并行查询的同时,检查GV$PX_PROCESS视图:
GV$PX_PROCESS;
INST_ID
SERV
STATUS
PID
SPID
SID
SERIAL#
----------
----
---------
----------
------------
----------
P000
IN
USE
21
25120
265
13
PZ99
42
25480
271
39
P001
24
25122
279
1579
P002
34
25124
280
602
P003
35
25126
281
42
P004
37
25155
284
106
P005
41
25159
296
2212
1
P009
44
27375
244
20
39
27336
246
504
27328
247
19
40
27349
251
363
27332
254
76
45
27725
28
P008
43
27373
266
46
P006
27369
270
64
32
27330
283
1980
P007
27371
289
86
38
27334
311
21707
已选择18行。
很显然,并行查询的16个进程已经分布到两个节点上同时执行了。
rac体系结构-CacheFusion&
recover
【NCN系列文章来自公司技术团队的同事】作者:
Shining
这章描述了缓存融合(CacheFusion)处理,解释了GCS操作。
同时说明了RAC中的资源控制机制,举例说明了CacheFusion,并且描述了RAC中的恢复处理。
CacheFusion的处理:
多个节点的同时读:
这种情况下不需要同步操作。
多个实例可以共享读块而不产生冲突。
在不同实例上的同时读和写操作:
当一个实例需要读取其他实例进行修改且还没有写到磁盘上的块,这个实例可能获得这个块的最新版本或者这个块的一致性读版本。
这种情况下,GCS进程(LMSn)通过interconnect将这个块从持有实例的缓存传送到请求实例的缓存中。
在不同节点上的同时写:
当同时写发生在不同的节点上,在收到请求后,持有数据块的实例完成对数据块的操作。
GCS将资源角色转变为全局管理,而后LMSn进程将block的copy传输到发出请求的实例的缓存中。
CacheFusion的特点:
GCS记录数据块的每个版本,且每个作为一个pastimage(PI)。
当失败的情况中,通过使用PI信息,Oracle可以重构PI。
这种内存到内存的通过高速IPC连接,用以消除磁盘I/O。
CacheFusion限制上下位转换。
数据块的存储模式和缓存状态:
数据块的存储模式是NULL且缓存状态名称是CR——如果实例持有这个数据块的旧的版本,实例可以执行对数据块的一致性读。
数据块的存储模式是S且缓存状态名称是SCUR——实例可以共享访问数据块,并且只能执行读操作。
数据块的存储模式是X且缓存状态名称是XCUR——实例以独占方式访问数据块且可以修改。
数据块的存储模式是NULL且缓冲状态名称是PI——实例对数据块进行了修改,但是保留了过去映射的拷贝用来记录修改以前的状态。
请求一个变化的数据块的修改操作:
1.试图去修改数据块的实例——实例1,向GCS提出请求。
2.GCS将请求传送到数据块的持有者——实例2。
3.实例2接收到消息,LMS将数据块传送到实例1。
在发送数据块之前,实例2上面的资源模式从独占降到NULL模式,且实例2保留脏的缓存作为PI。
因为数据块可能在多个实例中变脏,因此将角色设置为全局管理。
实例2通知实例1,实例2以NULL模式保留了数据块的PI。
在同一个消息中,实例2指明实例1必须以全局角色独占模式保留数据块。
4.在接收到数据块后,实例1通知GCS,它以全局角色独占模式保留数据块。
将数据块写到磁盘:
1.实例2发送写请求到GCS。
2.GCS将请求前向传递到实例1——当前数据块的持有者。
3.实例1接收到写请求,并将数据块写到磁盘。
4.通过GCS,实例1记录写操作的完成,并通知GCS,资源角色转变为本地管理。
5.接到通知后,GCS命令所有PI的持有者释放、清空PI。
这些PI已经保留用于恢复的必要了。
缓存释放,并且以前以NULL模式持有的资源关闭。
RAC的恢复和CacheFusion:
当一个实例失败,且失败被另一个实例检测到,Oracle执行下列恢复步骤:
1.恢复的第一阶段是GES的重新配置。
Oracle首先重新配置GES队列,然后重新配置GCS资源。
在这一时刻,所有的GCS资源请求和写请求被临时暂停。
但对于那些已经取得必要的入队进程和事务,仍然可以继续修改数据块。
2.在重新配置GES之后,在GES的控制下,读取日志以并行方式重新配置GCS资源。
在这一步结束后,所有需要恢复的数据块资源被标识出来。
3.为恢复操作分配内存空间。
前面通过读取日志标识出来的资源被声明为恢复资源。
4.为后续进一步处理的所有资源和队列已经获得,全局资源目录解除冻结状态,所有不需要恢复的数据块可以被访问,系统已经部分可用。
5.对第二步标识处理的每个数据块进行缓存层次的恢复,一旦数据块恢复,立刻是否恢复资源。
6.在所有数据块被恢复,所有恢复资源释放后,系统重新全部可用。
恢复完成后,被恢复的数据块重新可用。
RAC体系结构
在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是为了分散每一台服务器的工作量,硬件上至少需要两台以上的服务器,而且还需要一个共享存储设备。
同时还需要两类软件,一个是集群软件,另外一个就是Oracle数据库中的RAC组件。
同时所有服务器上的OS都应该是同一类OS,根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的listener后,这台服务器根据我们的负载均衡策略,会把请求发送给本机的RAC组件处理也可能会发送给另外一台服务器的RAC组件处理,处理完请求后,RAC会通过集群软件来访问我们的共享存储设备。
逻辑结构上看,每一个参加集群的节点有一个独立的instance,这些instance访问同一个数据库。
节点之间通过集群软件的通讯层(communicationlayer)来进行通讯。
同时为了减少IO的消耗,存在了一个全局缓存服务,因此每一个数据库的instance,都保留了一份相同的数据库cacheRAC的特点是:
每一个节点的instance都有自己的SGA
每一个节点的instance都有自己的backgroundprocess
每一个节点的instance都有自己的redologs
每一个节点的instance都有自己的undo表空间
所有节点都共享一份datafiles和controlfiles
Oracle还提出了一个缓存融合的技术(Cachefusion),
目的有两个
1.保证缓存的一致性
2.减少共享磁盘IO的消耗
因此在RAC环境中多个节点保留了同一份的DBCACHE。
缓存融合(Cachefusion)工作原理:
1.其中一个节点会从共享数据库中读取一个block到dbcache中
2.这个节点会在所有的节点进行交叉dbblockcopy
3.当任何一个节点缓存被修改的时候,就会在节点之间进行缓存修改
来源:
(-Oracle
RAC体系结构_果果爸_新浪博客
4.为了达到存储的一致最终修改的结果也会写到磁盘上
ClusterWare组件
有四种Service:
Crsd-集群资源服务
Cssd-集群同步服务
Evmd-事件管理服务
oprocd-节点检测监控
有三类Resource:
VIP-虚拟IP地址(VirtualIP)
OCR-OracleClusterRegistry(集群注册文件),记录每个节点的相关信息
VotingDisk-Establishesquorum(表决磁盘),仲裁机制用于仲裁多个节点向共享节点同时写的行为,这样做是为了避免发生冲突。
RAC的组件提供过了额外的进程,用来维护数据库:
LMS-GobalCacheServiceProcess全局缓存服务
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 并行 处理