熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

關於排序、sort

2013-11-13 22:20:24  來源: Oracle 

  簡單陳述一下
  
  針對每個session排序首先會使用sort_area_size 如果不足則會使用臨時表空間但這裡面又到底是怎麼一個過程呢?下面闡述一下也許對大家有用處(如果有什麼不清楚或者不恰當的地方歡迎大家探討)
  
  假設sort_area_size = k正好能盛下條記錄進行排序
  
  當排序記錄小於等於ok所有排序在內存中進行很快
  但若超過則會使用臨時表空間(利用磁盤進行)
  我們選取一個臨界值來說明假設需要排序的記錄有
  
  這個時候我們進行的排序會分為組進行
  每讀條進行一次小組排序然後寫入磁盤組只有排序後也寫入磁盤
  
  這是進行第二次排序這次排序將在前小組裡面各抽取一條進行排序《按照我個人的猜測應該是排好後每寫入一條入磁盤則將該記錄所在小組重新抽取一條出來進行排序(這時是有序記錄組裡面所以很快)》當這個過程完成後這時所需要的磁盤空間大約為 實際記錄存儲空間的倍(這也是多數書上提到的排序空間大約是記錄空間的倍的原因)
  
  由於還剩下條記錄於是這條記錄需要跟前面排序的條記錄進行排序合並這個代價也是相當大的!
  
  所以我們通常推薦假如你需要排序的記錄最大為萬條則sort_area_size最小要能裝下否則如上面的例子那多余的僅僅條將會帶來巨大的代價!
  
  如果設置的極度不合理的情況下排序記錄達到了 sort_area_size所能容納的三次方以上比如上面例子中排序需要萬記錄
  那麼同樣的重復這個過程當每一萬條記錄如上排序後再如上從這小組(每組條記錄)各抽一條進行排序……
  
  在這個過程中磁盤的消耗和時間的代價大家都應該有個感性認識了
  所以我們建議 sprt_area_size 所能容納記錄數至少大於排序記錄數的 平方根
  
  oracle文檔
  
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/18815.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.