涉网查询优化的问题主要包括三部分,其过程简述如下。查询优化器可以由三个成分构成:搜索空间、成本模型和搜索策略。图7.17查询优化过程1.搜索空间查询执行计划是算符树的一种表现形式,对执行序有更明确的表示,有丰富的附加信息,如为每个操作选择最佳实施方法。图7.19连接树的两种主要形态2.搜索策略查询优化器最常用的搜索策略是动态规划,称为确定策略。......
2023-10-28
本节主要讨论分布INGRES算法、System R*算法和SDD-1算法,它们之间的区别如下。
●分布INGRES算法采用动态优化时间方式,其他算法则采用静态优化时间方式。
●分布SDD-1算法和System R*算法的目标函数只考虑总开销最小,而分布INGRES算法则考虑响应时间和通信时间的组合最小。
●分布SDD-1算法的优化因子只考虑消息量大小,分布System R*算法考虑的是本地处理时间、消息量大小、I/O和CPU开销。分布INGRES算法则考虑消息量大小和本地处理时间(I/O+CPU time)。
●分布SDD-1算法假设的网络拓扑是广域网点对点网。分布INGRES算法和System R*算法则适合在通用网或广播网环境工作。
●分布SDD-1算法使用半连接优化技术,分布式INGRES算法和System R*算法则采用类似集中式版本的技术。
●分布INGRES算法可以处理数据分片。
分布INGRES算法、SDD-1算法和System R*算法的比较如表7.8所示。
表7.8 分布查询优化算法比较
①统计内容分别为:1=关系的基,2=每个属性的不同值个数,3=连接选择系数,4=每个连接属性上投影的大小,5=属性大小和元组大小。
1.分布INGRES算法
分布INGRES查询优化算法源自集中式INGRES。算法的目标函数是将通信时间和响应时间组合最小化。不过,这两个目标可能是矛盾的。例如增加通信时间(并行处理)能减小响应时间。这样可以让一个的权重高一些。要注意的是,这个算法忽略了将数据传输到结果节点的开销。而且这个算法采用了数据分片技术,但只支持水平分片。
该算法也考虑网络拓扑结构,包括广播网。使用广播网可以广泛复制数据片,增加并行度。
该算法的输入是元组关系演算标识的查询(合取范式)和模式信息(网络类型中每个数据片的大小和存储地点)。算法执行的节点称为主节点(master site),是查询启动的节点。详述如下。
算法7.3 QP_D-INGRES
这个算法的基本过程简述如下。
首先,本地处理所有分离的单关系查询(如选择和投影),即ORQi。然后在原始查询上使用约简算法[Step 2]。这样,约简程序(REDUCE())产生一个不可约简子查询序列q1→q2→→qn,其中,两个顺序相继的子查询里最多只有一个公共关系。
在Step 2分离出来的不可约简查询和每个数据片大小的基础上,找出下一个处理的子查询MVQ,并在(3.1)和(3.2)里选出两个变量(要传输的数据片和处理地点),然后应用(3.3)和(3.4)。(3.2)选择最好的策略处理查询MRQ。这个策略用一个偶对表(F,S)描述,即将数据片F传送到节点S去处理。(3.3)则将所有指定的数据片传送到其处理节点。最后,(3.4)执行查询MRQ。如果还有子查询存在,则算法返回Step 3,实施下一个循环,否则就终止。
注意:真正的优化是在(3.1)和(3.2)实施的。
分布INGRES算法的特点是有限搜索解决方案空间,在每一步找出最佳决策,而不考虑整个全局优化中的后继步骤。
2.分布System R*算法
分布System R*查询优化算法是System R查询优化算法的扩展。因此,对所有可选策略穷尽搜索,从而选出开销最小的一个。虽然这些策略的预测与估价耗费颇大,但是,如果这个查询的执行频度较高的话,这种管理开销还是可以容忍的。
分布System R*查询优化算法是以关系为单位的。在分布System R*中,查询启动的节点称为主节点。主节点上的优化器负责做出所有节点的决策,如选择执行节点和传输数据的方法。查询中的其他节点称为从属节点,负责实施剩下的查询本地存取计划。System R*算法的目标函数是总开销,包括本地处理和通信开销。
下面是R*查询优化算法,其输入是定位后的查询,如关系代数树、关系定位及其统计信息。
算法7.4 QP-R*
像集中式情况一样,优化器必须选择连接序、连接算法(嵌套循环或归并连接)和每个数据片的存取方法(如聚集索引(clustered index)、顺序扫描(sequential scan)等)。这些决策是基于统计信息、中间关系估算公式和存取路径信息的。此外,优化器必须选择连接结果节点和节点间传输数据的方法。
System R*里,主要有两种方法支持节点间的数据传输。
●整体传输(ship-whole):整个关系送到连接节点,在连接前存放在临时关系里。如果连接算法选取归并连接,则无需存放关系,连接节点以流水线方式在其到达时处理到达的元组。
●按需取用(fetch-as-needed):顺序扫描外关系,每个元组将连接值送到内关系所在节点,选出和连接值匹配的内关系元组,回送到外关系所在节点。该方法等价于内关系和外关系元组的半连接。
显然,整体传输会产生较大的数据传输,但所需传输的消息数目(链路建立数目)要少于按需取用。直观来讲,若关系较小,则采用整体传输比较合适。反之,如果关系较大或连接选择性较好(匹配的元组较少),则采用按需取用更合适。
System R*算法不考虑连接方法的所有可能组合,因为有些方法不值得考虑。例如,在嵌套循环连接算法里使用按需取用传输外关系是不可取的,因为外关系的所有元组都必须处理。
我们来分析一下,令外关系为R,内关系为S,连接属性是A,则有4种连接策略可用。为了简化,我们忽略生成结果的开销。我们再假设s为S和R匹配的平均元组数,则
s=Card(S∝A R)/Card(R)
策略1:将整个外关系传送到内关系所在的节点。
策略2:将整个内关系传送到外关系所在的节点。此时内关系元组不能一送到就和外关系连接,需要先存放在临时关系T里。
策略3:按需为外关系的每个元组从内关系取元组。此时,对于R中的每个元组,其连接属性值传送到S所在的节点。然后将与这些连接属性值匹配的S里的s个元组选出来发送到R所在的节点,一传到就实施连接。
策略4:将两个关系都传送到第三方节点并计算连接。此时,内关系先传送到该节点,所以先存放在临时关系T里。然后外关系传送到第三方节点,一到就和T连接。
结合两种数据传输方法,可以产生多种情况。下面小结几种典型情况。
(1)嵌套循环(nested-loop),外关系整体传输,但不存储,其开销为:
C1=C(nested-loop)+Cmes×Card(O)×Size(O)/m[4]
其中:Cmes为发送一条消息的单位成本;M为发送每条消息的大小(字节计)。
(2)归并扫描(merge-scan),外关系整体传输,但不存储,其开销为:
C2=C(merge-scan)+Cmes×Card(O)×Size(O)/m
(3)嵌套循环,内关系按需取用:
C3=C(nested-loop)+Cmes×Card(O)×(1+NI×Size(I)/m)[5]
(4)归并扫描,内关系按需取用:
C4=C(merge-scan)+Cmes×val(A[O])×(1+NI×Size(I)/m)
(5)归并扫描,内关系整体传输,先存储再使用:
C5=C(merge-scan)+Cmes Card(I)×Size(I)/m+2×NI×CI/O
【例7.22】 考虑查询外关系PROJ和内关系EMP_PROJ的连接,连接属性是PNO。假设PROJ和EMP_PROJ存放在两个不同的节点上,EMP_PROJ在PNO上有一个索引,可能的执行策略如下。
(1)将整个PROJ传送到EMP_PROJ所在的节点。
(2)将整个EMP_PROJ传送到PROJ所在的节点。
(3)按需为PROJ的每个元组取EMP_PROJ的元组。
(4)将EMP_PROJ和PROJ传送到第三方的节点。
System R*算法预测每个策略中的时间,选出其中最短的一个。如果PROJ∞EMP_PROJ连接之后无其他操作了,则显然策略4的开销最大。如果Size(PROJ)远大于Size(EMP_PROJ),则策略2的通信时间最短;如果其本地处理时间与策略1和策略3的相比不是大很多的话,则策略2为最佳。值得一提的是,这里策略1和策略3的本地处理时间可能比策略2的短很多,因为可以使用连接属性的索引。
若策略2不是最佳,则可从策略1和策略3中选择。这两个策略的本地处理时间是不一样的。若PROJ较大或EMP_PROJ中只有不多元组匹配,策略3通信时间最短,则为最佳。否则,如果PROJ小或EMP_PROJ中匹配元组较多,则策略1为最佳。
3.SDD-1算法
SDD-1算法起源于爬山算法。爬山(hill-climbing)算法是一种贪心算法(greedy algorithms),特点是先从易取得的解决方案开始,然后不断地改进它。其主要问题是初始开销较大。进一步,不一定能收敛到全局最小结果。
在SDD-1算法中使用了半连接,爬山算法得到了进一步改进。目标函数依据总的通信时间(不考虑本地处理时间和响应时间)。最后,该算法使用数据库的统计信息即数据库概貌(database profiles)。此外,该算法使用后优化步骤以改进所选解决方案。该算法的主要步骤是确定有益的半连接,并进行排序。
半连接成本是连接属性A的传输,为:
Cost(R∝A S)=T MSG+TTR*Size(∏A(S))
忽略T MSG,则可以看作开销和传输数据量成正比。
半连接收益是使用该半连接使得可以减少关系R元组传输的开销:
Benefit(R∝A S)=(1-ρ)*Size(R)*T TR
SDD-1算法处理分为四个阶段:初始化、选择有益半连接、选择数据汇聚节点和后优化。该算法的输出是执行这个查询的全局策略,是查询执行的全局计划(见图7.24)。
图7.24 SDD-1优化算法示意
算法7.5 QP_SDD-1
初始化阶段是生成一个有益半连接集合BS={SJ1,SJ2,…,SJk}和一个只包含本地处理的执行策略。第二阶段是采用迭代方式从BS里选择有益半连接,每次选出最佳的半连接SJi。然后假设该半连接实施后的结果,修改数据库统计信息和BS。这种修改对该半连接涉及的关系的统计数据进行修改,也修改BS中剩下的使用该关系的半连接的统计数据。重复这个过程,直到没有剩下的半连接的收益高于开销为止。
第三阶段是选择数据汇集节点,分析每个候选节点,计算用其收集数据时的传输开销,选出其中最小传输链的一个节点作为汇集节点。
第四阶段是后优化阶段。在最后阶段,若有半连接会影响汇集节点上的关系的半连接,则从前面定下的方案中删除它。此外,若有半连接,可以将其操作数用其他半连接约简结果取代。
【例7.23】 有如下查询:(www.chuimin.cn)
其连接图如图7.25所示。
这三个的关系概貌和属性概貌分别如表7.9、表7.10所示。
图7.25 例7.23的连接图
表7.9 关系概貌
表7.10 属性概貌
①这里ρ为选择系数,可表示为ρ=Val[A]/domain(A),例如Val[R1.A]=30,domain(R1.A)=100,则ρ=0.3。
②累计属性值字节数。
假设T MSG=0,T TR=1,则初始半连接集如下。
SJ1:R2∝R1,其收益是2100=(1-0.3)*3000,成本是36。
SJ2:R2∝R3,其收益是1800=(1-0.4)*3000,成本是80。
SJ3:R1∝R2,其收益是300=(1-0.8)*1500,成本是320。
SJ4:R3∝R2,其收益是0,成本是400。
第一次迭代中,选出的最合适半连接是SJ1,将之加入执行策略ES。其对统计数据的影响是将R2的大小变成900=3000*0.3。进一步,R2.A的选择性也减小,因为半连接后的关系R2(记作R2)的基Card(R2)减小了。新的选择系数记作ρ(R2.A)=0.8*0.3=0.24。最后,R2.A的大小变为96=320*0.3。
第二个迭代里,有两个有益半连接:
SJ2:R2∝R3,其收益是540=900*(1-0.4),成本是200。
SJ3:R1∝R2,其收益是1140=(1-0.24)*1500,成本是96。
最有益的半连接是SJ3,将之加入执行策略ES。对关系R1的影响是,其大小变为360=(1500*0.24)。
第三次迭代里,只剩下一个有益的半连接SJ2,将之加入执行策略ES。其目的是减小关系R2的大小,为360=900*0.4,其统计信息也随着改变。
约简后,存放在Site1的数据量是360,Site2的数据量是360,Site3的数据量是2000。因此Site3选为数据汇集地点。后优化无法减少半连接,因为ES里的所有半连接都是有益的。结果选出的策略是发送Send(R2∝R1)∝R3和R1∝R2到Site3,该节点作为结果计算节点。
【例7.24】 考虑和分析如图7.26所示的连接图。
图7.26 连接图
这里涉及三个关系,它们的概况信息如下。
R:Card=5000,Site=1
S:Card=20,Site=2
U:Card=100,Site=3
如果使用半连接技术进行优化,结果会如何?
下面先列出可能的半连接,如表7.11所示。
表7.11 6个可能的半连接
①连接属性是B,Val[R.B]=50,Val[U.B]=20,故ρ=20/50。
②连接属性是A,Val[R.A]=100,Val[S.A]=20,故ρ=20/100。
③连接属性是C,Val[U.C]=10,Val[S.C]=5,故ρ=5/10。
从表7.11可知,选择获利最大的半连接先实施,即P2最先实施。原因是其收益为128000,开销为60,相抵后获益128000-60=127940,最多。P2先实施后,还剩下5个可选半连接。而这个操作会对其他半连接的选择系数、收益及开销发生影响,影响的关系是R。由于S在连接属性(A)上的选择系数很小(0.2),所以半连接后会传递到R的相应属性(A)上,从而使R的基发生变化,细节如下:
Card(R)=0.2*5000=1000
另外,非连接属性也会发生变化,我们可以用前面的估算公式来估算,结果如下。
R:Card(R)=0.2*5000=1000
注意:A属性的不同值个数的选择系数从100变成了20。属性B和E不是连接属性,其不同值个数只能依靠估算公式:C(n,m,r),n=5000,r=1000,m(B)=50,m(E)=500。实施后得出剩下的5个半连接如表7.12所示。
表7.12 剩下的5个半连接
由表7.12可知,这5个半连接里,获益最大的是P1,实施后对R的影响如下。
Card(R)=0.4*1000=400
对非连接属性的影响用估算公式,得出:
n=1000,r=400,m(B)=20,m(D)=100
结果如下。
R:Card(R)=0.4*1000=400
①Card(R)=0.4*1000=400,假设E均匀分布,则Val[R.E]=0.4*500=200。
实施后得出剩下的4个半连接如表7.13所示。
表7.13 剩下的4个半连接
剩下的半连接里,获益最大的为P4。实施结果对U的影响为:
Card(U)=0.5*100=50
对非连接属性的影响用估算公式,得出:
n=100,r=50,m(B)=20,m(D)=100
结果如下。
U:Card(U)=0.5*100=50
实施后得出剩下的3个半连接如表7.14所示。
表7.14 剩下的3个半连接
以上三个半连接只有开销,没有收益,因此递归终止。
半连接执行情况如下:
P2→P1→P4
下一步是确定半连接后的数据汇集节点,我们可以将开销计算如下:
Cost(Site1)=(3+2)*20+(4+2+20)*50=1400 (传送约简后的S和U)
Cost(Site2)=(3+4+25)*400+(4+2+20)*50=14100 (传送约简后的R和U)
Cost(Site3)=(3+4+25)*400+(3+2)*20=12900 (传送约简后的R和S)
所以,确定Site1作为汇集节点收集数据。
(后优化略)
有关分布式数据库技术的文章
涉网查询优化的问题主要包括三部分,其过程简述如下。查询优化器可以由三个成分构成:搜索空间、成本模型和搜索策略。图7.17查询优化过程1.搜索空间查询执行计划是算符树的一种表现形式,对执行序有更明确的表示,有丰富的附加信息,如为每个操作选择最佳实施方法。图7.19连接树的两种主要形态2.搜索策略查询优化器最常用的搜索策略是动态规划,称为确定策略。......
2023-10-28
尽量要求事务执行能够并行化。图14.16Teradata DBC的事务处理是并行的图14.16中,每个竖放的矩形表示处理器,分别记为AMP1、AMP2、AMP3和AMP4,横放的矩形表示事务。图14.18算符内并行注:为算符,为算符实例i,n=并行度2.算符间并行算符间并行指的是不同的算符并行计算。图14.19中的两个选择算符是独立并行的。算法14.2是并行关联连接算法。......
2023-10-28
从数据库里检索数据所涉及的活动称为查询处理。对于一个高级查询,DBMS可以使用不同的技术处理、优化和执行。在高级查询语言里,任何一个给定的查询可以有不同的处理方式,每个查询需要的资源也是不同的。图6.1SQL查询命令的执行步骤......
2023-10-28
查询优化器体系结构如图6.2所示。图6.2查询优化器体系结构查询优化器的工作过程一般分为两个阶段:重写阶段和规划阶段。在集中式系统中,查询执行策略可以很好地使用扩展关系代数来表示。集中式查询处理器的主要角色是为给定查询根据等价原理选择最好的关系代数查询表达形式。同时,除了要选出关系代数运算的顺序外,分布查询处理器还需确定最佳的运算执行节点。......
2023-10-28
并行查询优化与分布查询处理类似。并行查询优化可以同时利用算符内并行和算符间并行的优点,还可以使用分布式数据库管理系统的技术。并行查询优化是指生成一个给定查询的执行计划,达到目标成本函数最小的目的。为了精确预测,成本模型必须包含并行环境的知识。为了估算执行计划的成本,成本模型使用数据库统计和组织信息,如关系基和分割等,就像分布式查询优化器一样。......
2023-10-28
有多种并发控制算法的分类方式。按照同步原语可以将并发控制算法分成两类:基于互斥存取共享数据的算法和将事务排序按规则执行的算法。图9.10并发控制算法的分类●在主本封锁中,将每个封锁单元的某个副本指定为主本,在访问该单元时主本必须封锁。这些算法可以分成基本TO、多版本TO和保守TO等。实际上,在某些基于封锁的算法中也使用时标,因为这样可以改进效率和并发性,我们称为混合算法。......
2023-10-28
查询分解的最后一步是将查询重新写成关系代数的形式。重构关系代数查询以改进性能。树根则代表查询结果。其次,根节点是关于结果属性的投影操作,显示在Select子句中。 查询“那些在CAD/CAM项目中工作了1年或2年的名字不叫李林的雇员”,其SQL语句如下:Select enamef rom PROJ,EMP_PROJ,EMPwhere EMP_PROJ.eno=EMP.enoAND EMP_PROJ.pno=PROJ.pnoAND ename≠"李林"AND PROJ.pname="CAD/CAM"AND这可以映射成图7.2所示的算符树。应用变换规则,从这棵算符树可以派生出许多不同的树。如何重写,请看下面即将介绍的等价变换。图7.2算符树的例子......
2023-10-28
不像基于封锁的算法,基于时标的并发控制算法不通过互相排斥来维持可串行化。这里,唯一性是时标的第一个性质。协调事务管理器为每个事务指定时标,确定每个数据项存放的节点,并向这些节点发送执行相关操作的命令。下面的算法称为基本时标序事务管理算法,记作BTO-TM。严格2PL算法要求封锁必须推迟到事务的提交或夭折才释放,同样也可以给出一个严格的TO算法。......
2023-10-28
相关推荐