实验 一、SGA
修改SGA必须保持的原则:
1.sga_target不能大于sga_max_size,可以设置为相等。 2.SGA加上PGA等其他进程占用的内存总数必须小于操作系统的物理内存。
做如下操作前,必须备份dbs目录下的所有文件。 方法一:直接SQL命令行修改:
SQL>alter system set sga_max_size=1024m scope=spfile; (如果spfile文件不存在,需先创建create spfile from pfile;) alter system set sga_max_size=12g scope=spfile; 然后
SQL>shutdown immediate SQL>startup
SQL>show sga; 即可看到SGA的大小已经被修改 方法二:通过EM修改:
以SYS登陆到EM:管理->(数据库配置)所有初始化参数—>SPFile->
在此界面可以直接定义sga_target与sga_max_size 然后重启数据库即可!
cmd下部分操作:,oracle 10.2.0g SQL> conn sys/rezin as sysdba 已连接。
SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup
ORACLE 例程已经启动。 Total System Global Area bytes Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes 数据库装载完毕。 数据库已经打开。 SQL> show sga;
Total System Global Area bytes ---原来大小 Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes
SQL> alter system set sga_max_size=280m scope=spfile; 系统已更改。
SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 再登录连接 SQL> startup
ORACLE 例程已经启动。
Total System Global Area bytes ---修改后的大小 Fixed Size bytes Variable Size bytes Database Buffers bytes Redo Buffers bytes 数据库装载完毕。 数据库已经打开。
二、PGA 预备知识
PGA(Process Global Area),是server process一段私有内存区,它包含有全局变量,数据结构和一些控制信息。在Oracle8i 中,PGA调整非常复杂,要调整SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、CREATE_BITMAP_AREA_SIZE等参数。在ORACLE9I中,只需要调整 PGA_AGGREGATE_TARGET。
--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% 在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%
在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP 则为655MB。
--配置PGA自动管理 自动PGA内存管理
要启用自动PGA内存管理,设置下列参数: 1,WORKAREA_SIZE_POLICY=AUTO 2,PGA_AGGREGATE_TARGET=非零 操作命令 系统级更改:
ALTER SYSTEM SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=;
ALTER SYSTEM SET SORT_AREA_SIZE = 65536 SCOPE = SPFILE;
ALTER SYSTEM SET HASH_AREA_SIZE = 65536 SCOPE = SPFILE;
会话级更改
ALTER SESSION SET WORKAREA_SIZE_POLICY = {AUTO | MANAUL};
ALTER SESSION SET SORT_AREA_SIZE = 65536; ALTER SESSION SET HASH_AREA_SIZE = 65536; 不用重启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 workarea NAME TYPE VALUE
------------------------------------ ----------- ------------------------------ workarea_size_policy string AUTO --这个设置成AUTO
SQL> show parameter pga NAME TYPE VALUE
------------------------------------ ----------- ------------------------------ pga_aggregate_target big integer
--监控自动PGA内存管理的性能
V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。
SQL> set lines 256 SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT; --查看_pga_max_size值的方法:
select ksppinm \"Name\ksppstvl/1024/1024 ||'M' \"Value\ksppdesc \"Desc\"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx and ksppinm ='_pga_max_size'; 监控、改善PGA设置
监控PGA的视图:v$sql_workarea_active、v$sql_workarea、v$sesstat、v$process、v$sysstat、v$sql_workarea_histogram等。
PGA_AGGREGATE_TARGET的值最好选择: Over alloc count为0、Cache Hit(%)尽可能高、Extra Read/Write尽可能低的Estimate PGA Target值。
--pga的排序区
pga_aggregate_target为100MB,单个查询能用到5%也就是5MB时排序所需时间
SQL> create table sorttable as select * from all_objects; 表已创建。
SQL> insert into sorttable (select * from sorttable); 已创建31186行。
SQL> insert into sorttable (select * from sorttable); 已创建62372行。 SQL> set timing on;
SQL> select * from sorttable order by object_id; 已选择行。
已用时间: 00: 00: 10.00
Session级修改排序区为30mb所需时间
SQL> ALTER SESSION SET WORKAREA_SIZE_POLICY = MANUAL;
会话已更改。
已用时间: 00: 00: 00.02
SQL> ALTER SESSION SET SORT_AREA_SIZE = ; 会话已更改。
已用时间: 00: 00: 00.01
SQL> select * from sorttable order by object_id; 已选择行。
已用时间: 00: 00: 09.07
可以看到所需时间从10.00秒减少到9.07秒,速度提升很明显。 Oracle 体系结构练习
1、一个ORACLE实例含有以下哪些选项?BD A、其他所有选项 B、ORACLE进程 C、ORACLE I/O结构 D、ORACLE 内存结构 答案:A
2、在一个Oracle实例中最多可以启动多少个DBWR(数据库写录进程)后台进程?(D )
A、1个 B、10个
C、LGWR进程数量的两倍 D、无限制 答案:B
3、下面哪个描述是正确的?(C)
A、Oracle 服务器(物理结构)是由三类文件组成的数据集合。 B、用户通过启动 Oracle 例程建立与数据库的连接。 C、连接是Oracle服务器和 Oracle 例程之间的通信路径。 D、会话在Oracle 服务器验证用户后启动。 答案:
4、以下哪个内存区不属于SGA(系统全局区)?B
A 数据库缓冲区高速缓存B、 PGA(程序全局区) C、重做日志缓冲区 D、共享池
答案:B
5、下面哪一个是创建口令文件的工具? A
A. ORAPWD B. SQL*LOAD C. SQLPLUS D. WRAP 答案:A
6、 PGA包含哪个组建? ( B.D 属于SGA)
A.排序区B.数据字典缓存C.后台进程D. REDO LOG缓存 答案:A
7、下面哪一个不属于 ORACLE的 INSTANCE? A
A. REDO LOG BUFFER B.共享池 C. SGA D. SERVER进程 答案:C
8、初始化参数文件的用途有哪些?(选择 2 个答案) A.调整 SGA 的大小B.指定控制文件的位置 C.调整数据文件的大小D.修改数据库用户的状态 答案:A..B
9、如果一个服务进程意外终止,oracle使用下列哪一个后台进程来释放它所占用的资源?
A、DBWR(数据写录进程) B、LGWR(日记写录进程) C、SMON(系统监控进程) D、PMON(进程监控进程) 答案:(在42页)
10、如果服务器内存有限,那么数据库应选择专用服务器模式() A、正确 B、错误 答案:A
11、哪个情况不触发 LGWR 进程?(P40) A. DBW0发生时B.缓冲区使用 1/3时 C. CKPT发生时D.事务提交时 答案:C
12、如果ORACLE SERVER进程尝试将数据放入脏速缓存中,但是
是此时脏缓存已经满了,将发生什么?
A.将发生错误B.创建薪的脏缓存
C.利用 DBW0将脏缓存写入磁盘(P35-36)D.用 LGWR将脏缓存清空
答案:C
13、以下哪个选项对高速数据缓存中的脏数据影响最大? A.LGWR B.SMON C.ARCH D.SERVER 答案:A
14、什么时候不触发 DBW0 进程? (P39)
A. COMMIT发生时B. CKPT发生C.超时D. DIRTY BUFFER 数量过多
答案:A
15、当一个事务被提交后哪一个进程将 REDO LOG 缓存中的 X 信息写如 REDO LOG 日志中(P40)
A. SMON B. PMON C. DBW0 D. LGWR E. CKPT 答案:D
16、数据库高速缓存中哪一个是自由缓存?
A.已经被修改并且需要写到磁盘上的缓存 B.正在被写入磁盘的缓存
C.正在被使用的缓存D.可以被覆盖的缓存 答案:A
17.当一个用户发出了一个SELECT语句后,哪一个内存结构用来验证用户的执行权限? A.数据字典缓存B. REDO LOG缓存
C.数据库高速缓存D.库缓存 答案: A
18、通过查询NLS_DATABASE_PARAMETERS数据字典视图你将获取什么信息?
A.查询 NLS 参数的有效值 B.被明确设置的 NLS初始化参数值 C.数据库字符集 D. NLS 会话参数 答案:D
19、当你查询DBA_USERS数据字典时,将显示什么P44 A.数据库中所有用户的信息 B.当前用户在表空间上的配额
C.将显示所有在表空间上的配额为不限制的用户 D.所有用户在表空间上的配额 答案: A
20、请问检查点什么时候发生? P41 A.日志切换时 B.事务提交时
C.数据库关闭时使用了 ABORT选项 D. DBWn进程写入数据文件时 答案:A
21、当你查询 V$SESSION 并且发现 CHAN 用户的 STATUS 列被标识为 KILLED,请问发生了什么?
A.用户 CHAN从数据库中异常断开连接
B.用户 CHAN在 INSTANCE 中创建了一个新的会话 C. CHAN会话终断后仍然没有被激活 D. CHAN会话终断后已经被激活了 答案:A
22、列出五个必备的后台进程。
PMON、SMON、DBWR、LGWR、ARCH 23 、请将下列处理过程与它们所执行的任务相连。 a 数据库写入程序帮助写入到数据文件头部 b 日志写入器负责例程恢复 c 系统监控程序进程失败后进行清理
d 进程监控程序记录数据库更改以便进行恢复 e 检查点将灰数据缓冲区写入数据文件
因篇幅问题不能全部显示,请点此查看更多更全内容