sql調優
oracle的sql調優是乙個複雜的主題,甚至是需要整本書來介紹oracle sql調優的細微差別。不過有一些基本的規則是每個oracle dba都需要跟從的,這些規則可以改善他們系統的效能。sql調優的目標是簡單的:
. 消除不必要的大表全表搜尋:不必要的全表搜尋導致大量不必要的i/o,從而拖慢整個資料庫的效能。調優專家首先會根據查詢返回的行數目來評價sql。在乙個有序的表中,如果查詢返回少於40%的行,或者在乙個無序的表中,返回少於7%的行,那麼這個查詢都可以調整為使用乙個索引來代替全表搜尋。對於不必要的全表搜尋來說,最常見的調優方法是增加索引。可以在表中加入標準的b樹索引,也可以加入bitmap和基於函式的索引。要決定是否消除乙個全表搜尋,你可以仔細檢查索引搜尋的i/o開銷和全表搜尋的開銷,它們的開銷和資料塊的讀取和可能的並行執行有關,並將兩者作對比。在一些情況下,一些不必要的全表搜尋的消除可以通過強制使用乙個index來達到,只需要在sql語句中加入乙個索引的提示就可以了。
. 在全表搜尋是乙個最快的訪問方法時,將小表的全表搜尋放到捍嬤校饔拋矣ω萌繁s幸桓鱟諾氖蓴撼逵公尺饜謝撼濉t貟racle7中,你可以使用alter table *** cache語句,在oracle8或以上,小表可以被強制為放到keep池中緩衝。
. 確保最優的索引使用 :對於改善查詢的速度,這是特別重要的。有時oracle可以選擇多個索引來進行查詢,調優專家必須檢查每個索引並且確保oracle使用正確的索引。它還包括bitmap和基於函式的索引的使用。
. 確保最優的join操作:有些查詢使用nested loop join快一些,有些則是hash join快一些,另外一些則是sort-merge join更快。
這些規則看來簡單,不過它們佔sql調優任務的90%,並且它們也無需完全懂得oracle sql的內部運作。以下我們來簡單概覽以下oracle sql的優化。
我們首先簡要檢視oracle的排序,並且看一看排序操作是如何影響效能的。
調整oracle的排序操作
排序是sql語法中乙個小的方面,但很重要,在oracle的調整中,它常常被忽略。當使用create index、order by或者group by的語句時,oracle資料庫將會自動執行排序的操作。通常,在以下的情況下oracle會進行排序的操作:
使用order by的sql語句
使用group by的sql語句
在建立索引的時候
進行table join時,由於現有索引的不足而導致sql優化器呼叫merge sort
當與oracle建立起乙個session時,在記憶體中就會為該session分配乙個私有的排序區域。如果該連線是乙個專用的連線(dedicated connection),那麼就會根據init.ora中sort_area_size引數的大小在記憶體中分配乙個program global area (pga) 。如果連線是通過多執行緒伺服器建立的,那麼排序的空間就在large_pool中分配。不幸的是,對於所有的session,用做排序的記憶體量都必須是一樣的,我們不能為需要更大排序的操作分配額外的排序區域。因此,設計者必須作出乙個平衡,在分配足夠的排序區域以避免發生大的排序任務時出現磁碟排序(disk sorts)的同時,對於那些並不需要進行很大排序的任務,就會出現一些浪費。當然,當排序的空間需求超出了sort_area_size的大小時,這時將會在temp表空間中分頁進行磁碟排序。磁碟排序要比記憶體排序大概慢14,000倍。
上面我們已經提到,私有排序區域的大小是有init.ora中的sort_area_size引數決定的。每個排序所占用的大小由init.ora中的sort_area_retained_size引數決定。當排序不能在分配的空間中完成時,就會使用磁碟排序的方式,即在oracle例項中的臨時表空間中進行。
磁碟排序的開銷是很大的,有幾個方面的原因。首先,和記憶體排序相比較,它們特別慢;而且磁碟排序會消耗臨時表空間中的資源。oracle還必須分配緩衝池塊來保持臨時表空間中的塊。無論什麼時候,記憶體排序都比磁碟排序好,磁碟排序將會令任務變慢,並且會影響oracle例項的當前任務的執行。還有,過多的磁碟排序將會令free buffer waits的值變高,從而令其它任務的資料塊由緩衝中移走。
接著,讓我們看一下oracle的競爭,並且看一下表的儲存引數的設定是如何影響sql update和insert語句的效能的。
Oracle專家調優秘密(二)
sql調優 oracle的sql調優是乙個複雜的主題,甚至是需要整本書來介紹oracle sql調優的細微差別。不過有一些基本的規則是每個oracle dba都需要跟從的,這些規則可以改善他們系統的效能。sql調優的目標是簡單的 消除不必要的大表全表搜尋 不必要的全表搜尋導致大量不必要的i o,從而...
Oracle專家調優秘密 一
前言 在過去的十年中,oracle已經成為世界上最專業的資料庫之一。對於it專家來說,就是要確保利用oracle的強大特性來提高他們公司的生產力。最有效的方法之一是通過oracle調優。它有大量的調整引數和技術來改進你的oracle資料庫的效能。oracle調優是乙個複雜的主題。關於調優可以寫整整一...
Oracle專家調優秘密(三)
調整oracle的競爭 oracle的其中乙個優點時它可以管理每個表空間中的自由空間。oracle負責處理表和索引的空間管理,這樣就可以讓我們無需懂得oracle的表和索引的內部運作。不過,對於有經驗的oracle調優專家來說,他需要懂得oracle是如何管理表的extent和空閒的資料塊。對於調整...