• 【基础】Oracle体系结构


    oracle 体系结构

    1)oracle server :database + instance
    2)database:data file 、control file 、 redolog file
    3)instance(实例):access a database

    1、在启动database时,建立instance
    2、一个instance 只能访问一个database
    3、一个database可以有多个instance访问(RAC 集群环境)
    ----------oracle memory: sga + pga
    memory_max_target :系统分配给oracle的最大内存空间(可以设定为物理内存的80%)

    memory_target :Oracle 可用的内存空间(memory_target <=memory_max_target),如果memory_target 是一个非零的数值,就启用了oracle的内存自动管理,对oracle11g,不用再去设置sga_target 和 数值,就启用了oracle的内存自动管理,对oracle11g,不用再去设置sga_target 和pga_aggregate_target。

    4)instance : sga + backgroud process
    5)sga组成:sga 在一个instance只有一个sga,sga所有的session共享;随着instance启动而分配,instance down ,sga被释放。

    --------查看OS分配给oracle的内存
    [oracle@work oradata]$ ipcs
    
    ------ Shared Memory Segments --------
    key shmid owner perms bytes nattch status 
    0x995eb2e8 65537 oracle 640 379584512 18
    
    ------ Semaphore Arrays --------
    key semid owner perms nsems 
    0xbe3edae0 98304 oracle 640 44
    
    ------ Message Queues --------
    key msqid owner perms used-bytes messages
    
    [oracle@work oradata]$ ipcs -m
    
    ------ Shared Memory Segments --------
    key shmid owner perms bytes nattch status 
    0x995eb2e8 65537 oracle 640 379584512 18

    6)share pool :存储最近访问的sql和plsql语句及数据字典,用于sql访问共享,减少sql硬解析(hard parse)。
    sql 语句的执行过程:
    例如:select ename,sal,deptno from emp where empno=7788;
    ①parse
    首先对sql语句执行hash运算,得出一个hash值,再和libary cache保存的hash值进行对比,看是否有相同的hash值,如果有相同的hash值,说明这个sql被共享,找到这个保存的执行计划,进入第二步。
    如果没找到相同hash值或sql第一次执行,先要对sql进行语法分析,语义分析(字段名、表名,访问数据字典,先从dict cache 访问,如果没有,从磁盘访问system 表空间,再读入dict cache)和查看权限;对sql进行编译,分析访问的对象,统计数据分布、建立执行计划,将执行计划保存到libray cache。

    ② 绑定变量
    ③execute (执行计划)
    ④fetch (从buffer cache 读取数据, 返回结果)(sql硬解析从头开始,软解析从执行计划开始)
    library cache:存放最近最常使用的sql和plsql 代码,通过LRU的算法,管理共享的sql和pl/sql代码
    dict cache: 存放数据字典信息

    7)sga_target:sga内存分配自动管理(ASMM)
    sga_target =0 关闭ASMM,>0 启动内存自动管理(可以对share pool、data buffer、large pool、java pool 可以实现自动管理)
    sga_target<= sga_max_size

    -------share pool 通过内存自动管理分配的空间为100m ,shared_pool_size 的大小是分配给share pool的最小值

    8) data buffer:存放从datafile 里读出的数据块的镜像。(在oracle访问数据时,是以oracle block为单位)
    ----oracle 从磁盘读取数据是以块为单位,将读出的块放入到databuffer 中
    db_block_size 指定了oracle 的标准块的大小,默认10g 为8k
    db_cache_size --------指定default cache大小-----LRU 默认数据块放到default cache(可以通过内存的自动管理调整)
    db_keep_cache_size 保留 存放经常使用小表和索引块等(数据块一直存放到buffer里,直到重启instance,大小需要手工指定,不能通过内存自动分配)
    db_recycle_cache_size 回收 存放偶尔访问做全表扫描的表的数据块(数据块使用完后,自动被清理出内存,大小需要手工指定,不能通过内存自动分配)

    db_cache_advice 建议data_buffer大小的调整

    9) log buffer: 存放redo entries ,用于recover “先记后写”
    ---------当做DML或DDL 操作,修改数据块时,会生成日志条目,保存到log buffer,然后及时的写入到redo log file;当脏块(在内存中被修改的块)丢失时,可以通过redo 日志重做,恢复数据

    10) large pool: 做批处理、备份恢复、用share server模式
    当数据库分配一个server process建立session时,如果是dedicated server,会从pga分配内存给每个session(存放session信息、游标等);如果是shared server
    从large pool 分配内存给每个session。
    server process :
    ①dedicated 专有模式(一个user process 会有一个server process 提供服务)
    ②shared 共享模式(数据库先建立多个server process,当user process 访问数据库时,数据库会通过dispatch(调度器)分配server process 给user process。

    11) java pool:java 代码的解析
    12)stream pool 流池 :数据库高级复制

    13)pga:随着server process分配给每一个session,随着server process终止,而被释放,独立非共享存放用户游标、变量、控制信息数据排序、存放hash值

    14) process: user process、 server process 、background process
    user process:客户端请求,不能直接和oracle server交互,必须通过server process 访问oracle server

  • 相关阅读:
    场景调研
    12.8
    12.7
    12.6
    12.5
    12.4
    12.3
    重启oracle数据库的操作方法
    oracle创建dblink方法
    SQL*Loader 详解
  • 原文地址:https://www.cnblogs.com/tomatoes-/p/6599576.html
Copyright © 2020-2023  润新知