Oracle資料庫SQL語句效能調整的基本原則 (3)
在全表搜尋是一個最快的訪問方法時,將小表的全表搜尋放到快取中,調優專家應該確保有一個專門的資料緩衝用作行緩衝。在Oracle7中,你可以使用altertablexxxcache語句,在Oracle8或以上,小表可以被強制為放到KEEP池中緩衝。
確保最優的索引使用:對於改善查詢的速度,這是特別重要的。有時Oracle可以選擇多個索引來進行查詢,調優專家必須檢查每個索引並且確保Oracle使用正確的索引。它還包括bitmap和基於函式的索引的使用。
確保最優的JOIN操作:有些查詢使用NESTEDLOOPjoin快一些,有些則是HASHjoin快一些,另外一些則是sort-mergejoin更快。
這些規則看來簡單,不過它們佔SQL調優任務的100%,並且它們也無需完全懂得OracleSQL的內部運作。以下我們來簡單概覽以下OracleSQL的優化。
我們首先簡要檢視Oracle的排序,並且看一看排序操作是如何影響效能的。
調整Oracle的排序操作
排序是SQL語法中一個小的方面,但很重要,在Oracle的調整中,它常常被忽略。當使用createindex、ORDERBY或者GROUPBY的語句時,Oracle資料庫將會自動執行排序的操作。通常,在以下的情況下Oracle會進行排序的操作:
使用Orderby的SQL語句
使用Groupby的SQL語句
在建立索引的時候
進行tablejoin時,由於現有索引的不足而導致SQL優化器呼叫MERGESORT
當與Oracle建立起一個session時,在記憶體中就會為該session分配一個私有的排序區域。如果該連線是一個專用的連線(dedicatedconnection),那麼就會根據init.ora中sort_area_size引數的大小在記憶體中分配一個ProgramGlobalArea(PGA)。如果連線是通過多執行緒伺服器建立的,那麼排序的空間就在large_pool中分配。不幸的是,對於所有的session,用做排序的記憶體量都必須是一樣的,我們不能為需要更大排序的操作分配額外的排序區域。因此,設計者必須作出一個平衡,在分配足夠的排序區域以避免發生大的排序任務時出現磁碟排序(disksorts)的同時,對於那些並不需要進行很大排序的任務,就會出現一些浪費。當然,當排序的空間需求超出了sort_area_size的大小時,這時將會在TEMP表空間中分頁進行磁碟排序。磁碟排序要比記憶體排序大概慢14,000倍。
上面我們已經提到,私有排序區域的大小是有init.ora中的sort_area_size引數決定的。每個排序所佔用的大小由init.ora中的sort_area_retained_size引數決定。當排序不能在分配的空間中完成時,就會使用磁碟排序的方式,即在Oracle例項中的臨時表空間中進行。
磁碟排序的開銷是很大的,有幾個方面的原因。首先,和記憶體排序相比較,它們特別慢;而且磁碟排序會消耗臨時表空間中的資源。Oracle還必須分配緩衝池塊來保持臨時表空間中的塊。無論什麼時候,記憶體排序都比磁碟排序好,磁碟排序將會令任務變慢,並且會影響Oracle例項的當前任務的執行。還有,過多的磁碟排序將會令freebufferwaits的值變高,從而令其它任務的資料塊由緩衝中移走。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-264847/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫SQL語句效能調整的基本原則 (2)Oracle資料庫SQL
- Oracle資料庫SQL語句效能調整的基本原則 (1)Oracle資料庫SQL
- 【資料操作】SQL語句效能調整原則SQL
- SQL語句效能調整原則(zt)SQL
- Oracle效能調整之--DML語句效能調整Oracle
- ORACLE sql 語句的執行過程(SQL效能調整)OracleSQL
- oracle資料庫的效能調整Oracle資料庫
- oracle資料庫的效能調整(轉)Oracle資料庫
- sql 正則替換資料庫語句!SQL資料庫
- SQL Server SQL語句進行優化的基本原則SQLServer優化
- Oracle 資料庫監控SQL語句Oracle資料庫SQL
- Oracle SQLT 診斷SQL語句效能(3)OracleSQL
- SQL Server SQL語句進行優化的基本原則 (轉)SQLServer優化
- Oracle效能調整-3(轉)Oracle
- 【資料庫】SQL語句資料庫SQL
- Oracle高效能SQL調整OracleSQL
- Oracle資料庫效能調整 - 建議器 ADVICEOracle資料庫
- 資料庫效能優化之SQL語句優化資料庫優化SQL
- mysql資料庫sql語句基礎知識MySql資料庫
- 資料庫常用的sql語句大全--sql資料庫SQL
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- oracle資料庫:耗cpu sql語句優化Oracle資料庫SQL優化
- Oracle資料庫維護常用SQL語句集合Oracle資料庫SQL
- oracle資料庫巡檢(一)基本sql語句Oracle資料庫SQL
- 資料庫常用sql 語句資料庫SQL
- 資料庫SQL拼接語句資料庫SQL
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- ORACLE資料庫體系框架介紹及SQL語句效能探討(轉)Oracle資料庫框架SQL
- Oracle 資料庫引數調整Oracle資料庫
- 找到Oracle資料庫中效能最差的查詢語句BSOracle資料庫
- 資料庫常用操作SQL語句資料庫SQL
- SQL資料庫連線語句SQL資料庫
- oracle資料庫常用語句Oracle資料庫
- Oracle資料庫語句大全Oracle資料庫
- Oracle - 資料庫的記憶體調整Oracle資料庫記憶體
- Oracle資料庫9i在AIX環境下的效能調整Oracle資料庫AI
- 資料庫常用的sql語句彙總資料庫SQL
- 資料庫巡檢常用的SQL語句資料庫SQL