第十四讲--PGA管理和调整

Oracle有两种工作方式:

1.      dedicated server;

一个连接对应一个server process。连接的请求得到最及时的相应。


2.      shared server;

多个连接由调度进程随机分配,连接被放入SQL队列,6个server process不断轮询从SQL队列中取出SQL执行。Despatcher只是调度的作用,起负载很小,主要的负载在server process上。适合于数据库的连接量非常大,同时每一个连接负载又很小的情况(电商网站)。

第十四讲--PGA管理和调整_第1张图片

PGA的管理方式有两种:

1.      手动,手动的设置sort_area_size, hash_area_size, bitmap这三个区的大小;手动设置不够灵活,常常出现内存不够或者内存空余的情况。

Oracle有两大dbf文件:一是临时(temp)dbf,二是数据(data)dbf。如果设定sort_area_size的大小是2M,当需要排序的数据量大于2M时,oracle就会启用临时dbf,先把一部分数据写入临时dbf,对另一部分数据进行排序,排序完成之后再把临时dbf的数据读入进行排序。这有点像swap内存区。不需要临时dbf时叫做完全内存排序,使用临时dbf时叫做磁盘排序。磁盘排序的速度很慢。

2.      自动,只需给所有的server process分配一个大的PGA空间就可以了。每个server process建立的时候都会从PGA里申请一块空间,不够用时会接着申请,用完就释放。每个server process获得的空间是弹性的。

 

设置PGA为自动管理:

SQL> alter system set workarea_size_policy=auto scope=both;

 

System altered.

设置总的PGA大小:

SQL> alter system set pga_aggregate_target=512m scope=both;

 

System altered.

OLTP系统中,一般而言PGA大小为物理内存的80%再乘以20%

OLTPPGA_aggregate_target =(total_mem * 80%) * 20%

DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。

DSSPGA_aggregate_target =(total_mem * 80%) * 50%

 

查看PGA的大小:

SQL> show parameter pga;

 

NAME                                 TYPE

--------------------------------------------------------------------

VALUE

------------------------------

pga_aggregate_target                 big integer

512M

查看server process每个区的大小:

SQL> showparameter area;

 

NAME                                 TYPE

--------------------------------------------------------------------

VALUE

------------------------------

bitmap_merge_area_size               integer

1048576

create_bitmap_area_size              integer

8388608

hash_area_size                       integer

131072

sort_area_retained_size              integer

0

sort_area_size                       integer

 

NAME                                 TYPE

--------------------------------------------------------------------

VALUE

------------------------------

65536

workarea_size_policy                 string

AUTO

你可能感兴趣的:(oracle)