Bu yazimda Sql performans iyilestirme için ve veritabanina ulasimi optimize etmek amaçli kullanilan SQL optimizeri ana hatlari ile ve basit birkaç örnek vererek açiklamaya çalisacagim
Herhangi bir SQL sorgusu çalistirildiginda, istenilen bilgiye nasil ulasilacagina “Optimizer” adi verilen
veri tabani optimizasyon birleseni karar vermektedir. Oracle, kullanicilarina tahminler üzerine çalisan
“Rule-Based Optimizer” ve daha çok akil yürütme yöntemi ile çalisan “Cost-Based Optimizer” olmak
üzere iki adet optimizasyon seçenegi sunmaktadir.
Rule-Based Optimizer
Veri tabanina ulasilirken, Rule-Based Optimizer (RBO) ile önceden tanimlanmis kurallar seti
kullanilarak hangi yolun izlenecegine karar verilir. Burada bahsedilen kurallar “SELECT /*+ RULE
*/. . .” seklinde kullanilmaktadir ve böylece veri tabaninda hangi indeksin kullanilacagi gibi ek
bilgiler verilmektedir. Eger bu yöntem kullanilacaksa, RDBMS‘de asagidaki tanimlamalarin yapilmasi
gerekmektedir:
• INIT.ORA ya da SPFILE dosyasinda OPTIMIZER_MODE = RULE degisikligi yapilmalidir.
• ALTER SESSION SET OPTIMIZER_MODE = RULE komutu sistemde çalistirilmalidir.
Cost-Based Optimizer
Cost-Based Optimizer’in (CBO) Rule-Based Optimizer‘a göre daha kapsamli ve karisik bir çalisma
prensibi bulunmaktadir. Kullanilacak olan en iyi yöntemi belirlenirken, çesitli veri tabani bilgileri (tablo
boyutlari, kayit sayilari, verilerin dagilimi vs.) kullanilmaktadir.
Cost-Based Optimizer‘inin ihtiyaci olan veriyi saglamak için veri tabani objelerinin DBMS_STATS
prosedürü kullanilarak analiz edilmeleri ve istatistiklerinin toplatilmasi gerekmektedir. Eger bir tablonun
analizi yapilmamissa, Rule-Based Optimizer‘in kurallari kullanilarak yolu belirlenir. Ayni sorguda bazi
tablolar analiz edilmis ve bazilari analiz edilmemis ise, sistem öncelikli olarak Cost-Based Optimizer‘ini
kullanir. Eger bu yöntem kullanilacaksa; RDBMS‘de asagidaki tanimlamalarin yapilmasi
gerekmektedir:
• INIT.ORA/SPFILE dosyasinda OPTIMIZER_MODE = CHOOSE degisikligi yapilmalidir ve
sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin mevcut olmasi gerekmektedir.
• ALTER SESSION SET OPTIMIZER_MODE = CHOOSE komutu sistemde çalistirilmalidir ve
sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin mevcut olmasi gerekmektedir.
• ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS ( veya ALL_ROWS ) komutu
sistemde çalistirilmalidir ve sorgudaki tablolardan en az bir tanesinin istatistik bilgilerinin
hesaplanmis olmasi gerekmektedir.
SQL OPTIMIZASYON ÖNERILERI
Birden fazla sorgu kullanilmasi
Ö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 adli kaynaktan yararlanilmistir.