在Oracle不共享体系的结构下并行处理像分布式数据库的运作是一样的。我们都知道每个节点都以其独占方式来拥有其数据的分区。没有其它任何节点可以访问此数据,而使节点成为单一的访问点和故障点。
此方法具有一些基本缺点,无法解决今天高端环境对可伸缩性和高可用性要求:
(1)、首先,不共享方法在用于共享一切的SMP硬件时并不是最佳的。为了获得并行处理的益处而要求对数据进行物理分区,在共享一切的SMP系统中很明显是一种人工的、过时的要求。因为在SMP系统中每个处理器都可以对所有数据进行直接的、等同的访问。
(2)、其次,在不共享方法中使用严格的基于分区的并行处理策略,通常会导致不正常的资源利用。例如以下两种情况:在没有必要访问表的所有分区时;或当单一节点所拥有的更大的未分区表是操作的一部分时。在这些情况下,限制分区内并行处理的紧密所有权模式,无法利用所有可用的处理能力,因而不能提供最佳的处理能力使用方案。
(3)、第三,由于具有对节点对应物理数据分区的关系,不共享系统在适应变化的业务需求方面一点都不灵活。当业务增长时,无法方便地以增量方式扩充系统来适应增长的业务需求。可以升级所有现有的节点,保持它们对称并避免数据重新分区。
在大多数情形下,升级所有节点费用太高;必须添加新节点并重组(进行物理重新分区)现有数据库。一个不需要进行任何重组的方案总是比必须重组的方案要更好,即使可以利用到最复杂的重组工具。
(4)、最后,由于使用严格的受限制的访问模式,不共享系统无法完全利用群集系统为保证系统高可靠性所提供的潜在的容错能力。
毫无疑问,基于使用静态数据分布的Oracle不共享体系结构,大量的并行处理可以在实验室条件下并行化和扩展。然而,在每个现实环境中,必须正确地解决上面谈到的问题才能满足今天高端关键任务要求。
Oracle数据库并行处理技术之执行时的动态并行——共享一切
使用Oracle 的动态并行处理框架,可以共享所有数据。并行化和将工作分成更小的单元的决策,并不受限于数据库设置(创建)时所做的任何预先确定的静态数据分布。
由于能够为每个语句构造不受限制的、优化的数据子集,执行时动态并行可以提供与不共享体系结构等同的或甚至更好的可伸缩性。
每个查询在访问、连接和处理数据的不同部分时都有它自己的特征。因此,每个SQL语句在被解析时都要进行优化和并行化处理。数据更改时,如果有更加优化的并行执行计划可用,或者系统中新添加了一个节点,那么Oracle可以自动适应新的情况。这样可为并行化任何种类的操作提供最高程度的灵活性:
(1)、在语句执行前,对于每个查询要求,会动态地优化并行访问的物理数据子集。
(2)、对于每个查询,都会优化其并行度。与不共享环境不同,不存在必需的最小并行度来调用所有节点访问所有数据,这是访问所有数据的基础要求。
(3)、操作可以根据当前工作负载、特征和查询的重要性,使用一个、一些或全部Real Application Cluster 节点并行运行。
只要语句得到优化和并行化,就可以知道所有后续的并行子任务。原始进程变为查询协调器;并行处理 服务器 (PX 服务器)从一个或多个节点上的并行处理服务器的公用缓冲池得到分配,并开始并行执行该操作。
与不共享体系结构相似,共享一切体系结构中的每个并行处理服务器在其个人数据子集上独立工作。数据或功能在并行进程之间的传送机制也与上述的Oracle不共享体系结构相似或者相同。确定请求的并行计划之后,每个并行处理服务器都知道其数据集和任务,而进程间通信就像在不共享环境中一样很少。
然而,与Oracle不共享体系结构不同,每个并行处理的SQL 语句不需要考虑任何物理数据库布局限制就可以进行优化。这使得每个并行处理可以构造最佳的数据子集,从而提供与纯不共享体系结构相比同等的,甚至在大多数情形下更好的可伸缩性和性能。只要有益,并行操作的后续步骤就会由一个并行处理服务器进行组合和处理,从而减少数据传送或功能传送的需求。
【编辑推荐】
为什么还有那么多人用SVN
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。 互联网上很多版本控制服务已从CVS迁移到Subversion。 说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。 svn服务器有2种运行方式:独立服务器和借助apache运行。 两种方式各有利弊,用户可以自行选择。 svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。 因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了。 不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。 更有甚者,它甚至让人重回CVS。 CVS和SVN的比较类似于比较C++和Java。 很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。 CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。 SVN修正并添加了一些CVS并不拥有的功能。 例如,创建标志和分支dubious,你在编辑文件时其他人不会有任何通知。 SVN并不是CVS的替代品,只是个不同的系统,类似于CVS。 它有些特有的功能,足以作为采用它的理由。 这些功能使他更适合于开发环境,例如对PowerBuilder。 下面你可以找到两者的相对优势、劣势。 1 存储类型格式CVS是个基于RCS文件的版本控制系统。 每个CVS文件都不过是普通的文件,加上一些额外信息。 这些文件会简单的重复本地文件的树结构。 因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。 SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。 一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。 )。 然而另一方面,数据存储由此变得不透明。 2 速度CVS比较慢。 整体而言,由于架构实现的不同, SVN的确比CVS快很多。 在网络上它只传输很少的信息并支持更多的离线模式的功能。 但这也是有代价的。 速度的代价就是巨大的存储(完全备份所有的工作文件)。 3 标志&分支SVN采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。 这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。 对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。 对标志而言:已经不能对代码加标志了。 在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。 4 元数据CVS只允许存储文件。 SVN允许一个文件有任意多的可命名属性,功能十分完全。 5 文件类型CVS最初是为文本文件存储而设计的。 因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。 SVN会关心所有的文件类型,不需要你来手工操作。 6回滚CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。 SVN不允许递交后回滚。 建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。 而损坏的版本无论如何也是会存在数据库里的。 (SVN的滚回操作实际上是merge操作)7事务CVS中的“零或一”事务原则根本没有实现。 如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。 作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。 这样这些文件将在两阶段中被检入。 SVN的确支持“零或一”事务原则,这是SVN的一大优势。 SVN站在更高层次上对安全产品,从系统和控制的角度进行了有机和无隙的整合。 由于SVN没有自己的远程管理工具,只能上服务器上用命令行操作,故操作起来比较复杂。 为此,svn俱乐部开发出svn管家对svn进行远程管理,svn管家推出了Windows版本和linux版本,部署很方便,不用安装额外的环境如mysql、PHP或JAVA。 svn管家不仅可以方便的远程修改用户密码,更可以对svn进行远程管理,极大地方便了SVN的用户。 所以虽然说SVN有缺点,但是对于使用者来说还是有继续使用下去的价值的。 它的优势比它的缺点更耀眼,所以才会有那么多人还使用SVN
oracle数据库的后台进程有哪些
DBWR进程:该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。 当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。 由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。 当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。 ORACLE采用LRU(LEAST RECENTLY USED)算法(最近最少使用算法)保持内存中的数据块是最近使用的,使I/O最小。 在下列情况预示DBWR 要将弄脏的缓冲区写入磁盘:当一个服务器进程将一缓冲区移入“弄脏”表,该弄脏表达到临界长度时,该服务进程将通知DBWR进行写。 该临界长度是为参数DB-BLOCK-WRITE-BATCH的值的一半。 当一个服务器进程在LRU表中查找DB-BLOCK-MAX-SCAN-CNT缓冲区时,没有查到未用的缓冲区,它停止查找并通知DBWR进行写。 出现超时(每次3秒),DBWR 将通知本身。 当出现检查点时,LGWR将通知DBWR.在前两种情况下,DBWR将弄脏表中的块写入磁盘,每次可写的块数由初始化参数DB-BLOCK- WRITE-BATCH所指定。 如果弄脏表中没有该参数指定块数的缓冲区,DBWR从LUR表中查找另外一个弄脏缓冲区。 如果DBWR在三秒内未活动,则出现超时。 在这种情况下DBWR对LRU表查找指定数目的缓冲区,将所找到任何弄脏缓冲区写入磁盘。 每当出现超时,DBWR查找一个新的缓冲区组。 每次由DBWR查找的缓冲区的数目是为寝化参数DB-BLOCK- WRITE-BATCH的值的二倍。 如果数据库空运转,DBWR最终将全部缓冲区存储区写入磁盘。 在出现检查点时,LGWR指定一修改缓冲区表必须写入到磁盘。 DBWR将指定的缓冲区写入磁盘。 在有些平台上,一个实例可有多个DBWR.在这样的实例中,一些块可写入一磁盘,另一些块可写入其它磁盘。 参数DB-WRITERS控制DBWR进程个数。 LGWR进程:该进程将日志缓冲区写入磁盘上的一个日志文件,它是负责管理日志缓冲区的一个ORACLE后台进程。 LGWR进程将自上次写入磁盘以来的全部日志项输出,LGWR输出:当用户进程提交一事务时写入一个提交记录。 每三秒将日志缓冲区输出。 当日志缓冲区的1/3已满时将日志缓冲区输出。 当DBWR将修改缓冲区写入磁盘时则将日志缓冲区输出。 LGWR进程同步地写入到活动的镜象在线日志文件组。 如果组中一个文件被删除或不可用,LGWR 可继续地写入该组的其它文件。 日志缓冲区是一个循环缓冲区。 当LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。 LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。 注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。 ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。 当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。 由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。 CKPT进程:该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。 在通常的情况下,该任务由LGWR执行。 然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由 CKPT进程实现。 对于许多应用情况,CKPT进程是不必要的。 只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。 CKPT进程不将块写入磁盘,该工作是由DBWR完成的。 初始化参数CHECKPOINT-PROCESS控制CKPT进程的使能或使不能。 缺省时为FALSE,即为使不能。 SMON进程:该进程实例启动时执行实例恢复,还负责清理不再使用的临时段。 在具有并行服务器选项的环境下,SMON对有故障CPU或实例进行实例恢复。 SMON进程有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。 PMON进程:该进程在用户进程出现故障时执行进程恢复,负责清理内存储区和释放该进程所使用的资源。 例:它要重置活动事务表的状态,释放封锁,将该故障的进程的ID从活动进程表中移去。 PMON还周期地检查调度进程(DISPATCHER)和服务器进程的状态,如果已死,则重新启动(不包括有意删除的进程)。 PMON有规律地被呼醒,检查是否需要,或者其它进程发现需要时可以被调用。 RECO进程:该进程是在具有分布式选项时所使用的一个进程,自动地解决在分布式事务中的故障。 一个结点RECO后台进程自动地连接到包含有悬而未决的分布式事务的其它数据库中,RECO自动地解决所有的悬而不决的事务。 任何相应于已处理的悬而不决的事务的行将从每一个数据库的悬挂事务表中删去。 当一数据库服务器的RECO后台进程试图建立同一远程服务器的通信,如果远程服务器是不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。 RECO后台进程仅当在允许分布式事务的系统中出现,而且DISTRIBUTED ?C TRANSACTIONS参数是大于进程:该进程将已填满的在线日志文件拷贝到指定的存储设备。 当日志是为ARCHIVELOG使用方式、并可自动地归档时ARCH进程才存在。 LCKn进程:是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1……,LCK9),用于实例间的封锁。 Dnnn进程(调度进程):该进程允许用户进程共享有限的服务器进程(SERVER PROCESS)。 没有调度进程时,每个用户进程需要一个专用服务进程(DEDICATEDSERVER PROCESS)。 对于多线索服务器(MULTI-THREADED SERVER)可支持多个用户进程。 如果在系统中具有大量用户,多线索服务器可支持大量用户,尤其在客户_服务器环境中。 在一个数据库实例中可建立多个调度进程。 对每种网络协议至少建立一个调度进程。 数据库管理员根据操作系统中每个进程可连接数目的限制决定启动的调度程序的最优数,在实例运行时可增加或删除调度进程。 多线索服务器需要SQL*NET版本2或更后的版本。 在多线索服务器的配置下,一个网络接收器进程等待客户应用连接请求,并将每一个发送到一个调度进程。 如果不能将客户应用连接到一调度进程时,网络接收器进程将启动一个专用服务器进程。 该网络接收器进程不是ORACLE实例的组成部分,它是处理与ORACLE有关的网络进程的组成部分。 在实例启动时,该网络接收器被打开,为用户连接到ORACLE建立一通信路径,然后每一个调度进程把连接请求的调度进程的地址给予于它的接收器。 当一个用户进程作连接请求时,网络接收器进程分析请求并决定该用户是否可使用一调度进程。 如果是,该网络接收器进程返回该调度进程的地址,之后用户进程直接连接到该调度进程。 有些用户进程不能调度进程通信(如果使用SQL*NET以前的版本的用户),网络接收器进程不能将如此用户连接到一调度进程。 在这种情况下,网络接收器建立一个专用服务器进程,建立一种合适的连接.即主要的有:DBWR,LGWR,SMON 其他后台进程有PMON,CKPT等
怎么知道自己电脑是多少位版本的?

想安装64位win7系统,但是不知道自己电脑能不能支持64位系统,我们自己看可能不容易直接看出来,下面教大家两种方法做简单的判断和验证。 你要是想看一下自己电脑的系统是32位还是64位就更简单了,右键“我的电脑”——“属性”,正中间就可以看到“系统类型”,这样你就可以清楚的看到当前正在使用的是32位还是64位系统。 或者运行---cmd---systeminfo--查看!欢迎采纳!
发表评论