oracle 体系结构及内存管理 10_PGA

一、PGA做用:用户会话进程的私有内存空间(会话用户的权限信息,全局变量、数据结构和控制信息),存储与本会话相关的信息及数据,没有
          共享,将会话执行的SQL中间结果集转移到Server Process 的PGA中进行处理。
          
二、PGA构成:主要就是该会话的SQL工做区
    private SQL area
    Session Memory
    SQL Work Areas
    
三、PGA管理方式
自动:推荐使用,全部server process oracle会分配一个大的PGA空间,每个sp会弹性的获取须要的空间,上限有限制
    设定PGA_AGGREGATE_TARGET大小后,开始能够给每一个sp分配充足的空间,当全部空间都被使用后,再有新的空间需求时,会再申请
    一部分空间,可是这部分空间就只能给分的不多
手动:手工设置排序,hash,map的大小空间,会给每一个server process的PGA分配指定大小空间
临时文件:当sp的PGA排序空间不够时,会将一部分数据写入临时表空间的文件上,就是磁盘排序“multi-pass”过程,彻底内存排序,磁盘
          排序一次,屡次,对性能影较大。
          
四、Dedicated Server专用模式,链接请求能及时响应,链接数量有限负载大,一个链接对应一个server process
   Shared Server共享模式,经过调度进程转接,链接量大负载小,链接随机选调度进程,调度进程将收集到sql放入队列里,server process
   会轮询队列,找到后执行
   
五、PGA相关参数设置
    在OLTP系统中,典型PGA内存设置应该是总内存的较小部分。
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20% 
    在DSS系统中,因为会运行一些很大的查询,PGA须要分配加大内存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50% 
    PGA大小设置:
    alter system set workarea_size_policy=auto scope=both;
    alter system set pga_aggregate_target=512m scope=both;
    show parameter area;
    sort_area_size:排序区大小定义参数
    sort_area_retained_size: 用于保存已排序数据的内存大小
       可能产生排序的语句:order by,distinct,union,gorup by,sort merge into,高级统计(cube),sort area:取出全部需
    要的数据,放到PGA中,在PGA中进行排序,排完后返给用户,会随着数据大小须要调整;包括要排序的数据和排序后,的数
    据,放入磁盘的只是过程排序结果,不是最终结果。没有排序时:随机从buffer中取数据,取到后直接返给用户;
    hash_area_size,hash_join_enable:PGA的hash区
    bitmap_merge_area_size,create_bitmap_area_size :PGA的BITMAP区域
    open_cursors:会话同时执行sql语句的数量200
    _pga_max_size:每一个会话分配固定空间的大小,不是固定的
查询_pga_max_size,_smm_max_size
    select ksppinm "Name", ksppstvl/1024/1024 ||'M' "Value", ksppdesc "Desc" 
    from x$ksppi x, x$ksppcv y 
    where x.indx = y.indx and ksppinm in ('_pga_max_size','_smm_max_size');
    
六、异步IO直接IO
    异步IO能够在并发量较大的环境下有效减小WIO,不能提高整体IO吞吐能力,可是能提升IO操做的整体性能,不会明显提高
存储的IO响应时间,能够提升Oracle数据库读取数据文件的效率。
    参数:FILESYSTEMIO_OPTIONS #设置oracle在文件系统文件上启用或者禁用异步I/O或者直接I/O
        ASYNCH:  在文件系统文件上启用异步I/O,在数据传送上没有计时要求。
        DIRECTIO:  在文件系统文件上启用直接I/O,绕过buffer cache。
        SETALL:  在文件系统文件上启用异步和直接I/O。
        NONE:  在文件系统文件上禁用异步和直接I/O。
    与IO相关oracle组件:存储系统,数据,日志,控制文件,临时文件与排序,DBWR,LGWR,前台进程,操做系统
磁盘的转速,磁盘的寻到和读写操做,越大,越快越好,闪存技术。
    db_file_multiblock_read_count:一次多块读数量,oracle能够一次多块读
    
七、PGA与临时表空间
    临时表空间组要用于配合PGA保存SQL执行过程结果集,如排序,表链接等置换做用,存储临时表,但临时表不单单存储于
临时表空间。
    为使并行查询和不一样会话使用不一样临时表空间可使用临时表空间组。
    .. default tablespace users temporary tablespace group temp tablespace temp1,tablespace temp2
    
八、PGA相关视图及SQL
V$PGASTA:实例级别的PGA内存使用和自动分配的统计,PGA每一个子池及对应的值 
V$PGA_TARGET_ADVICE:参照设置PGA的大小,该大小下,命中率,物理磁盘读写,溢出,
    Select pga_target_for_estimate/1024/1024 ||'M' "Estimate PGA Target"
    ,estd_pga_cache_hit_percentage "Cache Hit(%)",estd_extra_bytes_rw/1024/1024 ||'M' "Extra Read/Write"
    ,estd_overalloc_count "Over alloc count" From v$pga_target_advice;
V$SYSSTAT 、V$SESSTAT :系统排序的状况,内存,磁盘,排序行数
    select * from V$SYSSTAT  where name like '%sort%'; 
v$mystat、v$statname:当前会话的PGA分配值及最大值
    select name,value from v$statname a,v$mystat b where a.statistic#=b.statistic# and a.name like '%pga%';
v$mystat,v$session,v$process:查询server process 的PGA信息,每一个进程PGA的限制,不得超过
PGA_AGGREGATE_TARGET的5%,不得超过_SMM_MAX_SIZE定义的大小。
    select spid,program,pga_max_mem,pga_alloc_mem,pga_used_mem,pga_freeable_mem 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)));
v$process_memory :查看当前会话PGA各个区域使用状况
    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 ) ));
v$sql_workarea_histogram :PGA排序状况,一次磁盘排序,屡次磁盘排序
    SELECT LOW_OPTIMAL_SIZE/1024/1024 low_mb,(HIGH_OPTIMAL_SIZE+1)/1024/1024 high_mb,  
    optimal_executions,onepass_executions,multipasses_executions FROM v$sql_workarea_histogram
    WHERE total_executions != 0 and total_executions > optimal_executions;
V$SQL_WORKAREA_ACTIVE:正在执行语句的工做区瞬时状况
    select operation_type as type, policy, sid, round(active_time/1000000,2) as a_sec,
    round(work_area_size/1024/1024,2) as wsize, round(expected_size/1024/1024,2) as exp,
    round(actual_mem_used/1024/1024,2) as act,round(max_mem_used/1024/1024,2) as max, 
    number_passes as passes, round(tempseg_size/1024/1024,2) as temp from v$sql_workarea_active;
v$sql_workarea  :查询具体SQL PGA使用状况
    select operation_type as op, policy, round(estimated_optimal_size/1024/1024,2) as e_opt, 
    round(estimated_onepass_size/1024/1024,2) as e_one, round(last_memory_used/1024/1024,2) as l_mem, 
    last_execution as last, total_executions as tot, optimal_executions as opt, onepass_executions as one,
    multipasses_executions as mult, round(active_time/1000000,2) as sec,
    round(max_tempseg_size/1024/1024,2) as tmp_m, round(last_tempseg_size/1024/1024,2) as tmp_L
    from v$sql_workarea where sql_id='37qjh5yuha3x9';html

九、补充
UGA(User Global Area):用户全局区,特定的会话相关;
    dedicated模式下UGA在PGA里,shared模式下UGA在SGA的Large pool里。
        
参考文档:
http://blog.csdn.net/tlx20093a/article/details/7029225
http://www.2cto.com/database/201309/242229.htmlsql

相关文章
相关标签/搜索