2、Oracle内存结构
- 系统全局区(SGA),也叫共享全局区。
1、数据缓冲区(Data Buffer Cache):
用于存储从磁盘数据文件中读取的数据,供所有用户共享。用户修改数据后,修改后的数据先保存在数据库缓冲区中,最后由DBWn进程写入磁盘数据文件。
2、日志缓冲区(Redo Log Buffer Cache):
用于存储数据库的修改操作信息。当日志缓冲区中的日志数据达到一定限度时,由日志写入进程LGWR写入磁盘日志文件。
3、共享池(Shared Pool):
用于保存最近执行的SQL语句、PLSQL程序的数据字典信息,它是对SQL语句和PLSQL程序进行语法分析、编译和执行的内存区域。
(1).库缓冲区(library cache):SQL语句的分析码和执行计划;
(2).数据字典缓冲区(data dictionary cache):数据字典中得到的表、列定义和权限;
(3).用户全局区(user globalarea):保存用户的会话信息。
- 程序全局区(PGA)
是包含单个用户(或服务器)数据和控制信息的内存区域。PGA不是共享区,只有服务器本身才能访问自己的PGA,它主要用来保存用户在编程时使用的变量与数组等。
- 排序区(Sort Area)
Oracle系统为排序操作所产生的临时数据,提供的内存空间。在Oracle中,存放用户排序操作所产生的临时数据的区域有两个,内存排序区和临时表空间,优先使用内存排序区进行排序操作,如果内存空间不够,再使用磁盘临时段。
性能调优知识点:
Oracle尽量使用内存排序。
select name,value from v$sysstat where name like '%sort%';
sorts(memory)表示内存排序量, sorts(disk)表示磁盘序量。
失败率 = sort(disks)/sorts(memory) ×100% 排序区的失败率不得小于5%,否则必须增加排序sort_area_size的大小,使得Oracle尽量使用内存排序。磁盘IO的调整就是把数据文件放在多个不同的磁盘上。
- 大池(Large Pool)
用于提供一个大的缓冲区供数据库的备份与恢复操作。
- Java池(Java Pool)
用于在数据库中支持java的运行。