oracle体系结构-instance

   oracle体系结构-实例篇

用户访问 oracle 数据库路径
用户进程 - 监听 - 服务器进程 -PGA-SGA-DBWn- 数据文件

1.1     oracle数据服务器

-oracle 实例: SGA 内存区域与后台进程
Ø  用户必须通过 oracle 实例才能访问到 oracle 数据库
Ø  一个 oracle 实例只能对应一个 oracle 数据库
Ø  oracle 实例由内存结构与后台进程结构组成
Ø  查看 SGA 与后台进程
SQL> show parameter sga
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 �Cf 查看 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     SGAPGA大小的设置

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 �Cef | grep LOCAL=NO | grep �Cv grep | cut �Cc 9-15 | xargs kill -9
cut �Cc 9-15 意思是截取输入行的第 9 个到 15 个字符,即 PID
xargs 命令是用来把前面命令的输出结果( PID )作为 kill -9 命令的参数

你可能感兴趣的:(oracle,数据库,职场,休闲)