PGA&SGA

 

:(program global area)程序全局区主要包括两个部分:session area和private SQL area;

:包括会话信息,比如说:跟踪信息、使用alter session的命令修改的环境参数、打开的DB Links、会话拥有的角色(role)等。

Private SQL area:每个执行的SQL都会申请一个private SQL area,这些内存又可以分为两个部分:persisten Area和Run-time Area。

Persisten Area:区域主要是存放绑定变量、数据类型转换等cursor信息,一旦cursor关闭之后,这块区域也被释放。

Run-time Area区域在SQL运行过程中使用,其大小依赖于SQL语句的操作方式(sort或者是hash-join)、要处理的数据行数和每行记录的大小。

对PGA的调整也是对private SQL area调整中的run-time-area调整。

 

查看PGA的使用情况:

SQL> select spid,program,pga_max_mem,pga_alloc_mem alloc,pga_used_mem used, pga_freeable_mem free 
from V$process where spid in
 (
select spid from v$process where addr in
 (
select paddr from V$session where sid in 
(
select distinct sid from v$mystat
)
)
);
 
SPID   PROGRAM                     PGA_MAX_MEM  ALLOC   USED   FREE
------------ ------------------------------------------------ ----------- ---------- ---------- ----------
4536 oracle@pioncare91.domain.com (TNS V1-V3) 39049513 2499185 1043949    1048576
 
从V$process_menmory中查看PGS各个分区的分配大小
 
SQL>  select p.program,p.spid,pm.category,pm.allocated,pm.used,pm.max_allocated
 from V$process p ,V$process_memory pm 
where p.pid=pm.pid and p.spid in 
(
 select spid from v$process where addr in
 (
select paddr from v$session  where sid in
 (
select distinct sid from v$mystat
)
)
);
 
PROGRAM            SPID   CATEGORY  ALLOCATED  USED MAX_ALLOCATED
------------------------------------------------ ------------ --------------- ---------- ---------- -------------
oracle@pioncare91.domain.com (TNS V1-V3)  4536 SQL  208884  146072     1030084
oracle@pioncare91.domain.com (TNS V1-V3)  4536 PL/SQL 26316  21380     30468
oracle@pioncare91.domain.com (TNS V1-V3)  4536 Other   2460593         37988961

 

 

SQL语法执行过程:

1、synatic:语法分析,检查SQL语法是否错误,有没有拼写错误。

2、Semantic:语义分析,检查要查询的对象是否存在,以及用户是否有对应对象的操作权限。

3、Parent cursor:在library cache中检查语句中的cursor是否存在,如果存在可重用的cursor,则可以把PGA中的private SQL Area和其关联,然后跳至第八步,此过程叫做软解析;如果不存在则申请一个parent cursor,parent cursor就是用来保存SQL语句的,然后进行第四布

4、View Merge:如果用户的语句中用到了视图,则把视图语句合并到用户语句中;

5、Statement transformation:把复杂的SQL转换成简单的SQL语句,比如展开子查询等;

4和5又可以叫做logical optimization

6、Optimization:确定最佳的访问路径,选择最小代价的访问方式;physical optimization

7、QEP generation:(生成执行计划),QEP query Execution Plan,也就是产生child cursor执行计划会保存在child cursor中,并和parent cursor相关联;

8、QEP Execution:执行语句,生成结果。

 

 

从某本书中SQL tuning里面还没有看到实际操作,MB,mark一下下次继续奋战