Oracle排序的時候在PGA中的分割原則是 ?

tolywang發表於2010-11-18

使用者在對Data進行排序的時候,會先在PGA裡完成,如果排序Data太多,PGA記憶體不足,則Oracle會將要排序的data分割成多份,只取一份放在PGA中排序,其他部分都交換到臨時表空間中。當PGA中的部分排序完畢後,將排好序的部分資料交換到臨時表空間中,同時再從臨時表空間中取一份沒有排序的資料放到PGA裡面進行排序,依此類推,直到將所有資料都排序完畢為止 。


PGA是給伺服器程式使用的記憶體區域,假設有200個session , 100個需要排序, PGA空間不足以容納所有需要排序的資料,那麼Oracle會分割這些資料為多份, 個人理解, 應該是類似於將100個session中需要排序的資料以session或transaction為單位
20個20個分割,或者50個50個進行分割, 不知道大家如何理解 ?

------------------ 

糾正一下onepass和multipass的理解:

某些session 的pga 大小可以滿足排序資料,那麼在自己的pga中就可以完成排序,這個稱為optimal; 某些session 的 PGA空間不足以容納這個 session 所有需要排序的資料,那麼Oracle會分割這個session中需要排序的資料為多份(分片),按照上面的方式在pga和temp中反覆排序和臨時存放。 最後在temp中做最後一次merge動作, 如果分片數量小於merge寬度(不知道是否是一個隱含引數) ,那麼一次merge即可完成,稱為 onepass ,  反之如果需要多次merge , 那麼是 multipass . 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-678456/,如需轉載,請註明出處,否則將追究法律責任。

相關文章