oracle名词解释
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OLAP and OLTP
OLTP (在线事务处理系统)
OLAP (在线分析系统)
对于一个olap系统,大型的查询每天做几次,没有必要将大量的数据缓存到内存里,完全没有必要,所以一般buffer hit都比较低
对于一个olap系统,内存优化余地不大,增加cpu速度和磁盘io速度才是最直接的提高性能的方式。
oltp系统的用户并发数很多,而且多是小的操作,数据库侧重于对用户操作的快速响应,这是对数据库最重要的性能要求。
对于一个oltp系统来说,数据库内存设计显得很重要,如果数据都可以在内存处理,性能无疑会提高很多。
oltp系统是一个数据块变化非常频繁,sql语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存中;对于sql来说,应尽可能使用绑定变量来达到sql的重用,减少物理io和反复的sql解析。
oltp
热快问题:当一个块被多个用户同时读取的时候,oracle为了维护数据的一致性,需要使用一种称为latch的东西来串行化用户的操作。当一个用户获得了这个latch之后,其他的用户只能被迫等待,获取这个数据块的用户越多,等待就越明显,这就造成了热快问题。这种热快可能是数据块也可能是回滚段块。对于数据块来讲通常是数据块上的数据分布不均导致,如果是索引的数据块,可以考虑建反向索引来达到重新分布数据的目的;对于回滚段数据块,可以适当增加几个回滚段来避免争用。
SGA
系统全局区,是oracle用来为实例存储数据和控制信息的共享内存区。在实例启动时分配,关闭时释放。
数据库缓冲区高速缓存(buffer cache):保存了最近使用过的数据块。最近最多使用算法(most-recently-used)
共享池:
存储共享内存结构的区域。如library cache中的sql区,以及数据字典的内部信息
library cache:SQL 和PL SQL 的文本,执行计划,编译数
data dictionary cache:oracle数据字典包含一组表和视图,oracle将他们作为数据库的引用,在其中存储了与数据库的逻辑和物理结构相关的信息
用户信息;如权限等
为数据库表定义的完整性约束
数据库表中所有列的名称以及数据类型
为模式对象分配空间及其使用情况的信息
PGA
包含oracle服务器进程的数据和控制信息的内存区域
堆栈区:存储会话的变量、数组等的内存空间(堆栈区保存变量信息)
会话区:如果不是MTS服务器,会话信息会保持在PGA中,如过是MTS服务器,会话信息保持在SGA中(会话区保存着用户的权限等重要信息)
排序区:
游标区:当运行使用游标的语句时,Oracle数据库系统会在程序缓存区中间为其分配一块区域。这块区域就叫做游标区。一般来说,采用游标的语句要比其他语句的执行效率低一点。游标区是一个动态的区域,在游标打开时创建,关闭时释放。故在数据库开发时,不要频繁的打开和关闭游标可以提高游标操作的效率,改善数据库的性能。
例如,当一个用户连接数据库并调用SQL语句时,这条SQL语句对应的游标就将在PGA中创建一个运行时区域,注意,这个区域是私有的,只针对调用SQL的这个用户进程。PGA 就是所有服务器进程的逻辑集合。
因此PGA和SGA有着质的不同。SGA用于在进程间共享信息,PGA则用于信息私有化。
PGA的大小直接影响了性能,尤其针对会导致排序的SQL查询。
以下几种情况需要提供足够的PGA:
导致排序的操作如ORDER BY、GROUP BY、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效率高,但是对系统的性能影响较大。
MTTR
FAST_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试图的建议。TTR 顾问工具能够统计MTTR 造成的额外的物理写入操作,从而协助用户评估不同MTTR 设置对系统性能的影响。MTTR 顾问工具启用,且系统在正常负载下运行一段时间后,用户可以查询V$MTTR_TARGET_ADVICE 视图,获得其他MTTR 设置与当前MTTR 设置下数据库缓存写入操作的比率
后台进程—DBWR
负责将脏数据块从数据块缓存(database block buffer)写入磁盘。当一个事务修改数据块中的数据后,不需要将数据块立即写回磁盘。