第一章: Instance (实例)和DB(数据库)

A,Oracle 网络架构及应用环境。

 

B. Oracle 体系架构

1)Oracle Sever : database + instance 

2) Database : data file,control file, redolog file

3) instance: an instance access a database

4) Oracle memory : SGA + PGA

5) Instance : an instance access a database

6) Sga 组成:SGA在一个instance 只有一个SGA,SGA 为所有session 共享,随着Instance 启动而分配,instance down,SGA被释放。

C. SGA

C.1 SGA的6个基本组件:

1) Shared pool

共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。

共享池由库缓存(library cache),和数据字典缓存(Data dictionary cache)以及结果缓存(Result cache)等组成。

共享池的大小直接影响数据库的性能。

library cache : sql 和plsql 的解析场所,存放着所有编译过的sql语句代码,以备所有用户共享。

data dictionary cache: 存放重要的数据字典信息,以备数据库使用。

server result cache : 存放服务器端SQL 结果集及PL/SQL函数返回值。

User Global Area(UGA): 与共享服务器模式有关。

2) Database buffer cache

用于存储从磁盘文件中读入的数据,为所有用户共享。

服务器进程(server process)将读入的数据保存在数据缓存区中,当后续的请求需要这些数据时可以在内存中找到,则不需要再从磁盘读取。

数据缓冲区中被修改的数据块(脏块)由后台进程DBWR将其写入磁盘。

数据缓冲区的大小对数据库的读取速度有直接的影响。

要搞清楚Database Buffer Cache 中的几个cache概念。

Buffer pool = (default pool) + (nodefault pool)

其中:

default pool(db_cache_size) //是标准块存放内存空间大小,SGA自动管理时此参数不用设置。使用LRU算法清理空间。

nodefault pool:

db_nk_cache_size //指定非标准块大小内存空间,比如2K,4K,16K,32K

db_keep_cache_size //与keep 相反,存放偶尔做全表扫描的大表的数据。

db_recycle_cache_size //与keep 相反,存放偶尔做全表扫描的大表的数据。

SQL > alter table scott.emp1 storage(buffer_pool keep);

SQL> select segment_name,buffer_pool from dba_segments where segment_name = 'EMP1';

default pool 对应的参数是 db_cache_size 与标准块 default block 是配套的,如果 default block 是 8k, db_cache_size 这个参数将代替 db_8k_cache_size。

如果要建立非标准块的表空间,先前要设定 db buffer 中的与之对应的 db_nk_cache_size 参 数。

09:50:46 SQL> alter system set db_16k_cache_size=8m;  // 改 参 数 , 先 把 db buffer 里的 16k cache 建上。
 
09:50:49 SQL> create tablespace tbs_16k datafile '/u01/oradata/timran11g/tbs16k01.dbf' size 10m blocksize 16k;
 
09:51:29 SQL> select TABLESPACE_NAME,block_size from dba_tablespaces;
 
TABLESPACE_NAME                BLOCK_SIZE

------------------------------ ----------

SYSTEM                               8192

UNDOTBS1                             8192

SYSAUX                               8192

TEMP                                 8192

USERS                                8192

EXAMPLE                              8192

TBS_16K                             16384

查看buffer cache 命中率:

select (1 - (sum(decode(name, 'physical reads', value, 0)) /
       (sum(decode(name, 'db block gets', value, 0)) +
       sum(decode(name, 'consistent gets', value, 0))))) * 100 "Hit Ratio"
  from v$sysstat;

3) Redo log buffer

日志条目(redo entries)记录了数据库的所有修改信息(包括DML和DDL),为的是数据库恢复。日志条目首先产生于日志缓冲区。日志缓冲区。日志缓冲区较小,它是以字节为单位的,它极其重要。

> show parameter log_buffer;

日志缓存区的大小启动后就是固定不变的,如果调整只能通过修改参数文件重新启动生效,不能动态修改。不能由SGA自动管理。

如果想让它是一个最小值,这样可以做:

> ALTER SYSTEM SET LOG_BUFFER = 1 SCOPE=SPFILE; // 修改动态参数文件,下次启动有效。

> STARTUP FORCE

> SHOW PARAMETER LOG_BUFFER;

4) Large pool

为了进行大的后台进程操作而分配的内存空间,与shared pool 管理不同,主要用于共享服务器的session memory ,RMAN备份恢复以及并行查询等。

5) Java pool

为了JAVA 虚拟机及应用而分配的内存空间,包含所有session指定的JAVA代码和数据。

6)Stream pool

为了stream process 而分配的内存空间。stream 技术是为了在不同数据库之间共享数据。因此,它只对使用了stream 数据库特性的系统是重要的。

C.2 SGA 的granules(颗粒):组成oracle 内存的最小单位。

SGA_MAX_SIZE                                  Granule Size

-------------------------------------------------------------------------------

<= 1 GB                                                    4 MB

1GB -- 8GB                                             16 MB

8GB -- 16GB                                            32 MB

16GB -- 32GB                                          64 MB

32GB -- 64GB                                          128MB

64GB -- 128GB                                        256MB

> 128GB                                                   512MB

> select name ,bytes/1024/1024 "Size(M)" from v$sgainfo; // 在oracle 里查看SGA分配情况。

D.Oracle 的进程:

三种process:1)user process 2) server process 3) background process

user process: 属于客户端的process,一般分为三种形式,1)sql*plus 2)应用程序,3) web方式(OEM)

客户端请求,sqlplus 是客户端命令。

由user process 造成的会话终止,系统将自动回滚这个会话上的处于活动状态的事务。

如果是windows 作为客户端:可以通过查看任务管理器看到sqlplus 用户进程。

[oracle@]$ sqlplus / as sysdb

server process 这是服务器端的进程,user process 不能直接访问Oracle,必须通过相应的server process 访问实例,进而访问数据库。

[oracle@ ~]$ ps -ef|grep LOCAL

// 注意: 在Linux下看到的server process,(LOCAL=YES)是本地连接,(LOCAL=NO)是远程连接。

可以在oracle 查看V$process视图,它包括了当前所有的oracle 进程,即后台进程和服务器进程。

> select pid,program,background from v$process;

background 字段为1 是background process,其余都是 server process

六个基本的后台进程(background process)

smon :系统监控进程

在实例崩溃之后,Oracle 会自动恢复实例。另一个作用是释放不再使用的临时段。

pmon: 进程监控。

1、当 user process 失败时,清理出现故障的进程。 释放所有当前挂起的锁定。释放服 务器端使用的资源   

2、监控空闲会话是否到达阀值   

3、动态注册监听
 
dbwr: 数据写入进程             

1、将修改后的缓冲区(脏 buffer)数据写入数据文件中。写脏块。   

2、释放 data buffer 空间。

注意:以下几种情况发生时 dbwr 都会写
 
   1)ckpt 发生,2)脏块太多时,3)db_buffer 自由空间不够时,4)3 秒,5)表空间 read only/offline/backup 等

1)服务器进程对数据文件执行读操作,而 DBWR 负责对数据文件执行写操作。 2)commit 时 dbwn 有何举动?答案是:它什么也不做!              lgwr:写日志条目,从 redo log buffer 到 redo logfile (必须在 dbwr 写脏块之前写入日 志)
 
   负责将日志缓冲区中的日志条目写入日志文件。 有多个日志文件,该进程以循环的方式 将数据写入文件。
 
   注意:以下 5 个状况发生时, lgwr 都会写
 
   1)commit, 2)三分之一满,3)先于 dbwr 写而写(先记后写,即 dbwn 正好要执行写入 前),4)3 秒(由先记后写引发)       ckpt:生成检查点, 通知或督促 dbwr 写脏块
 
   完全检查点:保证数据一致性。增量检查点:不断更新控制文件中的检查点位置,当发生 实例崩溃时,可以尽量缩短实例恢复的时间。
 
arcn:归档模式下,发生日志切换时,把当前日志组中的内容写入归档日志,作为备份历史 日志。
 
考点:lgwr 负责对联机日志文件写操作,arcn 负责读取联机日志文件。其他进程与日志文件 不接触。
 
11g 里又强调了其他几个后台进程,它们都和数据库性能有关,有关内容将在 053 课程介绍:
 
MMON: Oracle 自我监视和自我调整的支持进程(与 AWR 有关)

 
 
MMNL:MMON 的辅助进程(与 ASH 有关)
 
MMAN:内存自动管理,10g 时推出,11g 得到加强,在 11g 里这个进程负责 Oracle 内存结构 (SGA+PGA)的自动调整。
 
CJQN: 与 job 队列有关

E.PGA

属于Oracle 内存结构,存放用户游标、变量、控制、数据排序、存放HASH 值。 与SGA不同。PGA是独立的,非共享的。

F. 用户与Oracle 服务器的连接方式

F.1 专用连接模式(dedicated server process)

对于客户端的每个user process ,服务器都会出现一个server process,会话与专用服务器之间存在一对一的映射。

对专用连接来说,用户在客户端启动一个应用程序,例如sql*plus,就是在客户端启动一个用户进程;与Oracle服务器端连接成功后,会在服务器端生成一个服务器进程,该服务器进程作为用户进程的代理进程,代替客户端执行各种命令并把结果返回给客户端。用户进程一旦中止,与之对应的服务器进程立刻中止。

专用连接的PGA 的管理模式是私有的。ORACLE 缺省采用专用的连接模式。

F.2 共享连接模式(shared server process).

多个 user process 共享一个 server process。它通过调度进程(dispatcher)与共享服务器 连接,共享服务器实际上就是一种连接池机制(connectionpooling) ,连接池可以重用已有的 超时连接,服务于其它活动会话。但容易产生锁等待。此种连接方式现在已经很少见了。

1)所有调度进程(dispatcher)共享一个公共的请求队列(resquest queue),但是每个调度进 程都有与自己响应的队列(response queue)。 2)在共享服务器中会话是在 SGA 中的(UGA)存储信息,而不像专用连接那样在 PGA 中存储 信息,这时的 PGA 的存储结构为堆栈空间。
 
6.3 驻留连接池模式(database resident connection pooling,简称 DRCP): 适用于必须维持数据库的永久连接。结合了专用服务器模式和共享服务器模式的特点,它提 供了服务器连接池,但是放入连接池的是专用服务器。它使用连接代理(而不是专用服务器) 连接客户机到数据库,优点是可以用很少的内存处理大量并发连接(11g 新特性,特别适用 于 Apache 的 PHP 应用环境)。

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库连接(Database Connection)和数据库实例(Database Instance)是数据库系统中两个不同的概念,它们之间有以下关系: 1. 数据库连接: - 数据库连接是应用程序与数据库之间建立的通信渠道,用于在应用程序和数据库之间传递数据和执行操作。 - 一个数据库连接表示应用程序与数据库之间的一次会话,它包含了连接所需的连接信息(如数据库地址、用户名、密码等)。 - 应用程序可以通过数据库连接向数据库发送SQL语句、获取查询结果,或执行数据库操作(如插入、更新、删除等)。 2. 数据库实例: - 数据库实例是在物理上运行的数据库软件。它是数据库系统的一个具体实例,由内存结构和后台进程组成。 - 当数据库软件启动时,会创建一个数据库实例。每个数据库实例都有自己的内存结构和后台进程,用于管理和处理数据库的运行。 - 数据库实例负责处理用户的请求,执行SQL语句,管理缓存、日志和数据文件等。 3. 关系: - 一个数据库实例可以同时支持多个数据库连接。多个应用程序可以通过不同的连接同时访问同一个数据库实例。 - 每个数据库连接都是独立的会话,它们在逻辑上是相互隔离的,每个连接可以有自己的事务和会话状态。 - 数据库连接通过与数据库实例建立通信,将应用程序的请求传递给数据库实例进行处理,并将处理结果返回给应用程序。 需要注意的是,数据库连接和数据库实例是两个不同的概念,它们是数据库系统中不同层次的抽象。数据库实例是物理上运行的数据库软件,而数据库连接是应用程序与数据库之间的通信通道。一个数据库实例可以支持多个数据库连接,每个连接表示一个独立的会话。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值