25 Kasım 2010 Perşembe

SQL OPTIMIZER NEDİR ?

Herhangi bir SQL sorgusu çalıştırıldığında, istenilen bilgiye nasıl ulaşılacağına “Optimizer” adı verilen
veri tabanı optimizasyon birleşeni karar vermektedir. Oracle, kullanıcılarına tahminler üzerine çalışan
“Rule-Based Optimizer” ve daha çok akıl yürütme yöntemi ile çalışan “Cost-Based Optimizer” olmak
üzere iki adet optimizasyon seçeneği sunmaktadır.
Rule-Based Optimizer

Veri tabanına ulaşılırken, Rule-Based Optimizer (RBO) ile önceden tanımlanmış kurallar seti
kullanılarak hangi yolun izleneceğine karar verilir. Burada bahsedilen kurallar “SELECT /*+ RULE
*/. . .”  şeklinde kullanılmaktadır ve böylece veri tabanında hangi indeksin kullanılacağı gibi ek
bilgiler verilmektedir. Eğer bu yöntem kullanılacaksa, RDBMS‘de aşağıdaki tanımlamaların yapılması
gerekmektedir:


•  INIT.ORA ya da SPFILE dosyasında OPTIMIZER_MODE = RULE değişikliği yapılmalıdır.
•  ALTER SESSION SET OPTIMIZER_MODE = RULE komutu sistemde çalıştırılmalıdır. 
Cost-Based Optimizer

Cost-Based Optimizer’ın (CBO) Rule-Based Optimizer‘a göre daha kapsamlı ve karışık bir çalışma
prensibi bulunmaktadır. Kullanılacak olan en iyi yöntemi belirlenirken, çeşitli veri tabanı bilgileri (tablo
boyutları, kayıt sayıları, verilerin dağılımı vs.) kullanılmaktadır.
Cost-Based Optimizer‘ının ihtiyacı olan veriyi sağlamak için veri tabanı objelerinin DBMS_STATS
prosedürü kullanılarak analiz edilmeleri ve istatistiklerinin toplatılması gerekmektedir. Eğer bir tablonun
analizi yapılmamışsa, Rule-Based Optimizer‘ın kuralları kullanılarak yolu belirlenir. Aynı sorguda bazı
tablolar analiz edilmiş ve bazıları analiz edilmemiş ise, sistem öncelikli olarak Cost-Based Optimizer‘ını
kullanır. Eğer bu yöntem kullanılacaksa; RDBMS‘de aşağıdaki tanımlamaların yapılması
gerekmektedir:
• INIT.ORA/SPFILE dosyasında OPTIMIZER_MODE = CHOOSE değişikliği yapılmalıdır ve
sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin mevcut olması gerekmektedir.
•  ALTER SESSION SET OPTIMIZER_MODE = CHOOSE komutu sistemde çalıştırılmalıdır ve
sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin mevcut olması gerekmektedir.
•  ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS ( veya ALL_ROWS ) komutu
sistemde çalıştırılmalıdır ve sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin
hesaplanmış olması gerekmektedir.

SQL OPTİMİZASYON ÖNERİLERİ
Birden fazla sorgu kullanılması

Önerilmez
 
SELECT name 
FROM   products 
WHERE  product_id = 1;

SELECT type_name 
FROM   product_type 
WHERE  product_type_id = 1;

 Önerilir

SELECT p.name, 
  pt.type_name 
FROM   products p, 
  product_type pt 
WHERE  p.product_type_id = pt.product_type_id  
   AND p.product_id = 1;

 Önerilmez

SELECT product_id, 
  product_type_id, 
  name
FROM   products
UNION 
SELECT product_id, 
     product_type_id, 
  name
FROM   more_products;

 Önerilir

SELECT product_id, 
  product_type_id, 
  name
FROM   products
UNION ALL
SELECT product_id, 
  product_type_id, 
  name
FROM   more_products;
 
* not: sql  tunning adlı kaynaktan yararlanılmıştır.

Hiç yorum yok:

Yorum Gönder