标签:
数据库 - 数据文件
实例 - 内存结构
一个实例由系统全局内存区域(SGA)以及一系列后台进程组成
每个连接到数据库的用户都通过一个客户端进程来进行管理。
客户端进程是与服务端进程相联结的,每个服务器进程都会被分配一块私有的内存区域,称为进程共享内存区域(PGA)
SGA - 共享池
共享池是缓存程序数据的地方。执行过的每一条SQL语句在共享池中都存有解析后的内容。
共享池中存储这些语句的地方称为库高速缓存。解析每一条语句之前,Oracle都会检查库高速缓存中是否已经存在同样的语句。
如果存在,Oracle直接从缓存中读取并使用该信息而不是将同样的语句再解析一遍。
这些缓存被所有用户所共享
Oracle所使用的系统参数也存放在共享池中,称为数据字典高速缓存区域
Oracle还会存储所有的数据库对象信息
最少使用算法:LRU 原先已经加载的语句不能长时间存放其中,保留那些最频繁以及最近使用的语句
库高速缓存
每条SQL执行前都需要解析并放入高速缓存中
解析包括:语法验证、检验提及的对象、确认用户权限。然后再查看这个语句是否执行过。如果执行过,就重用(软解析)
否则为当前语句生成查询计划(硬解析)。当然,硬解析完后会将结果保存在高速缓存中
查看当前库高速缓存的语句:v$sql
在SQL语句中,尽量使用绑定变量。这样的话,即使变量发生变化,Oracle认为是同一条语句,不需要重新解析
锁存器:保护库高速缓存避免被两个同时进行的会话修改
SGA - 缓冲区缓存
缓冲区缓存是系统全局区(SGA)最大的部分之一。
数据从硬盘读取出来后,或者写入硬盘前,它用来存储数据块。块,是Oracle执行操作的最小单位。
块中包含有表数据行或索引条目。一些块还会包含排序的临时数据。块大小的唯一限制因素取决于操作系统
查询转换
查询转换能够并且可能会重写查询,所以Oracle最终执行的SQL不一定就是我们所写的SQL
视图合并
子查询解嵌套
谓语前推
标签:
原文地址:http://www.cnblogs.com/sherrykid/p/4665270.html