oracle名词解释.doc
《oracle名词解释.doc》由会员分享,可在线阅读,更多相关《oracle名词解释.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、OLAP and OLTPOLTP (在线事务处理系统)OLAP (在线分析系统)对于一个olap系统,大型的查询每天做几次,没有必要将大量的数据缓存到内存里,完全没有必要,所以一般buffer hit都比较低对于一个olap系统,内存优化余地不大,增加cpu速度和磁盘io速度才是最直接的提高性能的方式。oltp系统的用户并发数很多,而且多是小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。对于一个oltp系统来说,数据库内存设计显得很重要,如果数据都可以在内存处理,性能无疑会提高很多。oltp系统是一个数据块变化非常频繁,sql语句提交非常频繁的系统。对于数据块来说,
2、应尽可能让数据块保存在内存中;对于sql来说,应尽可能使用绑定变量来达到sql的重用,减少物理io和反复的sql解析。oltp热快问题:当一个块被多个用户同时读取的时候,oracle为了维护数据的一致性,需要使用一种称为latch的东西来串行化用户的操作。当一个用户获得了这个latch之后,其他的用户只能被迫等待,获取这个数据块的用户越多,等待就越明显,这就造成了热快问题。这种热快可能是数据块也可能是回滚段块。对于数据块来讲通常是数据块上的数据分布不均导致,如果是索引的数据块,可以考虑建反向索引来达到重新分布数据的目的;对于回滚段数据块,可以适当增加几个回滚段来避免争用。SGA系统全局区,是o
3、racle用来为实例存储数据和控制信息的共享内存区。在实例启动时分配,关闭时释放。数据库缓冲区高速缓存(buffer cache):保存了最近使用过的数据块。最近最多使用算法(most-recently-used)共享池:存储共享内存结构的区域。如library cache中的sql区,以及数据字典的内部信息library cache:SQL 和PL SQL 的文本,执行计划,编译数data dictionary cache:oracle数据字典包含一组表和视图,oracle将他们作为数据库的引用,在其中存储了与数据库的逻辑和物理结构相关的信息用户信息;如权限等为数据库表定义的完整性约束数据库
4、表中所有列的名称以及数据类型为模式对象分配空间及其使用情况的信息PGA包含oracle服务器进程的数据和控制信息的内存区域堆栈区: 存储会话的变量、数组等的内存空间(堆栈区保存变量信息)会话区:如果不是MTS服务器,会话信息会保持在PGA中,如过是MTS服务器,会话信息保持在SGA中(会话区保存着用户的权限等重要信息)排序区:游标区:当运行使用游标的语句时,Oracle数据库系统会在程序缓存区中间为其分配一块区域。这块区域就叫做游标区。一般来说,采用游标的语句要比其他语句的执行效率低一点。游标区是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游
5、标操作的效率,改善数据库的性能。例如,当一个用户连接数据库并调用SQL语句时,这条SQL语句对应的游标就将在PGA中创建一个运行时区域,注意,这个区域是私有的,只针对调用SQL的这个用户进程。PGA就是所有服务器进程的逻辑集合。因此PGA和SGA有着质的不同。SGA用于在进程间共享信息,PGA则用于信息私有化。PGA的大小直接影响了性能,尤其针对会导致排序的SQL查询。以下几种情况需要提供足够的PGA:导致排序的操作如 ORDER BY、GROUP BY、 ROLLUP等操作哈希连接位图合并位图创建批量数据装载两个PGA建议性能视图:V$PGA_TARGET_ADVICE和V$PGA_TARG
6、ET_ADVICE_HISTOGRAM当用户需要对某些数据进行排序时,数据库是如何处理的呢?首先,数据库系统会将需要排序的数据保存到PGA程序缓存区中的一个排序区内。然后再在这个排序区内对这些数据进行排序。如需要排序的数据有2M,那么排序区内必须至少要有2M的空间来容纳这些数据。然后排序过程中又需要有2M的空间来保存排序后的数据。由于系统从内存中读取数据比从硬盘中读取数据的速度要快几千倍,如果这个排序的操作都能够在内存中完成,显然这是很理想的。设置合理的PGA_aggregate_target的值来调整排序区的大小检查点为什么要用检查点?(因为所有对数据的修改都是在块缓冲区内完成的,所以并非所
7、有的修改都会反映到磁盘的数据块上。而缓存又是按照LRU算法实现的,如果某个缓冲区一直被修改,那么他将一直被标记为最近使用,处于LRU列表的顶端,不会被DBWR写回磁盘。)检查点进程确保脏数据能够最终被写回磁盘。oralce使用ckpt或者lgwr进程来引发检查点。检查点通过定期将脏缓冲强制写回的手段来确保这些缓冲区被写回磁盘。但是并不是说检查点期间其他工作都要停止。日志切换的时候会自动触发检查点。经常执行检查点可以减少系统故障恢复时间。两种检查点运行方式:快速检查点、标准检查点标准检查点:DBWR进程只是在每次激活的时候写回少量的缓冲区,执行时间稍长,但是对系统影响小。快速检查点:DBWR进程
8、每次激活时写回大量的缓冲区,系统运行更快,IO效率高,但是对系统的性能影响较大。MTTRFAST_START_MTTR_TARGET中的mttr就是mean time to recovery,定义数据库进行crash恢复的时间,单位为秒。FAST_START_MTTR_TARGET=0启用自动调整的检查点它不直接影响checkpoint事件,而是当内存中脏数据需要恢复时间estimated_mttr达到fast_start_mttr_target时,才触发checkpoint。如何定义FAST_START_MTTR_TARGET参数值可查看V$mttr_target_advice试图的建议。T
9、TR 顾问工具能够统计 MTTR 造成的额外的物理写入操作,从而协助用户评估不同 MTTR 设置对系统性能的影响。MTTR 顾问工具启用,且系统在正常负载下运行一段时间后,用户可以查询 V$MTTR_TARGET_ADVICE 视图,获得其他 MTTR 设置与当前 MTTR 设置下数据库缓存写入操作的比率后台进程DBWR负责将脏数据块从数据块缓存(database block buffer)写入磁盘。当一个事务修改数据块中的数据后,不需要将数据块立即写回磁盘。DBWR通常定时写回数据,除非数据缓冲区需要清空。数据写回时,采用最近最少使用(least-recently-used)的原则DBWR触
10、发:出现检查点脏数据缓冲区达到阀值没有空闲缓冲区表空间offline状态表空间read only状态对表空间执行begin backup对表执行drop或者truncate出现超时执行RAC ping请求后台进程LGWR负责将日志缓冲区中的数据写入到redo log。LGWR触发:commit1/3满有1MB的redo每3秒DBWR写之前后台进程PMON负责监视数据块的处理情况,并负责清除死掉的进程。还负责重启失败的调度进程(dispatcher process)回退事务处理释放锁和其他资源后台进程SMON负责在实例启动时恢复实例、前滚日志中的修改回退未提交的事务回收临时空间还可以清除数据块中
11、的碎片(通过合并空闲区间的方式)打开数据库供用户访问后台进程ckpt负责向DBWR进程发送信号,要求执行一次检查点,并更新数据块的所有数据文件的标头和控制文件。检查点:是由DBWR进程将所有修改过的数据缓冲区写回数据文件,是可选的进程,如果没有,则由LGWR代替后台进程ARCHn负责将在线重做日志复制到归档存储器。系统必须是归档模式,进程最多10个表连接- NESTED LOOP对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(大于1 万不适合)要把返回子集较小表的作为外
12、表(CBO 默认外表是驱动表),而且在内表的连接字段上一定要有索引。Nested loop一般用在连接的表中有索引,并且索引选择性较好的时候.USE_NL(table_name1 table_name2)表连接- HASH JOIN散列连接是CBO 做大数据集连接时的常用方式优化器使用两个表中较小的表(或数据源)利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。这种方式适用于较小的表完全可以放于内存中的情况,这样总成本就是访问两个表的成本之和。但是在表很大的情况下并不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时
13、段,此时要有较大的临时段从而尽量提高I/O 的性能。USE_HASH(table_name1 table_name2)表连接- SORT MERGE JOIN通常情况下散列连接的效果都比排序合并连接要好,然而如果行源已经被排过序,在执行排序合并连接时不需要再排序了,这时排序合并连接的性能会优于散列连接。Sort Merge join 用在没有索引,并且数据已经排序的情况.USE_MERGE(table_name1 table_name2)表连接工作方式区别三种连接工作方式比较:Nested loops 工作方式是从一张表中读取数据,访问另一张表(通常是索引)来做匹配,nested loops适
14、用的场合是当一个关联表比较小的时候,效率会更高。Hash join的工作方式是将一个表(通常是小一点的那个表)做hash运算,将列数据存储到hash列表中,从另一个表中抽取记录,做hash运算,到hash 列表中找到相应的值,做匹配。Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配,因为merge join需要做更多的排序,所以消耗的资源更多。 通常来讲,能够使用merge join的地方,hash join都可以发挥更好的性能。CR Block(consistent read) blocks 就是读一致性块ORACLE在三种条件下需要
15、构造CR块1)查询时刻的SCN大于数据块的COMMIT SCN,即SQL 游标被打开时的SCN大于数据库上记录的SCN。2)数据块上存在LOCK3)闪回查询。RDBA(Tablespace relative database block address)RDBA是相对数据块地址,是数据字典(表空间及一些对象定义)所在块的地址。当我们想要查找某个数据的时候,发现这个数据块的版本比我们要查找的要新,那么我们只能从UNDO中去查找这个数据的前映像(PRE IMAGE),在回滚段中找到这个数据的前映像后,把前映像和CURRENT的数据块合并,就形成一个CR BLOCK,这样,通过查询CR BLOCK就
16、可以得到一致性的数据了。这个CR BLOCK的生成不是在PGA里进行的,而是要在DB CACHE里申请一个数据块,然后生成CR BLOCK。这个CR BLOCK创建后,如果下一回还要访问这个版本的数据块,那么就不需要创建新的CR BLOCK,而直接可以使用以前创建的CR BLOCK了。每创建一个CR BLOCK,CR BLOCKS CREATED计数器就会增加1。由于CR BLOCK和CURRENT BLOCK的RDBA都是相同的,因此它们会被放到相同的HASH链上。因此如果某些BLOCK的CR BLOCK的版本过多,也会导致BUFFER CACHE CHAINS闩锁竞争加剧。如果在生成CR
17、BLOCK的过程中,发现UNDO中的PRE IMAGE由于提交的时间比较长,已经被覆盖,那么,就会出现著名的ORA-1555。如果单位时间内CR BLOCKS CREATED较大,那么应该检查系统的CPU资源是否出现瓶颈,另外要注意检查BUFFER CACHE相关的闩锁,是否存在竞争。索引oracle的标准索引结构是Btree结构,一个Btree结构由三种block组成根块(root block):在Btree里有且只有一个block,所有访问索引都从这开始,root block下有很多child blocks。分支块(Branch blocks):这是中间层,branch block是没有什
18、么限制的,它是随着leaf block的增加而增加的,branch block一般是4层,如果多于4层,就影响性能了。在我们删除行时,branch block是不被删除的。叶块(leaf block):叶块是最底层,上面存储着索引条目和rowid索引和表数据是级联关系的,当删除表数据的时候,索引条目也会被自动删除,这样在index leaf block就会产生碎片,这也就是在OLTP系统上有大量更新的表上不建议创建大量的索引,很影响性能有的人说删除过的索引条目空间不会被再用,因为在应用中不会再有insert相同的数据。其实这个说法不完全对的,除了半空叶块外,其他的删除的索引空间是可被再利用的。
19、索引建立的原则1、表的主键、外键必须有索引;2、数据量超过300的表应该有索引;3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:A、正确选择复合索引中的主列字段,一般是选择性较好的字段;B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;C、如果复合索引中包含的字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 名词解释
限制150内