當建立同oracle會話時,會在伺服器
記憶體中劃分出乙個專門用來排序的區域,從而為會話提供排序空間。但是,這個排序空間畢竟有限,若記錄數量超過這個排序空間的話,就需要進行磁碟排序。但是,我們都知道,磁碟排序的執行速度要比記憶體排序的執行速度慢1400倍。而且,磁碟排序會消耗臨時表空間的資源,並且可能影響到正在進行的其他sql排序,因為oracle必須為臨時表空間中的資料塊分配緩衝池。而且,過多的磁碟排序會導致空閒緩衝等待,以及將執行其他任務的資料塊從緩衝池中分頁出去。對於資料庫管理員來說,在記憶體中進行排序總是比磁碟排序更受歡迎。所以說,磁碟排序是影響oracle資料庫效能的罪魁禍首。
在資料庫優化的時候,我們應該想法設法降低資料庫的磁碟排序。為此,筆者有如下建議。
一、合理設定sort_area_size引數
雖然說oracle10g以後的資料庫會自動對記憶體進行管理。但是,在一些效能要求比較高或者排序頻率比較高的資料庫中,仍然有必要對一些影響記憶體分配的引數進行調整。其中,最重要的乙個引數就是sort_area_size。
oracle資料庫會為所有的鏈結oracle會話分配sort_area_size這個引數。所以,對於擁有大量使用者的資料庫來說,如果增加這個引數的值,會讓磁碟排序的機率明顯降低,不過資料庫也要為此付出這個代價,很容易導致記憶體過載。但是,如果這個引數的值設定的過低的話,又會導致過多的磁碟排序。
所以,這個引數並不是越大越好。因為這個引數如果設定的過大的話,其帶來的效能收益反而會降低。因為為了提高有限幾個查詢的速度,可能會浪費大量的記憶體。這無疑是我們資料庫管理員不希望看到的。
在實際工作中,我們往往需要在兩者之間進行乙個均衡。設定乙個合理的引數,盡量讓資料庫減少磁碟排序的機率,同時也不能使得伺服器記憶體過載。
為此筆者有乙個建議。資料庫管理員應該每隔一段時間增加這個引數的值,並使用statspack工具定時監控記憶體排序與磁碟排序的資料。在起初進行調整的時候最好每個小時查詢一次。通過這些資料,我們就可以得到乙個合理的引數值,在兩這之間取得乙個均衡。
前期調整完成後,在後期仍然需要進行監控。因為後期隨著企業應用的改變,這個引數仍然需要根據實際情況進行調整,以提高資料庫的效能。
二、儘量減少不必要的排序
在某些情況下,儘管資料庫管理員沒有直接通過order by等語句對資料庫記錄進行排序,可是oracle資料庫伺服器仍然會對查詢結果進行排序。因為這些語句需要起作用,必須要先對資料進行排序。所以,他們往往帶有隱性的排序功能。
我們在資料庫維護或者前台應用程式設計的時候,要盡量的減少這種不必要的排序。如distinct關鍵字,它的作用就是取消重複的記錄。但是,要實現這個目的的話,則資料庫必須要先對記錄進行排序,然後才能夠去除重複的記錄內容。故在設計的時候,盡量要避免使用distinct關鍵字。其實,筆者在工作中,經常會碰到這種情況,某些記錄其實不存在重覆記錄,但是程式開發人員為了保障資料的準確性,就在sql語句中加入了distinct關鍵字,從而造成了不必要的排序。
另外,在其他一些情況下,也會導致不必要的排序。如排序合併連線,也會導致不必要的排序。故無論何時,只要使用了排序合併連線,就會執行排序已連線關鍵值。故在資料庫與應用程式設計的時候,要盡量避免排序合併連線。其實,在許多情況下,巢狀迴圈連線反而使更好的選擇。因為這個巢狀迴圈連線,它更加有效而且不會導致不必要的排序以及不比要的全表掃瞄。
其次,有時候缺失索引也會導致一些並不要的排序。
故資料庫管理員在平時的工作中,要盡量的減少這些不必要的排序,以讓寶貴的記憶體資源交給更重要的任務來適用。
磁碟排序對Oracle資料庫效能的影響
磁碟排序對oracle資料庫效能的影響 當建立同oracle 會話時,會在伺服器 記憶體中劃分出乙個專門用來排序的區域,從而為會話提供排序空間。但是,這個排序空間畢竟有限,若記錄數量超過這個排序空間的話,就需要進行磁碟排序。但是,我們都知道,磁碟排序的執行速度要比記憶體排序的執行速度慢1400倍。而...
oracle資料庫效能影響之Sql parse
1,sql parse的種類 sql parse又通常分為硬解析和軟解析,當sql第一次執行的時候,會發生硬解析,之後的執行如果在shared pool中能找到就是軟解析。因此,為提高資料效能,盡可能的讓每次執行的sql在shared pool找到。2,sql在哪些情況下會傳送硬解析?1 統計 資訊...
oracle資料庫效能影響之Sql parse
1,sql parse的種類 sql parse 又通常分為硬解析和軟解析,當sql第一次執行的時候,會發生硬解析,之後的執行如果在shared pool中能找到就是軟解析。因此,為提高資料效能,盡可能的讓每次執行的sql在shared pool找到。2,sql在哪些情況下會傳送硬解析?統計資訊改變...