淺談Oracle優(yōu)化排序的操作
概念
服務(wù)器首先在sort_area_size指定大小的內(nèi)存區(qū)域里排序,如果所需的空間超過sort_area_size,排序會在臨時表空間里進行。在專用服務(wù)器模式下,排序空間在PGA中,在共享服務(wù)器模式下,排序空間在UGA中。如果沒有建立large pool,UGA處于shared pool中,如果建立了large pool,UGA就處于large pool中,而PGA不在sga中,它是與每個進程對應(yīng)單獨存在的。
PGA:program global area,為單個進程(服務(wù)器進程或后臺進程)保存數(shù)據(jù)和控制信息的內(nèi)存區(qū)域。PGA與進程一一對應(yīng),且只能被起對應(yīng)的進程讀寫,PGA在用戶登錄數(shù)據(jù)庫創(chuàng)建會話的時候建立。
有關(guān)排序空間自動管理的兩個參數(shù):
Pga_aggregate_target: 10M-4000G,等于分配給oracle instance的所有內(nèi)存減去SGA后的大小。
Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定義時才能設(shè)置為auto。
這兩個參數(shù)會取代所有的*_area_size參數(shù)。
措施:
盡可能避免排序;盡可能在內(nèi)存中排序;分配合適的臨時空間以減少空間分配調(diào)用。
2、需要進行排序的操作:
A、創(chuàng)建索引;
B、涉及到索引維護的并行插入
C、order by或者group by(盡可能對索引字段排序)
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)控臨時表空間的使用情況及其配置
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 |
臨時表空間的配置:
A、initial/next設(shè)置為sort_area_size的整數(shù)倍,允許額外的一個block作為segment的header
B、pctincrease=0
C、基于不同的排序需要建立多個臨時表空間
D、將臨時表空間文件分散到多個磁盤上
【編輯推薦】