博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存及数据库结构
阅读量:6454 次
发布时间:2019-06-23

本文共 4312 字,大约阅读时间需要 14 分钟。

hot3.png

用户执行DQL | DML流程解析: user---DQL | DML---> server process 响应---->PGA(session information和hash area 生成自己的算法)----->

1.shared poll(library cache 进行匹配hash算法 如果没有oracle自己会验证语法和语义是否正确并生成一个最优计划(如果是data files 读取块,会直接将文件的数据块共享给用户。如果是在database buffer cache 块 oracle会自己将data files数据库提取到databases buffer cache中 并共享给用户))
2.shared poll(library cache 进行匹配hash算法 如果有相同的算法 将database buffer cache 的数据块共享给user)
实例SID:由内存结构+后台进程构成,是访问数据库的一种途径。
第三方用户做数据库恢复(ode----)除外,其他都需要访问实例
数据库:存放用户数据,由物理结构+逻辑结构构成
数据库服务器:实例+数据库
进程:
分类
1.用户进程:用户通过某种方式链接数据库,所产生的进程
用户连接工具:sqlplus plsqdeveloper sqldeveloper toad spoolit oracle工作站 应用程序
用户进程连接数据库途径: ipc:本地链接
tcp/ip:远程链接---->需要配置监听
2.服务器进程:响应用户进程的进程
专有(私有)连接:一个用户进程对应一个服务器进程----->UGA
共享连接:一个用户进程对应多个服务器进程。用户进程连接服务器进程,哪个进程有时间进去响应用户进程----->SGA
PGA:私有全局区域(program global areat)| 程序全局区域(private global area) 用来存放用户进程信息和服务器进程信息
设置PGA大小:show parameter pga;----->pga_aggregate_target
用户信息:会话信息 操作信息 用户连接服务器使用的工具 主机名 ip地址 用户名
PGA分类:1stack space (堆栈空间):变量,常量,数据类型,游标
2.session information(会话信息):用户名,连接工具,主机名,ip,用户操作,用户连接的用户进程号
查看:desc v$process; desc v$session----->dba用户
3.sort area(排序区):用户执行sql/plsql 使用例order by 时就在这个区域排序---->占用pga内存的百分之70--->主要优化这
4.hash area():用户执行分区表时执行的hash算法,就在这完成
UGA——————>包括 2. 3 4 表示用户使用的是专有连接
SGA----->包括2.3.4 表示使用的是共享连接
SGA:共享区域
设置SGA大小:show parameter sga;
分类:
1.shared pool(共享池) :存放用户共享信息(会话信息,sql/plsql信息,数据字典,权限,对象,数据文件信息,块信息)共享的是最近使用的信息
设置共享池大小:show parameter shared_pool_size;
1.1:library cache(库高速缓存区):存放用户经常使用的sql/plsql执行计划,
1.1.1:sql共享区:最近经常使用的sql执行计划
1.1.2:plsql共享区:最近经常使用的plsql执行计划
软分析:语句在执行进程中在library cache中能找到相同的执行计划
硬分析:语句在执行进程中在library cache找不到相同的执行计划
硬分析执行流程:语句----->验证语句的语法是否正确--->语句的语义是否正确--->通过oracle优化器得到最优的执行计划(rbo./cbo)--->执行计划执行语句--->将结果返回给用户进程
1.2:data dict cache:字典缓冲区-->经常要使用到的数据字典信息(all_,use_,dba_,V$)
包括:对象名,对象列表,列数据类型,数据文件的编号,数据块编号,用户权限信息..... ----->如果有叫做命中,命中率最少要达到90%。
1.3:control structure:控制结构:控制共享池的征用(shared pool)
内存锁
2.database buffer cache(数据高速缓冲区):存放最近经常使用的数据块信息。
设置数据高速缓冲区大小:show parameter db;
按照驻留时间不同分类:
2.1:keep():保存数据块信息永久保留,除非手动释放内存或关机
2.2:default:默认池
2.3:recycle:回收池
3.redo log buffer(日志缓冲区):记录database buffer cache 中数据块的更改信息---->可以理解为记录是用户DML操作和部分的DDL操作。
查看日志缓冲区大小:show parameter log; --->log_buffer 注: 不能设置太大-->丢数据很多 不能设置太小--->dml时影响操作 日志缓冲区大小最好不少过100M----->主要优化这
loging:强制记录日志
no login:不记录日志
4.large pool(大池):主要存放 rman的备份信息 用户的共享连接(UGA)
设置large poll 大小:show parameter large_pool;---->large_pool_size
5.java pool():java相关的程序和连接信息
设置java poll 大小:show parameter java_pool;---->java_pool_size
6.stream pool:流池---->存放流复制(像mysal中的ab复制)---->一般不是用异地备份有延迟,现用goldengate 代替
7.other pool:其他池 主要是没有地方放的时候放在这里。
3.后台进程:维护实例和数据库通信的进程
5大关键性进程
3.1pmon:程序进程监听进程(1个进程)
作用:
1.动态注册监听(向数据库注册1s注册一次)
2.清理某种意外中断的用户会话信息,释放资源
3.可以维护进程之间的秩序,保证进程正常运行,
3.2dbwr:数据写进程--->将数据缓冲区(database buffer cache)的脏数据(被用户更改过的数据)写入到数据文件(10g 最多16个 ,11g 最多36个进程0-9 a-z)
什么时候写:
1.触发例检查点(用户手动触发(alter system checkpoint)| 用户正常执行关数据库(shutdown immediate))
2.脏数据达到数据缓存区空间10%
3.用户将表空间离线
4.用户对表(drop truncate)操作
5.表空间只读
6.database buffer cache 空间全是脏数据,没有新块空间时
7.在rac环境时执行ping 时
3.3lgwr:日志写进程--->将日志缓冲区的信息顺序写入日志文件(1个进程)
什么时候写:
1.dbwr进程写之前
2.当用户执行commit操作
3.当log buffer cache 的内容达到1/3时
4.每3秒写一次
3.4smon:系统监控进程-->保证数据库中的数据一致性(1个进程)
作用:1.实例恢复(回滚 | 前滚):
2.清理临时表空间
3.合并空闲的空间
3.5ckpt:检查点进程(1个进程)
什么时候触发:
1.更新控制文件和数据文件头部
2.触发dbwr之前
3.用户执行:shutdown inmmediate/shutdown/shutdown transac
MMAN--->
MMNL--->
MMON--->
ARC---->归档进程
other--->
数据库:物理结构 逻辑结构
1.物理结构
1.1datafile:数据文件
查看数据文件:select name from v$datafile
system01.dbf--->存放数据字典(不可缺失)
sysasux01.dbf--->存放数据工具(不可缺失)
undotbs01.dbf--->存放用户dml的全镜像(不可缺失)
users01.dbf--->用户数据文件(可缺失因一般不用这个,另外建立了一个)
1.2controlfile:控制文件--->记录数据库的结构行为(数据库名 数据文件名字 日志文件名 归档信息 rman备份信息)
查看控制文件:select name from v$controlfile;
1.3redologfile:联机日志或叫重做日志--->记录用户所做的所有dml操作和部分ddl操作
查看有多少个日志文件:select member from v$logfile;
1.4parameter file:参数文件--->记录内存的分配情况,控制文件的路径个数,数据库名字,默认数据块的大小,闪回区路径(show parameter db_recovery_file_dest),闪回区大小,回退表空间的名字,oracle内部定义的参数
查看参数文件:SQL> show parameter spfile
1.5password file:密码文件--->具有sysdba sysoper权限的密码(远程连接时使用)
查看文件存放路基:$ORACLE_HOME/dbs/orapwORACLE_SID
1.6ARCHIVELOG FILE:归档日志文件
查看归档文件默认存放路径 :show parameter log_archive_format
查看有哪些归档:select name from v$archived_log
数据块图解:
-----------------块头
-----------------
----------------空值free
-----------------
-----------------
-----------------data

 

 

转载于:https://my.oschina.net/hdlp520/blog/893017

你可能感兴趣的文章
利用ItextPdf、core-renderer-R8 来生成PDF
查看>>
irc操作小记
查看>>
JAVA 与 PHP 的不同和相同
查看>>
建立Ftp站点
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
CentOS 7使用systemctl如何补全服务名称
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
Shell编程学习总结
查看>>
构建之法阅读笔记02
查看>>
Webstorm常用快捷键备忘
查看>>
js滚动加载到底部
查看>>
Redis慢查询,redis-cli,redis-benchmark,info
查看>>
Virtualbox 虚拟机网络不通
查看>>
java概念基础笔记整理
查看>>
CC_UNUSED_PARAM 宏含义的解释
查看>>
leetcode124二叉树最大路径和
查看>>
AngularJS笔记整理 内置指令与自定义指令
查看>>