您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > oracle名词解释
OLAPandOLTPOLTP(在线事务处理系统)OLAP(在线分析系统)对于一个olap系统,大型的查询每天做几次,没有必要将大量的数据缓存到内存里,完全没有必要,所以一般bufferhit都比较低对于一个olap系统,内存优化余地不大,增加cpu速度和磁盘io速度才是最直接的提高性能的方式。oltp系统的用户并发数很多,而且多是小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。对于一个oltp系统来说,数据库内存设计显得很重要,如果数据都可以在内存处理,性能无疑会提高很多。oltp系统是一个数据块变化非常频繁,sql语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存中;对于sql来说,应尽可能使用绑定变量来达到sql的重用,减少物理io和反复的sql解析。oltp热快问题:当一个块被多个用户同时读取的时候,oracle为了维护数据的一致性,需要使用一种称为latch的东西来串行化用户的操作。当一个用户获得了这个latch之后,其他的用户只能被迫等待,获取这个数据块的用户越多,等待就越明显,这就造成了热快问题。这种热快可能是数据块也可能是回滚段块。对于数据块来讲通常是数据块上的数据分布不均导致,如果是索引的数据块,可以考虑建反向索引来达到重新分布数据的目的;对于回滚段数据块,可以适当增加几个回滚段来避免争用。SGA系统全局区,是oracle用来为实例存储数据和控制信息的共享内存区。在实例启动时分配,关闭时释放。数据库缓冲区高速缓存(buffercache):保存了最近使用过的数据块。最近最多使用算法(most-recently-used)共享池:存储共享内存结构的区域。如librarycache中的sql区,以及数据字典的内部信息librarycache:SQL和PLSQL的文本,执行计划,编译数datadictionarycache:oracle数据字典包含一组表和视图,oracle将他们作为数据库的引用,在其中存储了与数据库的逻辑和物理结构相关的信息用户信息;如权限等为数据库表定义的完整性约束数据库表中所有列的名称以及数据类型为模式对象分配空间及其使用情况的信息PGA包含oracle服务器进程的数据和控制信息的内存区域堆栈区:存储会话的变量、数组等的内存空间(堆栈区保存变量信息)会话区:如果不是MTS服务器,会话信息会保持在PGA中,如过是MTS服务器,会话信息保持在SGA中(会话区保存着用户的权限等重要信息)排序区:游标区:当运行使用游标的语句时,Oracle数据库系统会在程序缓存区中间为其分配一块区域。这块区域就叫做游标区。一般来说,采用游标的语句要比其他语句的执行效率低一点。游标区是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游标操作的效率,改善数据库的性能。例如,当一个用户连接数据库并调用SQL语句时,这条SQL语句对应的游标就将在PGA中创建一个运行时区域,注意,这个区域是私有的,只针对调用SQL的这个用户进程。PGA就是所有服务器进程的逻辑集合。因此PGA和SGA有着质的不同。SGA用于在进程间共享信息,PGA则用于信息私有化。PGA的大小直接影响了性能,尤其针对会导致排序的SQL查询。以下几种情况需要提供足够的PGA:导致排序的操作如ORDERBY、GROUPBY、ROLLUP等操作哈希连接位图合并位图创建批量数据装载两个PGA建议性能视图:V$PGA_TARGET_ADVICE和V$PGA_TARGET_ADVICE_HISTOGRAM当用户需要对某些数据进行排序时,数据库是如何处理的呢?首先,数据库系统会将需要排序的数据保存到PGA程序缓存区中的一个排序区内。然后再在这个排序区内对这些数据进行排序。如需要排序的数据有2M,那么排序区内必须至少要有2M的空间来容纳这些数据。然后排序过程中又需要有2M的空间来保存排序后的数据。由于系统从内存中读取数据比从硬盘中读取数据的速度要快几千倍,如果这个排序的操作都能够在内存中完成,显然这是很理想的。设置合理的PGA_aggregate_target的值来调整排序区的大小检查点为什么要用检查点?(因为所有对数据的修改都是在块缓冲区内完成的,所以并非所有的修改都会反映到磁盘的数据块上。而缓存又是按照LRU算法实现的,如果某个缓冲区一直被修改,那么他将一直被标记为最近使用,处于LRU列表的顶端,不会被DBWR写回磁盘。)检查点进程确保脏数据能够最终被写回磁盘。oralce使用ckpt或者lgwr进程来引发检查点。检查点通过定期将脏缓冲强制写回的手段来确保这些缓冲区被写回磁盘。但是并不是说检查点期间其他工作都要停止。日志切换的时候会自动触发检查点。经常执行检查点可以减少系统故障恢复时间。两种检查点运行方式:快速检查点、标准检查点标准检查点:DBWR进程只是在每次激活的时候写回少量的缓冲区,执行时间稍长,但是对系统影响小。快速检查点:DBWR进程每次激活时写回大量的缓冲区,系统运行更快,IO效率高,但是对系统的性能影响较大。MTTRFAST_START_MTTR_TARGET中的mttr就是meantimetorecovery,定义数据库进行crash恢复的时间,单位为秒。FAST_START_MTTR_TARGET=0启用自动调整的检查点它不直接影响checkpoint事件,而是当内存中脏数据需要恢复时间estimated_mttr达到fast_start_mttr_target时,才触发checkpoint。如何定义FAST_START_MTTR_TARGET参数值可查看V$mttr_target_advice试图的建议。TTR顾问工具能够统计MTTR造成的额外的物理写入操作,从而协助用户评估不同MTTR设置对系统性能的影响。MTTR顾问工具启用,且系统在正常负载下运行一段时间后,用户可以查询V$MTTR_TARGET_ADVICE视图,获得其他MTTR设置与当前MTTR设置下数据库缓存写入操作的比率后台进程—DBWR负责将脏数据块从数据块缓存(databaseblockbuffer)写入磁盘。当一个事务修改数据块中的数据后,不需要将数据块立即写回磁盘。DBWR通常定时写回数据,除非数据缓冲区需要清空。数据写回时,采用最近最少使用(least-recently-used)的原则DBWR触发:出现检查点脏数据缓冲区达到阀值没有空闲缓冲区表空间offline状态表空间readonly状态对表空间执行beginbackup对表执行drop或者truncate出现超时执行RACping请求后台进程—LGWR负责将日志缓冲区中的数据写入到redolog。LGWR触发:commit1/3满有1MB的redo每3秒DBWR写之前后台进程—PMON负责监视数据块的处理情况,并负责清除死掉的进程。还负责重启失败的调度进程(dispatcherprocess)回退事务处理释放锁和其他资源后台进程—SMON负责在实例启动时恢复实例、前滚日志中的修改回退未提交的事务回收临时空间还可以清除数据块中的碎片(通过合并空闲区间的方式)打开数据库供用户访问后台进程—ckpt负责向DBWR进程发送信号,要求执行一次检查点,并更新数据块的所有数据文件的标头和控制文件。检查点:是由DBWR进程将所有修改过的数据缓冲区写回数据文件,是可选的进程,如果没有,则由LGWR代替后台进程—ARCHn负责将在线重做日志复制到归档存储器。系统必须是归档模式,进程最多10个表连接--NESTEDLOOP对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(大于1万不适合)要把返回子集较小表的作为外表(CBO默认外表是驱动表),而且在内表的连接字段上一定要有索引。Nestedloop一般用在连接的表中有索引,并且索引选择性较好的时候.USE_NL(table_name1table_name2)表连接--HASHJOIN散列连接是CBO做大数据集连接时的常用方式优化器使用两个表中较小的表(或数据源)利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。这种方式适用于较小的表完全可以放于内存中的情况,这样总成本就是访问两个表的成本之和。但是在表很大的情况下并不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量提高I/O的性能。USE_HASH(table_name1table_name2)表连接--SORTMERGEJOIN通常情况下散列连接的效果都比排序合并连接要好,然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。SortMergejoin用在没有索引,并且数据已经排序的情况.USE_MERGE(table_name1table_name2)表连接工作方式区别三种连接工作方式比较:Nestedloops工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nestedloops适用的场合是当一个关联表比较小的时候,效率会更高。Hashjoin的工作方式是将一个表(通常是小一点的那个表)做hash运算,将列数据存储到hash列表中,从另一个表中抽取记录,做hash运算,到hash列表中找到相应的值,做匹配。MergeJoin是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配,因为mergejoin需要做更多的排序,所以消耗的资源更多。通常来讲,能够使用mergejoin的地方,hashjoin都可以发挥更好的性能。CRBlock(consistentread)blocks就是读一致性块ORACLE在三种条件下需要构造CR块1)查询时刻的SCN大于数据块的COMMITSCN,即SQL游标被打开时的SCN大于数据库上记录的SCN。2)数据块上存在LOCK3)闪回查询。RDBA(Tablespacerelativedatabaseblockaddress)RDBA是相对数据块地址,是数据字典(表空间及一些对象定义)所在块的地址。当我们想要查找某个数据的时候,发现这个数据块的版本比我们要查找的要新,那么我们只能从UNDO中去查找这个数据的前映像(PREIMAGE),在回滚段中找到这个数据的前映像后,把前映像和CURRENT的数据块合并,就形成一个CRBLOCK,这样,通过查询CRBLOCK就可以得到一致性的数据了。这个CRBLOCK的生成不是在PGA里进行的,而是要在DBCACHE里申请一个数据块,然后生成CRBLOCK。这个CRBLOCK创建后,如果下一回还要访问这个版本的数据块,那么就不需要创建新的CRBLOCK,而直接可以使用以前创建的CRBLOCK了。每创建一个CRBLOCK,CRBLOCKSCREATED计数器就会增加1。由于CRBLOCK和CURRENTBLOCK的RDBA都是相同的,因此它们会被放到相同的HASH链上。因此如果某些BLOCK的CRBLOCK的版本过多,也会导致BUFFERCACHECHAINS闩锁竞争加剧。如果在生成CRBLOCK的过程中,发现UNDO中的PREIMAGE由于提交的时间比较长,已经被覆盖,那么,就会出现著名的ORA-1555。如果单位时间内CRBLOCKSCREATED较大,那么应该检查系统的CPU资源是否出现瓶颈,另外要注意检查BUFFERCACHE相关的闩锁,是否存在竞争。索引oracle的标准索引结构是B×tree结构,一个B×tree结构由三种block组成根块(rootblock):在B×tree里有且只有一个block,所有访问索引都从这开始,rootblock下有很多childblocks。分支块(Branchblocks):这是中间层,branchblo
本文标题:oracle名词解释
链接地址:https://www.777doc.com/doc-7468211 .html