欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)

发布时间:2025/4/16 编程问答 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一    概念:


1、 实例/instance: 后台进程+共享内存 用于管理和控制数据库
 数据库/database: 物理文件的集合 为实例提供数据,如数据文件,控制文件,参数文件,日志文件等
 数据库服务器/database server: 软件+实例+数据库

oracle数据库环境有以下两部分:
 oracle软件,存放在服务器本地硬盘上
 oracle数据库,存放在共享存储上

rac  (生产环境模式)
 
2、实例
 oracle数据库启动后首先在内存中划分一片空间,并启动一些进程,而内存和进程统称oracle数据库实例,数据库关闭后,实例就被关闭
 一个数据库可以对应多个实例,如两个,四个等,一般没有单数的。用户可以通过连接到的实例访问数据库,可以实现负载均衡,提高并发等的效果,这种结构叫做oracle的RAC技术。
  
#查看oracle实例

[oracle@ocp003 ~]$ ps -ef | grep ora_

#查看相关内存

[oracle@ocp003 ~]$ ipcs

#启动数据库
SQL> startup;

然后再次查看进程和内存相关的信息,即可发现进程和内存中有了oracle相关的信息
oracle启动后在内存中独享一块内存区域。 

3、进程间通信有如下的目的:
1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;
2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;
3、通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;
4、资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;
5、进程控制,有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

其中:

第一列就是共享内存的key;
第二列是共享内存的编号shmid;
第三列就是创建的用户owner;
第四列就是权限perms;
第五列为创建的大小bytes;
第六列为连接到共享内存的进程数nattach;
第七列是共享内存的状态status。
    其中显示“dest”表示共享内存段已经被删除,但是还有用户在使用它,
    当该段内存的mode字段设置为SHM_DEST时就会显示“dest”。

连接/connection:
 连接是从客户端到Oracle 实例的一条物理路径。连接可以在网络上建立,或者通过IPC 机制建立。通常会在客户进程与一个专用服务器或一个调度器之间建立连接。
    
会话/session:
 会话是实例中存在的一个逻辑实体。这就是你的会话状态(session state),也就是表示特定会话的一组内存
    中的数据结构.提到"数据库连接"时,大多数人首先想到的就是“会话”。在服务器中的会话上执行SQL、提交事务和运行存储过程。

 

                                             二  体系结构


oracle的体系结构主要分三类
 内存结构
 进程结构
 存储结构

概览:

一 :内存结构


    SGA: 系统/共享全局区
        Shared Pool/共享池
        Database Buffer Cache/数据库缓冲区高速缓存
        Redo Log Buffer/重做日志缓冲区
        Large Pool/大池
        Java Pool/JAVA池
        Streams Pool/流池
        ...
    PGA: 进程全局区
    UGA: 用户全局区

1、共享池
    库高速缓存
        存储最近使用的SQL和PL/sql语句,使用LRU(least recently used)算法
    
    数据字典高速缓存
        缓存数据字典相关的数据

SQL> show parameter shared_pool_size;

SQL> show parameter shared_pool_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ shared_pool_size big integer 0

2、数据库高速缓冲区
    存储最近从数据文件读入的数据块信息或用户更改后需要写回数据库的数据信息,没有提交给数据库的更改后的数据为脏数据。

SQL> show parameter db_block_size;

SQL> show parameter db_block_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_size integer 8192

SQL> show parameter db_block_buffers;

SQL> show parameter db_block_buffers;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_buffers integer 0

SQL> show parameter db_cache_size;

SQL> show parameter db_cache_size;NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_cache_size big integer 0


修改sga大小
SQL> alter system set db_cache_size = 5000M;

SQL> show parameter db_cache_size;

SQL> alter system set db_cache_size = 200m;系统已更改。SQL> show parameter db_cache_size;NAME TYPE VALUE ------------------------------------ --------------------------------- -------------------- db_cache_size big integer 208M

 

3、重做日志缓冲区
    数据库发生修改而变化的数据在进入数据库高速缓冲区之前先进入重做日志缓冲区,变化之前的数据库放入重做日志缓冲区。

SQL> show parameter log_buffer; NAME TYPE VALUE ------------------------------------ --------------------------------- -------------------- log_buffer big integer 7456KSQL> alter system set log_buffer =1m; alter system set log_buffer =1m* 第 1 行出现错误: ORA-02095: 无法修改指定的初始化参数#***该参数为静态参数,直接修改会报错误

4、大池
    可选内存区,在大规模输入输出及备份过程中需要大池作为缓存空间
    该参数为动态参数,可修改

SQL> alter system set large_pool_size = 10M; 系统已更改。SQL> show parameter large_pool_size; NAME TYPE VALUE ------------------------------------ --------------------------------- -------------------- large_pool_size big integer 16M

5、java池
    可选内存空间,在安装java或使用java程序时,必须设置。

SQL> alter system set java_pool_size = 30M; 系统已更改。SQL> show parameter java_pool_size; NAME TYPE VALUE ------------------------------------ --------------------------------- java_pool_size big integer 32M

6、流池

 

PGA 进程全局区
    由操作系统本地分配,独立于SGA.
    在专有服务器中包括如下组件:
    
    排序区:    对某些SQL语句执行结果进行排序
    会话信息:    包含本次会话的用户权限和性能统计信息
    游标状态:    标明当前会话执行的SQL语句的处理阶段
    堆栈区:    包含其他会话变量
    
    注意:在共享服务器配置中,多个用户共享一个服务器进程,会话信息的内存区可能在SGA中分配,如果创建了大池,就在大池中
    否则就在共享池中。
    
UGA 用户全局区
    共享服务器模式,使用UGA来表示用户的会话状态,这部分内存会话总可以访问,UGA存储在每个共享服务器都可以访问的SGA中
    
PGA内存管理

SQL> show parameter sort_area_size; NAME TYPE VALUE ------------------------------------ --------------------------------- - sort_area_size integer 65536SQL> show sga; Total System Global Area 1660944384 bytes Fixed Size 8793448 bytes Variable Size 1107296920 bytes Database Buffers 536870912 bytes Redo Buffers 7983104 bytes## Fixed Size: 在固定SGA中,存储一组指向SGA中其他组件的变量,Oracle使用该内存区寻找其他内存区。 ## Variable Size: 该部分内存包括共享池、Java池和大池,SQL> show parameter sga_max_size; #查询sga大小 NAME TYPE VALUE ------------------------------------ --------------------------------- -------------------- sga_max_size big integer 1584M

 

二:服务器进程和用户进程

1、后台进程
 DBWn: 将buffer cache中的脏数据写入到dbf中,只写不读。
  执行时间点:
   没有任何可用缓冲区
   脏缓冲区过多
   三秒超时
   遇到检查点

查看当前的DBWn数量 SQL> show parameter db_writer_processes;#修改数量 SQL> alter system set db_writer_processes=20 scope=spfile;alter system set db_writer_processes=20 scope=both; #设置检查点 SQL> alter system checkpoint;

CKPT: 周期性触发,更新检查点信息,更新到控制文件和每个数据文件头部。

SMON: 主内,监控实例内部,实例恢复,如整理碎片,清理不使用的临时段。

PMON: 主外,监控用户连接
 在用户进程失败时执行进程恢复
  清除数据库缓冲区高速缓存
  释放该用户进程使用的资源
 监视会话是否发生空闲会话超时
 将数据库服务动态注册到监听程序

ARCn: 将写满后的redo log写入到归档日志中。
  可以收集事物处理重做数据,并将该数据传输到备用目标位置

MMON: 自我监视和自我管理支持进程
MMNL: MMON辅助进程,
ADDM: 自动数据库诊断监视器
MMAN: 自动内存管理
LREG: 监听注册进程

2、前台进程
 服务器进程
 应用程序服务器产生到数据库服务器的连接,多个连接形成一个连接池。
 
#模拟应用程序服务器到数据库服务器的连接
sqlplus / as sysdba
此时,加上之前的那个连接总共两个连接。
 
 用户的信息到达应用程序服务器后,由应用程序服务器随机选择连接到达数据库服务器,执行完成后,把执行结果返回给用户。
 
用户进程
 用户客户端产生的进程,我们不关心。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总结

以上是生活随笔为你收集整理的day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。