oracle实例内存解析
- 格式:docx
- 大小:354.71 KB
- 文档页数:8
oracle下的数据库实例、表空间、⽤户及其表的区分完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。
1) 数据库是⼀系列物理⽂件的集合(数据⽂件,控制⽂件,联机⽇志,参数⽂件等);2) Oracle数据库实例则是⼀组Oracle后台进程/线程以及在服务器分配的共享内存区。
在启动Oracle数据库服务器时,实际上是在服务器的内存中创建⼀个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据⽂件。
Oracle有⼀个很⼤的内存快,成为全局区(SGA)。
⼀、数据库、表空间、数据⽂件1、数据库数据库是数据集合。
Oracle是⼀种数据库管理系统,是⼀种关系型的数据库管理系统。
通常情况了我们称的“数据库”,并不仅指物理的数据集合,他包含物理数据、数据库管理系统。
也即物理数据、内存、操作系统进程的组合体。
我们在安装Oracle数据库时,会让我们选择安装启动数据库(即默认的全局数据库)如下图:全局数据库名:就是⼀个数据库的标识,在安装时就要想好,以后⼀般不修改,修改起来也⿇烦,因为数据库⼀旦安装,数据库名就写进了控制⽂件,数据库表,很多地⽅都会⽤到这个数据库名。
启动数据库:也叫全局数据库,是数据库系统的⼊⼝,它会内置⼀些⾼级权限的⽤户如SYS,SYSTEM等。
我们⽤这些⾼级权限账号登陆就可以在数据库实例中创建表空间,⽤户,表了。
查询当前数据库名:select name from v$database;2、数据库实例⽤Oracle官⽅描述:实例是访问Oracle数据库所需的⼀部分计算机内存和辅助处理后台进程,是由进程和这些进程所使⽤的内存(SGA)所构成⼀个集合。
其实就是⽤来访问和使⽤数据库的⼀块进程,它只存在于内存中。
就像Java中new出来的实例对象⼀样。
我们访问Oracle都是访问⼀个实例,但这个实例如果关联了数据库⽂件,就是可以访问的,如果没有,就会得到实例不可⽤的错误。
oracle数据库体系架构详解在学习oracle中,体系结构是重中之重,⼀开始从宏观上掌握它的物理组成、⽂件组成和各种⽂件组成。
掌握的越深⼊越好。
在实际⼯作遇到疑难问题,其实都可以归结到体系结构中来解释。
体系结构是对⼀个系统的框架描述。
是设计⼀个系统的宏观⼯作。
这好⽐建⼀栋⼤楼。
你⾸先应该以图纸的⽅式把整个⼤楼的体系架构描述出来。
然后⼀点点的往⾥⾯填充东西。
下⾯我们先以⼀个图解的⽅式对oracle体系结构有⼀个基本了解根据⽰图,便于我们记忆,⽰图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上⾯的实例(Instance)和下⾯的数据库(Database)及参数⽂件(parameter file)、密码⽂件(password file)和归档⽇志⽂件(archived logfiles)组成Oracle Server,所以整个⽰图可以理解成⼀个C/S架构。
Oracle Server由两个实体组成:实例(instance)与数据库(database)。
这两个实体是独⽴的,不过连接在⼀起。
在数据库创建过程中,实例⾸先被创建,然后才创建数据库。
在典型的单实例环境中,实例与数据库的关系是⼀对⼀的,⼀个实例连接⼀个数据库,实例与数据库也可以是多对⼀的关系,即不同计算机上的多个实例打开共享磁盘系统上的⼀个公⽤数据库。
这种多对⼀关系被称为实际应⽤群集(Real Application Clusters,RAC)RAC极⼤提⾼了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle⽹格(grid)概念的必备部分。
下⾯我们来详细看⼀下oracle数据库的体系架构Oracle体系架构主要有两⼤部分组成:数据库实例(Instance)和数据库⽂件(database)数据库实例指数据库服务器的内存及相关处理程序,它是Oracle的⼼脏。
与Oracle性能关系最⼤的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:1、数据缓冲区,可避免重复读取常⽤的数据;2、⽇志缓冲区,提升了数据增删改的速度,减少磁盘的读写⽽加快速度;3、共享池,使相同的SQL语句不再编译,提升了SQL的执⾏速度。
SGASGA(System Global Area)是Oracle Instance的基本组成部分,在实例启动时分配。
是一组包含一个Oracle实例的数据和控制信息的共享内存结构。
主要是用于存储数据库信息的内存区,该信息为数据库进程所共享(PGA不能共享的)。
它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
SGA几个很重要的特性:1、SGA的构成——数据和控制信息,我们下面会详细介绍;2、SGA是共享的,即当有多个用户同时登录了这个实例,SGA中的信息可以被它们同时访问(当涉及到互斥的问题时,由latch和enquence 控制);3、一个SGA只服务于一个实例,也就是说,当一台机器上有多个实例运行时,每个实例都有一个自己的SGA尽管SGA来自于OS的共享内存区,但实例之间不能相互访问对方的SGA区。
它主要包括:1.数据库高速缓存(the database buffer cache),2.重演日志缓存(the redo log buffer)3.共享池(the shared pool)4.数据字典缓存(the data dictionary cache)以及其它各方面的信息。
1.数据高速缓冲区(Data Buffer Cache)在数据高速缓冲区中存放着Oracle系统最近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用访问的数据。
如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。
数据高速缓冲区包括三个类型的区:1)脏的区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。
2)自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
第1篇1. 请简述Oracle数据库的体系结构,并说明各层的作用。
2. 请解释什么是Oracle实例?实例与数据库之间的关系是什么?3. 请简述Oracle数据库的存储结构,包括数据文件、控制文件、日志文件等。
4. 请说明Oracle数据库的内存结构,包括SGA、PGA等。
5. 请解释Oracle数据库的备份策略,包括全备份、增量备份、差异备份等。
6. 请说明Oracle数据库的恢复策略,包括不完全恢复、完全恢复等。
7. 请解释Oracle数据库的事务管理,包括事务的ACID特性。
8. 请说明Oracle数据库的锁机制,包括共享锁、排他锁等。
9. 请解释Oracle数据库的并发控制,包括多版本并发控制(MVCC)。
10. 请说明Oracle数据库的安全机制,包括角色、权限、用户等。
二、SQL语言1. 请简述SQL语言的组成,包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)等。
2. 请说明如何创建一个简单的表,包括表结构、字段类型、约束等。
3. 请编写一个查询语句,查询某个表中所有年龄大于30岁的记录。
4. 请编写一个更新语句,将某个表中年龄大于40岁的记录的年龄加1。
5. 请编写一个删除语句,删除某个表中年龄小于20岁的记录。
6. 请编写一个插入语句,插入一条记录到某个表中。
7. 请说明如何使用SQL语句实现分页查询。
8. 请说明如何使用SQL语句实现多表查询。
9. 请说明如何使用SQL语句实现子查询。
10. 请说明如何使用SQL语句实现联合查询。
三、Oracle高级特性1. 请解释什么是视图?如何创建视图?2. 请解释什么是索引?有哪些常见的索引类型?3. 请解释什么是触发器?如何创建触发器?4. 请解释什么是存储过程?如何创建存储过程?5. 请解释什么是函数?如何创建函数?6. 请解释什么是包?如何创建包?7. 请解释什么是序列?如何创建序列?8. 请解释什么是同义词?如何创建同义词?9. 请解释什么是物化视图?如何创建物化视图?10. 请解释什么是分区表?如何创建分区表?四、Oracle性能优化1. 请说明如何查看Oracle数据库的性能统计信息。
oracle 数据库解析字段与解析内容详解文章标题:深度解析Oracle数据库中的字段解析与内容详解在Oracle数据库中,字段解析和内容详解是数据库设计和优化中极为重要的部分。
本文将从简单到复杂地分析这一主题,并通过多个方面全面评估,以帮助读者更深入地理解这一概念。
一、字段解析的概念和作用在数据库中,字段解析是指对于各种数据类型的字段进行分析和解释。
不同的数据类型有不同的解析方式,而正确的字段解析能够帮助数据库管理员和开发人员更好地理解和利用数据。
Oracle数据库中常见的字段类型包括数值型、字符型、日期型等,它们的解析方法会对数据的存储、查找和计算产生影响。
1. 数值型字段解析数值型字段的解析主要涉及数据的精度和范围,以及相关的计算规则和函数。
对于整型和浮点型数据,需要考虑到数据的取值范围和小数位数,以及在应用中可能出现的四舍五入或溢出问题。
2. 字符型字段解析字符型字段的解析涉及到字符编码、长度限制、字符集规则等方面。
在处理多语言和特殊字符时,正确的解析能够保证数据的完整性和可读性,同时也对数据的存储和索引产生影响。
3. 日期型字段解析日期型字段的解析需要考虑到日期格式、时区、日期运算等方面。
在数据分析和报表生成中,正确解析日期字段能够保证数据的一致性和准确性。
二、内容详解的重要性和实践方法除了字段解析外,内容详解也是数据库设计和优化中不可或缺的部分。
内容详解是对数据内容进行深入的分析和理解,包括数据的来源、意义、关联等方面。
通过内容详解,可以更好地发现数据的价值和潜在问题,为决策和业务分析提供支持。
1. 数据来源和质量在进行内容详解时,需要了解数据的来源,包括数据的采集、清洗、转换等过程。
同时也需要评估数据的质量,包括数据的完整性、一致性、准确性等方面。
2. 数据关联和分析内容详解还涉及到数据之间的关联和分析,包括数据的连接、聚合、过滤等操作。
通过内容详解,可以更好地理解数据之间的关系,为业务分析和决策提供支持。
ORACLE的实例的浅谈【摘要】ORACLE实例=后台进程(后台进程使用的PGA)+进程所使用的内存(SGA),实例是一个临,时性的东西,你也可以认为它代表了数据库某一时刻的状态!数据库=重做文件+控制文件+数据文件+临时文件,数据库是永久的,是一个文件的集合。
【关键词】ORACLE;数据库;操作系统ORACLE实例和数据库之间的关系1.临时性和永久性2.实例可以在没有数据文件的情况下单独启动startup nomount,通常没什么意义3.一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库4.一个数据库可被许多实例同时装载和打开(即RAC),RAC环境中实例的作用能够得到充分的体现!在Oracle领域中有两个词很容易混淆,这就是“实例”(instance)和“数据库”(database)。
作为Oracle术语,这两个词的定义如下:数据库(database):物理操作系统文件或磁盘(disk)的集合。
使用Oracle 10g 的自动存储管理(Automatic Storage Management,ASM)或RAW分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。
这两个词有时可互换使用,不过二者的概念完全不同。
实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。
一组操作系统进程(或者是一个多线程的进程)以及一些内存;这些进程可以操作数据库。
而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。
在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。
大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行操作。
不过,Oracle的真正应用集群(Real Application Clusters,RAC)是一个例外,这是Oracle 提供的一个选项,允许在集群环境中的多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)。
oracle11g关于内存的分配方案。
1,在32位的操作系统上,安装oracle的话,oracle最大能分配到的内存是1.7G。
这样的话,推荐最好使用64位的操作系统。
这样在物理内存足够大的情况下,oracle也能分配到无限制的足够大的内存。
2,在物理内存既定的情况下,如果服务器是只为oracle应用提供的服务器。
在创建数据库实例时,oracle的典型内存分布,默认总共给sga 和pga分配系统内存的40%,同时oracle建议自动内存管理。
此时,如果选择oracle的典型内存分布,同时不选择自动管理内存分布,那么sga : pga的内存比是3:1。
但是当sga的内存达到1536M之后,就不会再增加内存了,多出来的内存全都被增加到了pga的内存中去了。
(问题一:请问一下,如果是自动管理内存分布的话,sga和pga 也会出现这样的情况吗? sga达到1536m之后也不会继续增加吗?问题二:pga增多的话,排序等的性能会增加。
但是如果适当的增加sga,将表数据全都缓存到sga中的话,内存中的排序等性能同样会得到很大的提升。
为什么典型配置在sga增加到1536m之后就不再增加了呢?)3,定制数据库实例的内存时:pga,根据实际的情况,可以增加到足够大。
sga的共享池,日志缓冲池如果过大的话,会对性能产生较大的负面影响。
sga的java池,建议20msga的共享池,建议sga的22%sga的large池,建议sga的9.9%sga的缓冲区,可以设置到足够大。
(问题三,当创建数据库实例时,如果选择的是自动管理内存的话,这时的内存结构参数的值都是0。
如果只想要手动管理sga的一个缓冲区的话,是不是必然将重新手动设置sga的全部内存结构?包括重新设置sga本身的大小?)4,问题四:请问一下,如果手动设置的话,那sga和pga的内存比应该多少比较合适?以上只是个人的一些理解,有可能有错误的地方,希望大家能帮忙指出,最后将做出总结,将错误的地方改正。
循序渐进解读Oracle AWR性能分析报告Oracle中的AWR,全称为Automatic Workload Repository,自动负载信息库。
它收集关于特定数据库的操作统计信息和其他统计信息,Oracle以固定的时间间隔(默认为1个小时)为其所有重要的统计信息和负载信息执行一次快照,并将快照存放入AWR中。
这些信息在AWR中保留指定的时间(默认为1周),然后执行删除。
执行快照的频率和保持时间都是可以自定义的。
AWR的引入,为我们分析数据库提供了非常好的便利条件(这方面MySQL就相差了太多)。
曾经有这样的一个比喻——“一个系统,就像是一个黑暗的大房间,系统收集的统计信息,就如同放置在房间不同位置的蜡烛,用于照亮这个黑暗大房间。
Oracle,恰到好处地放置了足够的蜡烛(AWR),房间中只有极少的烛光未覆盖之处,性能瓶颈就容易定位。
而对于蜡烛较少或是没有蜡烛的系统,性能优化就如同黑暗中的舞者。
”那如何解读AWR的数据呢?Oracle本身提供了一些报告,方便进行查看、分析。
下面就针对最为常见的一种报告——《AWR数据库报告》进行说明。
希望通过这篇文章,能方便大家更好地利用AWR,方便进行分析工作。
一、MAIN1Database Information2Snapshot Information(1)Sessions表示采集实例连接的会话数。
这个数可以帮助我们了解数据库的并发用户数大概的情况。
这个数值对于我们判断数据库的类型有帮助。
(2)Cursors/session每个会话平均打开的游标数。
(3)Elapsed通过Elapsed/DB Time比较,反映出数据库的繁忙程度。
如果DB Time>>Elapsed,则说明数据库很忙。
(4)DB Time表示用户操作花费的时间,包括CPU时间和等待事件。
通常同时这个数值判读数据库的负载情况。
具体含义db time = cpu time + wait time(不包含空闲等待)(非后台进程)*db time就是记录的服务器花在数据库运算(非后台进程)和等待(非空闲等待)上的时间。
Oracle数据库的实例构成分析Oracle数据库是世界上最流行的商业数据库之一,它通过实例来处理对数据库的访问请求。
本文将从实例的构成方面来分析Oracle数据库。
Oracle数据库的实例由三个主要组成部分组成:SGA、进程和后台进程。
下面我们来详细了解这些组成部分。
1. SGASGA(System Global Area)是Oracle数据库的主要内存区域,它存储了所有的共享数据结构和缓冲区。
SGA的主要组成部分包括:(1)共享池(Shared Pool):存储共享SQL和PL/SQL区域,如共享SQL区域(共享SQL区域是指所有用户可以共享的SQL和PL/SQL区域,包括解析后的SQL和PL/SQL语句、程序包和函数代码、游标和共享池状态信息等)、共享PL/SQL区域等。
(2)缓冲区高速缓存(Buffer Cache):存储数据块的高速缓存区域,可以缓存表空间中的所有表和索引数据块。
(3)字典高速缓存(Dictionary Cache):存储数据库元数据(如表、视图、列、触发器、存储过程等)的高速缓存区域。
(4)日志缓冲区(Log Buffer):用于存储Redo对象,以保证事务的持久性。
2. 进程进程是Oracle数据库实例的关键部分,它们是处理与客户端连接的请求的主要方式。
Oracle数据库实例的进程包括:(1)服务器进程(Server Process):用于处理客户端连接请求的主要进程,每个用户连接到数据库实例时将启动一个服务器进程。
(2)后台进程(Background Process):用于执行非事务性任务的进程。
例如,LGWR(Log Writer)进程用于将Redo对象写入磁盘,CKPT(Checkpoint)进程用于检查点处理。
3. 后台进程后台进程是一种特殊的进程,它们是为了处理一些非事务性任务而运行的系统进程,主要包括:(1)DBWn(Database Writer):用于将数据块从缓存写回到磁盘。
oracle内存占用过高和修改不当无法启动oracle实例的解决办法今天,在自己机器上装了oracle 12c,发现Oracle的服务Oracle RDBMS Kenel Executable (OracleServiceORCL)占用内存高达5G,本人电脑内存才16G。
如此高的占用率,真让人心疼。
于是就对Oracle的内存进行调整。
具体办法如下:1. 在cmd命令中输入如下命令启动sqlplus:sqlplus /nolog2. sql启动后,连接数据库,命令如下:conn /as sysdba;3. 如果是oracle 11g以后版本,可以修改MEMORY_MAX_TARGET的值来设置自己想要内存值,我这里设置为1024M。
alter system set memory_max_target=1204M scope=SPFILE;4. 关闭数据库实例shutdown immediate5.启动Oracle实例,基于spfile里面设置情况。
startup注意事项:1)MEMORY_MAX_TARGET是MEMORY_TARGET的最大阈值,MEMORY_TARGET是Oracle使用机器内存的总量,默认值为0,即由oracle自动根据机器内存来分配,MEMORY_TARGET = SGA_TARGET + PGA_AGGREGATE_TARGET,当SGA_TARGET和PGA_AGGREGATE_TARGET都设置为0时,Oracle会自动根据MEMORY_TARGET对两者进行内存分配。
2)如果更改过SGA_TARGET和PGA_AGGREGATE_TARGET的值,请用下面语句将其恢复0。
记得不太清楚的,可以通过show parameter命令来查看内存的情况。
ALTER SYSTEM SET SGA_TARGET =0 SCOPE = SPFILE;ALTER SYSTEM SET PGA_AGGREGATE_TARGET =0 SCOPE = SPFILE;show parameter命令例子如下,注意下面命令的sga可以换成target或者memory来查看memory_max_target和memory_target的值。
oracle之sga介绍SGA即系统全局区域,是⼀组共享的内存结构,包含⼀个数据库实例的相关数据和控制信息,在实例启动时⾃动分配关闭是⾃动回收。
从10G开始,oracle提供了SGA的⾃动管理(AUTOMATIC SHARED MEMORY MANAGEMENT ,ASSM)新特性。
就是不需要⼿动设置shared pool ,buffer cacher等,只设置⼀个总的sga⼤⼩即可。
oracle⾃动调整⼤⼩。
show parameter sga_target 查询的value 为0即表⽰ASSM管理的⽅式,安装11G是默认开启⾃动管理的。
ASSM的启⽤:启⽤ASSM需要将statistics_level设置成typical或all,该参数的级别有三个:1、basic:收集基本的统计信息2、typical:收集⼤部分的统计信息,数据库默认设置3、all:收集全部统计信息alter system set statistics_level=all;或者 alter session set statistics_level=all;在启⽤ASSM后,如⼿动指定某⼀组值,则该值为该组件的最⼩值。
例如⼿动设置了sga_target=8G,shared_pool_size=1g,则在assm⾃动调整sga时,保证shared pool的最⼩值为1g。
关于sga_max_size指定内存中可以分配给sga的最⼤值,不允许动态调整,是⼀个固定值;sga_target是⼀个动态参数,其最⼤值为sga_max_size。
SGA包含的组件:共享池(shared pool);数据库缓冲区⾼速缓存(database buffer cache);⽇志缓冲区(redo buffer cache);⼤池;Java池;流池等。
SGA相关视图:v$sga:V$SGA这个视图包括了SGA的的总体情况,只包含两个字段:name(SGA内存区名字)和value(内存区的值,单位为字节)。
解决oracle服务占用内存过高的问题
通常我们在自己电脑上搭建项目环境时,都免不了要安装Oracle。
不管你硬件多强悍,都会发现,Oracle服务一旦启用,内存立马吃紧。
笔者内存8G,启动一个VS,启动一个Eclipse,启动一个虚拟机,开一个Tomcat,再开一个PL/SQL,内存基本就耗去了一大半。
再启用Oracle服务,内存马上飙升五六百兆,程序便会频繁出现假死。
其实这是因为安装Oracle时,为了均衡电脑性能和数据库性能,默认内存大小为物理内存的1/8,自身内存比较大时,oracle所占的内存也会变大。
而通常,我们自己的环境并不需要分配那么大的内存来支持Oracle,这种情况下,我们可以通过修改sga值来减少系统中oracle占用内存过大问题。
用dba身份进入oracle,本人使用sqlplus修改(sqlplus sys/密码 as sysdba),若使用PL/SQL,可以在Command Window执行:(1)show parameter sga; --显示内存分配情况
(2)alter system set sga_max_size=200m scope=spfile; --修改占用内存的大小
修改后重启Oracle服务,再查看资源管理器,Oracle占用资源便会降至200M以下。
不过如此修改所付出的代价就是数据库性能的下降,因此修改时不宜调得太小。
一、名词解释(1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
(2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。
共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。
(3)缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。
(4)大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。
(5)Java池:Java Pool为Java命令的语法分析提供服务。
(6)PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。
二、分析与调整(1)系统全局域:SGA与操作系统、内存大小、cpu、同时登录的用户数有关。
可占OS系统物理内存的1/3到1/2。
a.共享池Shared Pool:查看共享池大小Sql代码SQL>show parameter shared_pool_size查看共享SQL区的使用率:Sql代码select(sum(pins-reloads))/sum(pins)"Library cache"from v$librarycache;--动态性能表LIBRARY命中率应该在90%以上,否则需要增加共享池的大小。
查看数据字典缓冲区的使用率:Sql代码select(sum(gets-getmisses-usage-fixed))/sum(gets)"Data dictionary cache"from v$rowcache; --动态性能表这个使用率也应该在90%以上,否则需要增加共享池的大小。
修改共享池的大小:Sql代码ALTER SYSTEM SET SHARED_POOL_SIZE =64M;b.缓冲区高速缓存Database Buffer Cache:查看共享池大小Sql代码SQL>show parameter db_cache_size查看数据库数据缓冲区的使用情况:Sql代码SELECT name,value FROM v$sysstat order by name WHERE name IN(''DB BLOCK GETS'',''CONSISTENT GETS'',''PHYSICAL READS'');SELECT * FROM V$SYSSTAT WHERE NAME IN('parse_time_cpu','parse_time_elapsed','parse_count_ hard');计算出来数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。
c.日志缓冲区查看日志缓冲区的使用情况:Sql代码SELECT name,value FROM v$sysstat WHERE name IN('redo entries','redo log space requests')查询出的结果可以计算出日志缓冲区的申请失败率:申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。
d.大型池:可以减轻共享池的负担,可以为备份、恢复等操作来使用,不使用LRU算法来管理。
其大小由数据库的'共享模式/db模式'如果是共享模式的话,要分配的大一些。
指定Large Pool的大小:Sql代码ALTER SYSTEM SET LARGE_POOL_SIZE=64Me.Java池:在安装和使用Java的情况下使用。
(2)PGA调整a.PGA_AGGREGATE_TARGET初始化设置PGA_AGGREGATE_TARGET的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。
假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。
你也许会分配80%的可用内存给Oracle 实例,即3.2G。
现在必须在内存中划分SGA和PGA区域。
在OLTP(联机事务处理)系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。
OLTP:PGA_AGGREGATE_TARGET =(total_mem * 80%) * 20% = 2.5G在DSS(数据集)系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。
DSS:PGA_AGGREGATE_TARGET =(total_mem * 80%) * 50%在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。
b.配置PGA自动管理不用重启DB,直接在线修改。
SQL>alter system set workarea_size_policy=auto scope=both;System altered.SQL>alter system set pga_aggregate_target=512m scope=both;System altered.SQL>show parameter workareaNAME TYPE VALUE------------------------------------ ----------- ------------------------------workarea_size_policy string AUTO--这个设置成AUTOSQL>show parameter pgaNAME TYPE VALUE------------------------------------ ----------- ------------------------------pga_aggregate_target big integer536870912SQL>c.监控自动PGA内存管理的性能V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。
SQL>set lines 256SQL>set pages 42SQL>SELECT * FROM V$PGASTAT;NAME VALUE UNIT---------------------------------------------------------------- ---------- ------------ aggregate PGA target parameter 536870912 bytes--当前PGA_AGGREGATE_TARGET的值aggregate PGA auto target 477379584 bytes--当前可用于自动分配了的PGA大小,应该比PGA_AGGREGATE_TARGET 小global memory bound26843136 bytes--自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。
total PGA inuse 6448128 bytestotal PGA allocated 11598848 bytes--PGA的最大分配maximum PGA allocated 166175744 bytestotal freeable PGA memory393216 bytes--PGA的最大空闲大小PGA memory freed back to OS 69074944 bytestotal PGA used for auto workareas 0 bytes--PGA分配给auto workareas的大小maximum PGA used for auto workareas 1049600 bytestotal PGA used for manual workareas 0 bytesmaximum PGA used for manual workareas 530432 bytesover allocation count1118--实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值bytes processed 114895872 bytesextra bytes read/written 4608000 bytescache hit percentage 96.14percent--命中率16rows selected.--V$PGA_TARGET_ADVICESQL>SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,ESTD_OVERALLOC_COUNTFROM v$pga_target_advice;The output of this query might look like the following:TARGET_MB CACHE_HIT_PERC ESTD_OVERALLOC_COUNT---------- -------------- --------------------6323367125243025030337539050058060059070059080060090060010006101500670200076030008304000850可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以可以将PGA_AGGREGATE_TARGET设置成375M。
附:oracle SGA与PGA区别:SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。
它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。