淺談Oracle優(yōu)化排序的操作
概念
服務(wù)器首先在sort_area_size指定大小的內(nèi)存區(qū)域里排序,如果所需的空間超過sort_area_size,排序會(huì)在臨時(shí)表空間里進(jìn)行。在專用服務(wù)器模式下,排序空間在PGA中,在共享服務(wù)器模式下,排序空間在UGA中。如果沒有建立large pool,UGA處于shared pool中,如果建立了large pool,UGA就處于large pool中,而PGA不在sga中,它是與每個(gè)進(jìn)程對(duì)應(yīng)單獨(dú)存在的。
PGA:program global area,為單個(gè)進(jìn)程(服務(wù)器進(jìn)程或后臺(tái)進(jìn)程)保存數(shù)據(jù)和控制信息的內(nèi)存區(qū)域。PGA與進(jìn)程一一對(duì)應(yīng),且只能被起對(duì)應(yīng)的進(jìn)程讀寫,PGA在用戶登錄數(shù)據(jù)庫(kù)創(chuàng)建會(huì)話的時(shí)候建立。
有關(guān)排序空間自動(dòng)管理的兩個(gè)參數(shù):
Pga_aggregate_target: 10M-4000G,等于分配給oracle instance的所有內(nèi)存減去SGA后的大小。
Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定義時(shí)才能設(shè)置為auto。
這兩個(gè)參數(shù)會(huì)取代所有的*_area_size參數(shù)。
措施:
盡可能避免排序;盡可能在內(nèi)存中排序;分配合適的臨時(shí)空間以減少空間分配調(diào)用。
2、需要進(jìn)行排序的操作:
A、創(chuàng)建索引;
B、涉及到索引維護(hù)的并行插入
C、order by或者group by(盡可能對(duì)索引字段排序)
D、Distinct
E、union/intersect/minus
F、sort-merge join
G、analyze命令(僅可能使用estamate而不是compute)
3、診斷和措施
Select * from v$sysstat where name like ‘%sort%’; |
4、監(jiān)控臨時(shí)表空間的使用情況及其配置
Select tablespace_name,current_users,total_extents, used_extents,extent_hits,max_used_blocks,max_sort_blocks FROM v$sort_segment ; |
Column |
Description |
CURRENT_USERS |
Number of active users |
TOTAL_EXTENTS |
Total number of extents |
USED_EXTENTS |
Extents currently allocated to sorts |
EXTENT_HITS |
Number of times an unused extent was found in the pool |
MAX_USED_BLOCKS |
Maximum number of used blocks |
MAX_SORT_BLOCKS |
Maximum number of blocks used by an individual sort |
臨時(shí)表空間的配置:
A、initial/next設(shè)置為sort_area_size的整數(shù)倍,允許額外的一個(gè)block作為segment的header
B、pctincrease=0
C、基于不同的排序需要建立多個(gè)臨時(shí)表空間
D、將臨時(shí)表空間文件分散到多個(gè)磁盤上
【編輯推薦】