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