数据库程序员面试分类真题14.docx
《数据库程序员面试分类真题14.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题14.docx(24页珍藏版)》请在三一办公上搜索。
1、数据库程序员面试分类真题14倚答题1. SQ1.语句的执行过程有哪些?正确答案:Oracle数据库里SQ1.语句的执行过程可以如卜图所示。在上图中,可以看到SQ1.语句的执行过程大致分为以卜几个步骤:1)当用户提交待执行的目标SQ1.后,Oracle首先会对目标SQ1.进行解析。在这个过程中,OraCIe会先执行对目标SQ1.的语法、语义和权限的检查:语法检查(SyntaXCheCk)是检查目标SQ1.的拼写是否正确,例如,错将关键字“FRO字写成“FORM”,将SE1.ECT”写成“SE1.字”等。语义检查(SemantiCCheCk)是检查SQ1.语句中的访问对象是否存在及该用户是否具备相
2、应的权限。2)如果目标SQ1.不能通过上述语法、语义和权限的检查,那么该目标SQ1.将解析失败。如果目标SQ1.能通过上述检杳,那么接下来OraCIe就会去SGA的共享池中的库缓存中查找是否存在匹配的共享游标。如果找到了匹配的共享游标,那么Oracle就会把存储于该共享游标中的解析树和执行计划直接拿过来重用,这相当于跳过了后续的“查询转换”和“查询优化”这两个步骤,直接进入“实际执行”阶段。3)如果找不到匹配的共享游标,就意味着此时没有可以被重用的解析树和执行计划,那么接下来整个执行过程就进入查询转换这一步。在查询转换过程中,OraCIe会根据一些规则来决定是否对目标SQ1.执行查询转换,这些
3、规则在OraCIe不同的版本里不尽相同。在OraCle9i中,查询转换是独立于优化器的,它与优化器的类型无关,但是从OraeleIog开始,Oracle会对某些类型的查询转换(比如子查询展开、复杂视图合并等)分别计算经过查询转换后的等价改写SQ1.的成本和原始SQ1.的成本。只有当等价改写后SQ1.的成本值小于未经过查询转换的原始SQ1.的成本值时,OraCIe才会对目标SQ1.执行查询转换。在执行完查询转换后,原目标SQ1.可能就被OraClC改写了,当然也有可能没有改写O4)接下来,OraCIe就正式进入了查询优化这个步骤。在这个步骤里,Oracle会根据不同的优化器类型(CBo或RBO)
4、采用不同的判断原则,从执行完查询转换后得到的目标SQ1.的诸多可能的执行路径中选择一条效率最高的路径来作为其执行计划,即查询优化的输入就是执行完查询转换后得到的等价改写SQ1.,其输出就是该目标SQ1.的最终执行计划。5)在得到了目标SQ1.的执行计划后,接下来OraeIe就会根据执行计划去实际执行该SQ1.,并将执行结果返回给用户。考点游标2. 绑定变量的适用场合有哪些?正确答案:对于绑定变量应该根据系统的类型来决定是否使用绑定变量,具体如下:1)在高并发的O1.TP系统中,SQ1.语句肃宜执行频度高,但处理的数据量较少,结果集也相对较小,尤其是使用表上的索引来缩小中间结果集,其解析时间通常
5、会接近或高于执行时间,因此,在该场合一定要使用绑定变量,并且最好是使用批量绑定,因为这样可以有效降低系统硬解析的数量,这也是O1.TP类型的系统在数据库端具备良好的性能和可扩展性的前提条件。2)在O1.AP/DSS系统中,SQ1.语句执行次数相对较少,但返回的数据量较大,其SQ1.语句执行时间远高于其解析时间,硬解析对系统性能的影响是微乎其微的,因此,使用绑定变量对于总的执行时间影响不大,对系统性能的提升也非常有限。3)对于O1.AP和O1.TP混合型的应用系统,如果有循环,不管这个循环是在前台代码还是在后台P1./SQ1.代码中,循环内部的SQ1.语句一定要使用绑定变量,并且最好是使用批量绑
6、定;至于循环外部的SQ1.语句,可以不使用绑定变量O需要注意的是,对于实际的数据库对象,例如表、视图等,不能使用绑定变量替换,只能替换字面量。如果对象名是在运行时生成的,那么需要对其用字符串拼接,同时,SQ1.只会匹配已经在共享池中存在且相同的对象名。考点绑定变量3. 什么是绑定变量娅探?正确答窠:目标SQ1.若不使用绑定变量,则当具体输入值一旦发生了变化,目标SQ1.的SQ1.文本就会随之发生变化,这样OraCIe就能很容易地计算出对应Selectivity和CardinaIily的值,进而据此来选择执行计划。但对于使用了绑定变量的目标SQ1.而言,情况就完全不一样了,因为现在无论对应绑定变
7、量的具体输入值是什么,目标SQ1.的SQ1.文本都是一模一样的。对于使用了绑定变量的目标SQ1.而言,Oracle可以选择如下两种方法来决定其执行计划:D使用绑定变量窥探(BindPeeking),2)如果不使用绑定变量窥探,那么对于那些可选择率可能会随着具体输入值的不同而不同的谓词条件使用默认的可选择率(例如5蛤。绑定变量窥探是在OraCIe9i中引入的,是否启用绑定变量窥探受隐含参数“OPTIMPEEKUSERBINDS的控制,该参数的默认值是TRUE,表示在Oracle9i及其后续的版本中,默认启用绑定变量婉探。考点绑定变量4. 如何得到已执行的目标SQ1.中的绑定变量的值?正确答窠:当
8、Oracle解析和执行含有绑定变量的目标SQ1.时,如果满足如下两个条件之一,那么该SQ1.中的绑定变量的具体输入值就会被Oracle捕获:1)当含有绑定变量的目标SQ1.以硬解析的方式被执行时。2)当含有绑定变量的目标SQ1.以软解析或软软解析的方式重熨执行时,OraCle在默认情况卜至少得间隔15nin才会捕获一次。这个15nin受隐含参数“CURSORBINDCAPTUREINTERVA1.控制,默认值为900s,即15min0需要注意的是,Oracle只会捕获那些位于目标SQ1.的WHERE条件中的绑定变量的具体输入值,而对于那些使用了绑定变量的INSERT语句,不管该INSERT语句
9、是否是以硬解析的方式执行,Oracle始终不会捕获INSEKT语句的H1.UES了句中对应绑定变量的具体输入值。查询视图V$SQ1._B1ND_CAPTIRE可以得到已执行目标SQ1.中绑定变量的具体输入值。如果V$SQjBIND/APTURE中查不到,那么有可能对应的SharedCurrsor己经从SharedPool中被清除了,这时候可以尝试从AWR相关的数据字典表DBA_HIST_SQ1.STAT或DBA_HIST_SQ1.BIND中查询。考点而定变量5. 什么是游标共享?正确答案:游标共享(CUrSOrSharing)是指共享游标(SharedCUrSOr)之间的共享,游标共享可以实现
10、重用存储在子游标(ChildCUrSor)中的解析树和执行计划而不用从头开始做硬解析,从而提高系统性能。特别是对于同一类型的目标SQ1.更应该实现游标共享,而使用绑定变量就可以实现游标共享。游标共享分为常规游标共享和自适应游标共享。考点绑定变量6. 获取执行计划有哪几种方法?正确答案:对于这几种获取执行冲划的方法有如下结论:1)若目标SQ1.需要执行很长时间才能返回结果,则推荐使用EXP1.AlNP1.ANFOR来获取执行计划。2)若要查询目标SQ1.的所有子游标的执行计划,则推荐使用DBMSXP1.N.DISPUYCURSOR(,&SQIJD*,NU1.1.,ADVANCEDA1.1.STA
11、TS)或awrsqrpt.sql来获取执行计划。3)若要分析SQ1.语句的内部调用详情,则推荐使用10046事件。4)若想确保看到真实的执行计划,则不能使用EXP1.ANP1.ANFOR和SETutotrcetrceonlyexplain。5)若想获取到表的访问次数,则推荐/*+GATHER_P1.AN_STATISTICS*/06)若数据库版本大于10g,则对执行时间较长的SQ1.语句推荐使用SQ1.实时监控特性查看html报告。考点执行计划7. 如何得到真实的执行计划?正确答案:在Oracle数据库中判断得到的执行计划是否准确,就是看目标SQ1.是否被真正执行过,真正执行过的SQ1.所对应
12、的执行计划就是准确的,反之则有可能不准,因此,通过10046事件及如下的几种方式得到的执行计划必最准确的,而从其他方式获取到的执行计划都有可能不准确。SE1.ECT*1ROMTAB1.E(DBMS_XP1.AN.DlSP1.ACURSOR(NU1.1.,NU1.1.,ADVANCEDA1.1.STATS,):SE1.ECT*1ROMTAB1.E(DBMS_XP1.AN.DISP1.AY_CURSOR(,sql.idhash-value,CHI1.D_CURSOR_NUMBER,ADVANC印A1.1.STTS,);SE1.ECT*FROMTAB1.E(DBMS-XP1.AN.DISP1.AY.
13、AWR(,sql.id,);这里需要注意的是,虽然SQI.*Plus的AUTOTRACE功能有部分是真实执行了SQ1.语句的(例如所有DM1.语句),但是由于该命令所显示的执行计划来源于调用EKP1.AlNP1.AN命令,所以,其得到的执行计划依然可能不准确(特别是在使用了绑定变量的情况卜考点执行计划8. 如何固定SQ1.执行计划?正确答案:在实际项目中,通常在开发环境下,一些SQ1.执行没有任何功能问题,而当生产环境或生产环境的数据量发生较大的变化时,其SQ1.的执行效率非常低。此时如果更改SQ1.,那么可能需要重新修改源程序以及重新编译程序。如果修改源程序的成本比较大,那么可以使用一些方法
14、在不改变源应用程序的情况下更改特定SQ1.的执行计划并固定下来。因为在SQ1.语句的执行计划发生更改时,可能存在性能风险。SQ1.计划发生更改的原因有很多,如优化程序版本、优化程序统计信息、优化程序参数、方案定义、系统设计和SQ1.概要文件创建等。有4种方式可以固定和控制执行计划,分别是使用HinI(提示)、OUT1.INE(存储概要)、SQ1.PROFl1.E(SQ1.概要文件)和SPM(SQ1.PlanManagemem,SQ1.计划管理)O考点执行计划9. 什么是半连接(SemiJoin)?正确答案:半连接(SemiJOin)是一种特殊的连接类型,当执行了查询展开时,OraCIe经常会把
15、那些外部WHERE条件为EXISTS.IN或ANY的;查询转换为对应的半连接。半连接分为嵌套循环半连接(Hinl为N1._SJ)、排序合并半连接(Hint为MERGE一SJ)和哈希半连接(Hint为HASl1.SJ),不过在新版本数据库里,都倾向于使用喑希半连接。哈希半连接也有一些限制条件,例如,只能使用等值连接,不能使用GROUPBY、CONNECTBWROWNUM等限制条件。在执行计划中若有关键字“HASHJOINSEM,则说明OraCle使用了哈希半连接。考点SQ1.优化10. 什么是反连接(AntiJoin)?正确答案:反连接(AntiJOin)也是种特殊的连接类型,通常用于从一个点中
16、返回不在另一个数据源中的数据行。当做了查询展开时,OraCle经常会把那些外部WHERE条件为NoTEXISTSNOTlN或A1.1.的了查询转换成对应的反连接。反连接分为嵌套循环反连接(NESTED1.ooPSNT1.Hint为N1.AJ)、排序合并反连接(MERGEJOINANrn,Hint为MERGE_AJ)和哈希反连接(HASHJOINANrn,Hint为HASF1.AJ)。需要注意的是,NOTIN和VA1.1.对U1.1.值敏感,这意味着V)TIN后面的子查询或者常量集合一旦有NU1.1.值出现,则整个SQ1.的执行结果就会为NU1.1.,即此时的执行结果将不包含任何记录。但是,NO
17、TEXlSTS对NU1.1.值不敏感,这意味着NU1.1.值对NOTEXlSTS的执行结果不会有什么影响。正是因为NOTlN和VA1.1.对NU1.1.值敏感,所以一旦相关的连接列上出现了Ml1.1.值,此时OraCIe如果还按照通常的反连接的处理逻辑来处理.,得到的结果就不对/为了解决NOTIN和VA1.1.对NU1.1.值敏感的问题,Oracle推出了改良的反连接,这种反连接能够处理NU1.1.值,OraCIe称其为NUII-AWareAntiJoin,如下例:SE1.ECT,ROMDEPIAWHEREDEPTNONOTIN(SE1.ECTDEPTNOFROMEMP):IIdOperati
18、onNa8osBytesCost(VH)ITiwI0SE1.HTSTATflENTI235(20)i00:00:01*1HAS)JOINAXIIXA1235(20)i00:00:0)12T.WACCESSFlUCePT4l802(O)100:00:0!I3T三ACCESSFillBFIi12362(0)00:00:01I执行步骤的列OPeration的值为“HASHJOINANTINAw,关键字“NA”就是NUlIAWare的缩写,表示这里采用的不是普通的哈希反连接,而是改良后的、能够处理NU1.1.值的哈希反连接。在OraCIellgR2中,OraCle是否启用NUlI-AWareAntiJ
19、Oin受隐含参数“_OPTIMIZER_NU1.1._AWARE_ANTIJOIN”控制,其默认值为TRiJE,表示启用Nu11-AwarentiJOin。如果把该参数的值修改为FA1.SE那么表示Orac1e就不能再用NUlI-AWareAntiJOin了,而又因为NOTIN对NU1.1.值敏感,所以Oracle此时也不能用普通的反连接。考点SQ1.优化11. 什么是星型连接(SlarJoin)?正确答案:星型连接(StarJOin)通常用于数据仓库类型的应用,它是一种单个事实表(FactTabIe)和多个维度表(DimenSiOnTable)之间的连接。星型连接的各维度表之间没有直接的关联
20、条件,其事实表和各维度表之间是基于事实表的外健列和对应维度表的主键列之间的连接,并且通常在事实表的外键列上还会存在对应的位图索引。考点SQ1.优化12. 友和表之间的关联方式有哪几种?正确答案:目前为止,无论连接操作符如何,典型的连接类型共有3种:1)排序合并连接(SortMergeJoin,SMJ),Oracle6提供。2)嵌套循环(NeSted1.oopsN1.),Oracle6提供。3)哈希连接(HaShJoin,HJ),也叫散列连接,Oracle7.3新增。另外,还有一种笛卡儿积(MergeJoinCartesian,MJe)连接,在OraCIe6版本的时候就已经提供,一般情况下,尽量
21、避免使用。对于OraCIe6提供的群集连接(ClUSterJoin)和OraCIe8提供的索引连接(IndeXJoin),本书不做介绍。对于DBA来说,掌握这3种表的连接方式可以对SQ1.优化起到至关重要的作用。对于这3种关联方式的详细对比,参考下表。表连排序合并连接哈希连接接方嵌套循环式/*+USE_N1.(TIT2)*/或若/*+Hint1.EADING(Tl)USE_N1.(T2)*/*+USE_MERGE(TlT2)*/则Tl作为驱动表,T2作为被驱动表有,驱动表的顺序直接影响SQ1.语句的性能,应该是小的结果集先访问,大的结果集后访问才能保证被驱.动表的访问次数2机降到最低,从而提升
22、性能手雷鲁(逻辑读BUFEER无姒于差异大)。需要注意的是,应该选择由过浦条件限制返回记录最少的那张表作为驱动表,而不是根据表的大小来选择驱动表*+USEHASH(TlT2)*/有,驱动表的顺序非常重要,直接影响内存消耗(OMere、Used-Mem差异大)。所以,应该小表作驱动,内存消耗要小得多,性能更好驱动表最多被访问1次,被驱动表被访表访问N次,N由驱动表返回相关联的2张表都最多被访驱动表和被驱动表问次的结果集的行数问都是最多被访问1数来决定,即驱动表返回多1次,和HJ一样次少条记录,被驱动表就访问多少次,:也若驱动表根据过滤条件返回。条记录,则此时,驱动表被访问1次,被驱鲁认动表被访问
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 程序员 面试 分类 14

链接地址:https://www.31ppt.com/p-7141770.html