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

相關文章
相關標籤/搜索