程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 淺談Oracle優化排序的操作

淺談Oracle優化排序的操作

編輯:Oracle數據庫基礎

概念

服務器首先在sort_area_size指定大小的內存區域裡排序,如果所需的空間超過sort_area_size,排序會在臨時表空間裡進行。在專用服務器模式下,排序空間在PGA中,在共享服務器模式下,排序空間在UGA中。如果沒有建立large pool,UGA處於shared pool中,如果建立了large pool,UGA就處於large pool中,而PGA不在sga中,它是與每個進程對應單獨存在的。

PGA:program global area,為單個進程(服務器進程或後台進程)保存數據和控制信息的內存區域。PGA與進程一一對應,且只能被起對應的進程讀寫,PGA在用戶登錄數據庫創建會話的時候建立。

有關排序空間自動管理的兩個參數:

Pga_aggregate_target: 10M-4000G,等於分配給Oracle instance的所有內存減去SGA後的大小。

Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定義時才能設置為auto。

這兩個參數會取代所有的*_area_size參數。

措施:

盡可能避免排序;盡可能在內存中排序;分配合適的臨時空間以減少空間分配調用。

2、需要進行排序的操作:

A、創建索引;

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%’;
Sort(disk):要求Io去臨時表空間的排序數目
Sort(memory):完全在memory中完成的排序數目
Sort(rows):被排序的行數合計
Sort(disk)/ Sort(memory)<5%,如果超過5%,增加sort_area_size的值。

SELECT disk.Value disk,mem.Value mem,(disk.Value/mem.Value)*100 ratio

FROM v$sysstat disk,v$sysstat mem WHERE mem.NAME='sorts (memory)' AND disk.NAME='sorts (disk)';

4、監控臨時表空間的使用情況及其配置

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設置為sort_area_size的整數倍,允許額外的一個block作為segment的header

B、pctincrease=0

C、基於不同的排序需要建立多個臨時表空間

D、將臨時表空間文件分散到多個磁盤上

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved