oracle体系结构-实例篇
用户访问oracle数据库路径
用户进程-监听-服务器进程-PGA-SGA-DBWn-数据文件
1.1 oracle数据服务器
-oracle实例:SGA内存区域与后台进程
Ø 用户必须通过oracle实例才能访问到oracle数据库
Ø 一个oracle实例只能对应一个oracle数据库
Ø oracle实例由内存结构与后台进程结构组成
Ø 查看SGA与后台进程
SQL> show parameter sga
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 160M
sga_target big integer 160M
SQL> !ps -ef | grep ora_
oracle 5274 1 0 09:22 ? 00:00:12 ora_pmon_TEST
oracle 6935 6798 0 16:53 pts/1 00:00:00 /bin/bash -c ps -ef | grep ora_
-数据库
控制、数据、日志文件
1.2 system global area (SGA)
SGA的内存组成结构
shared pool
database buffer cache
redo log buffer
other structures (e.g.lock and latch management,statistical data)
另外两个可选组件
large pool
java pool
SGA是动态的,最大值由SGA_MAX_SIZE参数控制。SGA_MAX_SIZE与SGA_TARGET的关系:
在oracle运行过程中,修改SGA_TARGET值,不能大于SGA_MAX_SIZE。
SQL> alter system set sga_max_size=200M scope=spfile;
System altered.
SQL> alter system set sga_target=150M scope=both;
System altered.
#
scope=memory;只写到内存,当前生效,重启数据库后失效。
scope=spfile;将参数写到spfile文件,当前不生效,重启数据库后生效。
scope=both;以上两者
在oracle启动前
Ø 如果SGA_MAX_SIZE配置值小于SGA_TARGET,那么在数据库启动后,SGA_MAX_SIZE=SGA_TARGET,在此期间SGA_TARGET值,不能再向上调整。
Ø 如果SGA_MAX_SIZE配置值大于SGA_TARGET,那么在数据库启动后,SGA_MAX_SIZE和SGA_TARGET分别使用自己的配置值。
SQL> startup force;
ORACLE instance started.
Total System Global Area 209715200 bytes
Fixed Size 1218580 bytes
Variable Size 121636844 bytes
Database Buffers 83886080 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 200M
sga_target big integer 152M
#
startup force为强制重启命令,在生产环境下,应该:
Ø 操作系统sync
Ø 关闭监听
Ø sqlplus中SQL> alter system checkpoint;运行几次此命名(将数据缓冲区内容写入到数据文件)
Ø tail –f 查看alertSID.log日志文件
Ø shutdown immediate (关闭数据库)
Ø 查看alertSID.log输出信息,如果输出dismount信息,而且shutdown immediate卡住,则执行shutdown abort
1.3 shared pool
用于存储最近执行的sql语句与数据对象定义信息
关键组件:library cache(sql)和data dictionary cache(数据定义)
利用SGA自动分配能够更好的利用内存,为了避免自动分配造成shared_pool或数据缓存区分配过小造成性能低下,通过人工设置share pool下限值,避免此消彼长过于严重,以保证数据库性能。
首先估算shared_pool与buffer_cache的实际使用量
select * from V$shared_pool_advice;
select * from V$db_cache_advice;
SQL> alter system set shared_pool_size=32M scope=both;
System altered.
shared_pool与buffer_cache设置内存量总和不能大于sga_target
1.4 database buffer cache
从数据文件检索出的数据块拷贝
Ø 通过缓存可以提升数据检索与更新性能
Ø 数据缓存机制通过lru算法完成
Ø 尺寸设置
sga自动管理
手工设置下限值
SQL> alter system set db_cache_size=80M scope=both;
1.5 redo log buffer cache
记录所有关于数据块的变化
Ø 主要用于数据库恢复
Ø 改变的数据都要依赖于redo日志条目
Ø redo日志条目包含数据重建与重做信息
Ø 尺寸设置
sga自动管理
手工设置下限值
SQL> alter system set log_buffer=7057499 scope=spfile;
注意单位是字节
1.6 SGA与PGA大小的设置
当ESTD_PHYSICAL_READS值不再减小时,取SGA_SIZE对应值
SQL> select t.sga_size,t.estd_physical_reads from v$sga_target_advice t order by 1;
SGA_SIZE ESTD_PHYSICAL_READS
---------- -------------------
76 6574
114 5664
152 5664
190 5664
228 5664
266 5664
304 5664
7 rows selected.
SQL> alter system set sga_max_size=114M scope=spfile;
System altered.
SQL> alter system set sga_target=114M scope=both;
System altered.
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 200M
sga_target big integer 116M
# sga_max_size对应值,重启数据库后生效。
当ESTD_PGA_CACHE_HIT_PERCENTAGE达到100%时,取PGA_TARGET_FOR_ESTIMATE对应值
SQL> select s.pga_target_for_estimate,s.estd_pga_cache_hit_percentage from v$pga_target_advice s order by 1;
PGA_TARGET_FOR_ESTIMATE ESTD_PGA_CACHE_HIT_PERCENTAGE
----------------------- -----------------------------
12582912 100
16777216 100
20131840 100
……
11 rows selected.
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 16M
SQL> alter system set pga_aggregate_target=12582912 scope=both;
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 12M
1.7 进程结构
oracle利用不同类型的进程来完成不同的任务
Ø 用户进程:用户与oracle实例之间连接时创建。sqlplus连接oracle
在用户与oracle服务器之间创建一个连接
在oracle服务器端创建一个会话(session)
查看自己的连接与会话 select * from V$session
Ø 服务器进程:用户连接oracle实例时在服务器端创建。
SQL> !ps -ef | grep LOCAL=NO
oracle 7198 6798 3 18:29 pts/1 00:00:00 /bin/bash -c ps -ef | grep LOCAL=NO
oracle 7200 7198 1 18:29 pts/1 00:00:00 grep LOCAL=NO
Ø 后台进程:当oracle实例启动时创建
SQL> !ps -ef | grep ora_
1.7.1 后台进程
1. 数据写进程(DBWn):
DBWn写入时间:
Ø checkpoint检查点,将数据从内存中写入磁盘
Ø 无空闲数据内存
2. 日志写进程(LGWR)
LGWR写入时间:
Ø commit
Ø 日志缓存写满1/3
Ø 日志缓存写满1M
Ø 每3秒钟
3. 系统监控进程(SMON)
SMON作用:实例恢复,在oracle断电或者shutdown abort关闭数据库后,重新启动数据库时将执行“回滚日志文件中的记录修改”
4. 进程监控进程(PMON)
在数据库运行过程中,清理失败的进程(锁* alter tables test01 disable table lock;)
5. 检查点进程(CKPT)
作用:在checkpoint时通知DBWn将数据缓冲中的脏(在内存中修改过,还没写入硬盘的数据)数据写入数据文件
1.8 杀掉全部LOCAL=NO进程
避免当前连接服务器进程繁多,而导致关闭数据库服务时挂起,需要在关闭数据库之前,在操作系统上杀掉所有LOCAL=NO进程(用户连接oracle实例时在服务器端创建)
ps –ef | grep LOCAL=NO | grep –v grep | cut –c 9-15 | xargs kill -9
cut –c 9-15意思是截取输入行的第9个到15个字符,即PID
xargs命令是用来把前面命令的输出结果(PID)作为kill -9命令的参数
转载于:https://blog.51cto.com/ninglianjie/261524