用户执行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