oracle pga和sga

如果你想更好的了解Oracle体系结构的相关内容的话,你就必须的了解Oracle体系结构中的基本概念,数据库,以下就是数据库的相关内容的具体介绍,希望你在浏览完此篇文章之后会有会所了解。

要了解Oracle体系结构必须先了解它的基本概念: 数据库.

一: 数据库

数据库(database)是一个数据集合.

无论数据库是采用关系结构还是面向对象结构, Oracle数据库都将其数据存放在数据文件中. 在其内部, 数据库结构数据对文件的逻辑映射, 使不同的数据分开存储, 这些逻辑划分称为表空间.

表空间和文件介绍:

1: 表空间

表空间(tablespace)是数据库的逻辑划分, 每个数据库至少有一个表空间,叫做系统表空间(system 表空间). 一个表空间只能属于一个数据库.

每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件称为数据文件. 表空间的特性:

1)控制数据库数据磁盘分配

2)限制用户在表空间中可以使用的磁盘空间大小

3)表空间具有 online, offline, readonly, readwrite属性

修改表空间的属性:

SQL> alter tablespace 表空间名称 属性;

查询表空间状态:

 

 
  1. SQL> select tablespace_name, status from dba_tablespaces; 

注意: system, undo, temp表空间不能设为offline属性.

4)完成部分数据库的备份与恢复

5)在Oracle体系结构表中空间通过数据文件来扩大, 表空间的大小等于构成该表空间的所以数据文件的大小只和.

查询表空间与数据文件对应关系:

 

 
  1. SQL> select tablespace_name, bytes, file_name from dba_data_files; 

基于表空间的几个操作:

1)查询用户缺省表空间:

 

 
  1. SQL> select username, default_tablespace from dba_users; 

2)查询表与存储该表的表空间:

 

 
  1. SQL> select table_name, tablespace_name from user_tables; 

3)修改用户缺省表空间:

 

 
  1. SQL> alter user username default tablespace  tablespace_name; 

4)将数据从一个表空间移动到另一个表空间:

 

 
  1. SQL> alter table table_name move tablespace  tablespace_name; 

2: 数据文件

每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件叫做数据文件(datafile),数据文件只能属于一个表空间. 数据文件创建后可以改变大小. 创建新的表空间需要创建新的数据文件. 数据文件一旦加入到表空间中, 就不能从表空间中移走, 也不能与其他表空间发生联系.数据库必须的三类文件是 data file, control file, redolog file.

其他文件 prameter file,password file, archived log files并不是数据库必须的, 他们只是辅助数据库的.

查看数据库的物理文件组成:

1)查看数据文件: SQL> select * from v$datafile;

2)查看控制文件: SQL> select * from v$controlfile;

3)查看日志文件: SQL> select * from v$logfile;

 

http://database.51cto.com/art/201004/193135.htm

 

 

SGA由多个部分组成:

1, 固定SGA(Fixed SGA)

 

2, 块缓冲区(Db cache)

 

3, 重做日志缓冲区(Redo log buffer)

 

4, Java池(Java pool)

 

5, 大池(Large pool)

 

6, 共享池(Shared pool)

 

7, 流池(Stream pool)

 

有如下参数控制共享池相关组件大小:

1, JAVA_POOL_SIZE:控制Java池大小。

 

2, SHARED_POOL_SIZE:9i中控制共享池中占用最大的部分,10g以上控制共享池大小。

 

3, LARGE_POOL_SIZE:控制大池大小。

 

4, DB_*K_CACHE_SIZE:控制不同块大小的缓冲区大小。

 

5, LOG_BUFFER:控制重做日志缓冲区大小。

 

6, SGA_TARGET:10g以上控制自动SGA内存管理的总内存大小。

 

7, SGA_MAX_SIZE:控制SGA可以达到的最大大小,改变需重启数据库。

 

下面将详细介绍各个部分的作用和推荐设置。

SGA各组件作用

1, 固定SGA:

 

顾名思义,是一段不变的内存区,指向SGA中其他部分,Oracle SGA通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。

 

2, 块缓冲区:

查询时,Oracle会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘。插入和更新时,Oracle SGA会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,Oracle可以通过内存缓存提高磁盘的I/O性能。

 

块缓冲区中有三个区域:

 

默认池(Default pool):所有数据默认都在这里缓存。

 

保持池(Keep pool):用来缓存需要多次重用的数据。

 

回收池(Recycle pool):用来缓存很少重用的数据。

 

原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。

 

这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。

 

9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。

 

3, 重做日志缓冲区(Redo log buffer):

数据写到重做日志文件之前在这里缓存,在以下情况中触发:

 

每隔3秒

 

缓存达到1MB或1/3满时

 

用户提交时

 

缓冲区的数据写入磁盘前

 

4, Java池(Java pool):

在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。

 

5, 大池(Large pool):

下面三种情况使用到大池:

 

并行执行:存放进程间的消息缓冲区

 

RMAN:某些情况下用于磁盘I/O缓冲区

 

共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)

 

6, 共享池(Shared pool)

共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。

 

SQL和PL/SQL的解释计划、代码,数据字典数据等等都在这里缓存。

 

SQL和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。

 

不使用“绑定变量”导致:

 

系统需要花费大量的资源去解析查询。

 

共享池中的代码从不重用,系统花费很大代价管理这部分内存。

 

关于共享变量的优缺点讨论已经超过了这篇文章的范畴,简单来讲,响应时间短的查询要使用共享变量,响应时间长的统计不使用共享变量。

 

需要注意的是,SHARED_POOL_SIZE参数在9i中控制共享池中占用最大的部分,10g以上控制共享池总大小。

 

7, 流池(Stream pool)

9iR2以上增加了“流”技术,10g以上在SGA中增加了流池。流是用来共享和复制数据的工具。

你可能感兴趣的:(数据结构,oracle,sql,cache,浏览器)