ORDER BY 在oracle中執行的大概過程

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

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

當系統整體負載不大時,Oracle傾向於為每個session的PGA分配optimal尺寸大小的SQL工作區。
當系統負載升高時,同時執行的SQL越來越多,Oracle就傾向於為每個人session的PGA分配onepass 尺寸大小的SQL工作區, 甚至multipass尺寸的SQL工作區。

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

相關文章