参考了很多文章,学习自网络

数据库 = 实例(数据库启动时初始的进程和内存结构,进程会作用到对应的内存区域-数据写入器到写入内存缓冲区,日志写入器到日志缓冲区等) + 数据库(物理文件-控制文件,数据文件,日志文件)

内存结构分为每个实例分配一个可共享的SGA(系统全局),不可共享,每个用户会话一块的PGA(用户全局)

SGA: 包含数据库缓冲区缓存,存放数据库中数据块的拷贝DB_BLOCK_BUFFER,日志缓冲区,共享池SHARED_POOL_SIZE包含特定sql语句所用的信息等,Oracle使用最近最少使用(LRU,leastrecentlyused)算法来管理可用空间

PGA: 包含用户登陆相关的session,执行排序语句如果内存不够则使用临时表空间

一条查询语句:

1. 服务器端监听请求; 2. 客户端发起请求; 3. 监听器收到请求,建立服务器进程; 4. 服务器检查缓冲区,如果有包含关键字的数据库,则返回,如果没有,则先将行返回到缓冲区,再返回

一条更新语句:

服务器会先在缓冲区中查找,如果有则更新,块变脏,如果没有,则先将行从磁盘复制到缓冲区再更新

会话数据都是操作缓冲区,之后缓冲区与磁盘数据不一致,由数据库写入器写入到磁盘,DB_WRITER_PROCESS 可以定义写入进程的个数,写入条件(缓冲区满,脏块多,3s,检查点)

写入不实时,通过重做日志来保证数据不丢失,当执行(I/U/D)时写入重做日志文件,保证数据不丢失,同时有日志缓冲区,减少磁盘io和用户等待,日志同样有日志写入进程,执行逻辑(commit/日志缓冲区大于1/3/数据写入器写入脏数据之前)

共享池: sql多次执行编译后缓存,数据字典,plsql

Oracle 后台进程: SMON(System Monitor) - 安装打开恢复, PMON(Process Monitor), DBWR(数据缓冲区管理),  CKPT(Checkpoint Process), MMON(ManageAblity Monitor) - 会话性能统计, ARCN(Archiver)),

物理文件类型:

数据文件(存储数据*.dbf),日志文件(存日志Log*.dbf),控制文件(记录数据库的物理结构*.ctl),配置文件(*.ora)

物理意义 Parameter Name Result
查看回滚段设定 show parameter undo NAME                      TYPE     VALUE
-------------------- ----------- ----------------------
undo_management  string     AUTO
undo_retention        integer     900
undo_tablespace      string     UNDOTBS1
查看sga参数 show parameter sga NAME                     TYPE     VALUE
------------------- ----------- -----------------------
lock_sga               boolean     FALSE
pre_page_sga       boolean     FALSE
sga_max_size       big integer 576M
sga_target            big integer 576M
查看共享池设置 show parameter shared_pool NAME                                        TYPE     VALUE
---------------------------------- ----------- ---------
shared_pool_reserved_size        big integer 17M
shared_pool_size                      big integer 0
查看缓冲池设置 show parameter db_cache_size NAME                     TYPE     VALUE
------------------- ----------- ------------------------
db_cache_size     big integer  0
查看日志缓冲区设置 show parameter log_buffer NAME                     TYPE     VALUE
-------------------- ----------- ------------------------------
log_buffer             integer     3244032
查看实例/数据库名称 show parameter instance_name/db_name NAME                     TYPE     VALUE
------------------- ----------- ------------------------------
instance_name        string     XE
查看归档文件 show parameter recovery NAME                                    TYPE     VALUE
------------------------------- ----------- ------------------------------
db_recovery_file_dest           string     /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size    big integer  10G
recovery_parallelism             integer        0
查看控制文件 show parameter control NAME                                          TYPE     VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time      integer     7
control_files                                 string     /u01/app/oracle/oradata/XE/control.dbf
control_management_pack_access string     NONE
有多少后台写线程 show parameter db_writer_processes NAME                          TYPE     VALUE
----------------------- ----------- ------------------------------
db_writer_processes     integer     1
修改数据库写线程数 alter system set db_writer_processes=20 scope=spfile;  
查看数据库参数视图 select * from v$parameter  
查看控制文件 select * from v$controlfile  
查看数据文件 select * from v$datafile  
查看数据库文件 select file_name from dba_data_files FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/XE/users.dbf
/u01/app/oracle/oradata/XE/sysaux.dbf
/u01/app/oracle/oradata/XE/undotbs1.dbf
/u01/app/oracle/oradata/XE/system.dbf
/usr/local/oracle/bbdata/BBLEARN_admin_data_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_admin_indx_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_data_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_indx_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_stats_data_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_stats_indx_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_CMS_DATA_file1.dbf

FILE_NAME
--------------------------------------------------------------------------------
/usr/local/oracle/bbdata/BBLEARN_CMS_INDX_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_CMS_DOC_DATA_file1.dbf
/usr/local/oracle/bbdata/BBLEARN_CMS_DOC_INDX_file1.dbf

查看日志文件-1 select group#,member from v$logfile     GROUP# MEMBER
---------- ----------------------------------------
     2 /u01/app/oracle/fast_recovery_area/XE/on
       linelog/o1_mf_2_dxrhc3rx_.log

1 /u01/app/oracle/fast_recovery_area/XE/on
       linelog/o1_mf_1_dxrhc2z2_.log

查看日志文件-2状态 select group#,status from v$log     GROUP# STATUS
---------- ----------------
     1 INACTIVE
     2 CURRENT
日志文件状态切换 alter system switch logfile;  
查看归档类型 select log_mode from v$database;  
查看归档文件 archive log list Database log mode             No Archive Mode
Automatic archival              Disabled
Archive destination             USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence  61
Current log sequence          62
设置归档路径 alter system set log_archive_dest_1='/temp/archivelog '  
打开归档日志 alter database archivelog  
切换归档文件 alter system switch logfile  
清空共享池 alter system flush shared_pool  
修改系统参数 alter system set sga_target = 200m scope = memory  
查看后台进程 select * from v$bgprocess Name                           Null?    Type
 ----------------------- -------- ----------------------------
 PADDR                                  RAW(8)
 PSERIAL#                              NUMBER
 NAME                                    VARCHAR2(5)
 DESCRIPTION                        VARCHAR2(64)
 ERROR                                  NUMBER
查找正在使用的后台进程 SELECT name,description FROM v$bgprocess WHERE paddr<>'00' NAME  DESCRIPTION
----- ----------------------------------------------------------------
PMON  process cleanup
VKTM  Virtual Keeper of TiMe process
GEN0  generic0
DIAG  diagnosibility process
DBRM  DataBase Resource Manager
VKRM  Virtual sKeduler for Resource Manager
PSP0  process spawner 0
DIA0  diagnosibility process 0
MMAN  Memory Manager
DBW0  db writer process 0
LGWR  Redo etc.

NAME  DESCRIPTION
----- ----------------------------------------------------------------
CKPT  checkpoint
SMON  System Monitor Process
SMCO  Space Manager Process
RECO  distributed recovery
CJQ0  Job Queue Coordinator
QMNC  AQ Coordinator
MMON  Manageability Monitor Process
MMNL  Manageability Monitor Process 2

逻辑表示:

数据库 -> 表空间 -> 段 -> 区 -> 数据块(对应硬盘上的一个或多个数据块 db_block_size/pctfree/pctuse)

数据块是Oracle最小的存储单位DB_BLOCK_SIZE,每次请求都是以块为最小单位,块头表明物理地址,表目录记录当前块中存储的相关表,行目录记录行信息,行数据即为真实数据,自由空间是为了防止数据插入或更新后变大预留出了一部分自由空间,当删除或更新也可能缩小自由空间,但不是连续的,当需要的空间不足才会合并不连续空间

行连接Row Chaining,就是一行数据不能被存储在一个数据块中,读取会需要扫描多个数据块

行迁移Row Migrating,当update一个数据行,导致本来在一个块里能存的下的数据现在存不下了,那么就直接找到一个新的数据块存储数据,原数据块持有指向新数据块的链接,所以rowid是不变的,读取会需要扫描多个数据块

pctused参数设置了数据块是否是空闲的界限。当数据块的使用空间低于pctused的值时,此数据块标志为空闲,该空闲空间仅用于插入新的行。如果数据块已经达到了由pctfree所确定的上边界时,Oracle就认为此数据块已经无法再插入新的行。所以,如果pctused设置过高,则会降低磁盘的利用率导致行迁移;若pctused设置过低,则浪费磁盘空间,增加全表扫描时的I/O输出

pctfree指定一个空闲百分比,pctfree值越小,则为现存行更新所预留的空间越少。因此,如果pctfree设置得太高,则在全表扫描期间增加I/O,浪费磁盘空间;如果pctfree设置得太低,则会导致行迁移。

Oracle 学习总结 - 物理结构的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. Oracle学习线路

    出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验)    作为oracle的基本功,需要大家对sql和 ...

  3. Oracle学习指南

    Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...

  4. oracle 学习

    一.数据库语言部分1. SQL语言:关系数据库的标准语言2. PL/SQL:过程化语言Procedural Language3. SQL*Plus:简单的报表,操作系统接口 4. Oracle 8.0 ...

  5. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  6. Oracle学习系列7

    Oracle学习系列7 ************************************************************************************ 关联表 ...

  7. Oracle学习系列6

    Oracle学习系列6 ************************************************************************************ 删除约 ...

  8. Oracle学习系列5

    Oracle学习系列5 ************************************************************************************ ,掌握 ...

  9. Oracle学习系列4

    Oracle学习系列4 ************************************************************************************ 数据库 ...

随机推荐

  1. 廖雪峰Java2面向对象编程-6Java核心类-2StringBuilder

    字符串操作过程中,每次用 + 拼接字符串,有以下问题: 每次循环都会创建新的对象 绝大部分都是临时对象.浪费内存 影响GC效率 String s = ""; for(int i=0 ...

  2. WordPress设置地址的问题

    刚刚安装了一个Wordpress,第一次使用,所以对设置不是很熟悉. 在常规设置那里,有两个地址设置,一个是WordPress 地址(URL),另一个是站点地址(URL),刚开始分不清这两个的区别,所 ...

  3. [UE4]子控件Child Widget顶层容器选择

    如果父级容器是Canvas,则可以直接设置尺寸.放到其他widget的时候也会保持设定好的尺寸(而不管父容器是什么类型).

  4. 用vlan实现同一网段的的各部门之间有的可以通信有的不可以通信

    日前老师上课演示一个项目:实现公司同一网段的各个部门之间有的可以通信有的无法通信.我们用的是思科测试软件模拟操作,个人觉得很好用.       在刚开始做这个项目的时候我以为端口是对应的,如图,交换机 ...

  5. Retrofit Token过期 重新请求Token再去请求接口

    需求是这样的:请求接口A -- 服务器返回数据Token过期或失效  -- 重新请求Token并设置 -- 再去请求接口A 刚解决了这个问题,趁热打铁,写个博客记录一下:这个Token是添加到请求头里 ...

  6. .Net 大型分布式基础服务架构横向演变概述(转)

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  7. 常见排序算法 - Java实现

    1.冒泡排序 每次比较相邻的两个元素大小,调整顺序.从头到尾执行一轮(i),最大数值的元素就排到最后.每次从头到尾执行一轮,都会排好一个元素(length - i - 1).这就是说一个包含 n 个元 ...

  8. Eclipse svn 项目 星号

    上图: 明明没有文件修改过就是无脑显示有提交的文件,有强迫症受不了. 而且每次提交你都点开看有没有漏掉啥文件.很麻烦.也很难受 .很容易漏提交 把本地文件跟SVN同步对比一下. 果然有文件. 添加规则 ...

  9. StringBuffer 清除内容

    在开发的时候,经常使用StringBuffer来进行字符串的拼接.如果反复的做字符串拼接时,有时需要清空Stringbuffer中的内容,然后再拼接新的字符串信息. StringBuffer提供了以下 ...

  10. python中的remove

    remove()从左到右寻找,移除找到的第一个指定元素,举个例子: 1 a = ["hello", "world", "world", &q ...