Bugün, Oracle veritabanlarında karşılaşılan ve ne yazık ki çalışıp sonucunu görmeden önce tespit edilmesi pek mümkün olmayan bir olaya(soruna) değineceğiz.

“Execution plan” neden değişiyor? Bu konuyu teknik detaya inmeden açıklamaya çalışalım.

Oracle veritabanı, mimarisi gereği gelen sorgular için önce bir “Execution plan” belirleyip, sorguları o plana göre çalıştırıyor.

“Execution plan”, adı üzerinde olduğu gibi, sorguların nasıl çalışacağını gösteren “çalışma planı”dır. Yani, hangi joinleri kullanacak, indexleri nasıl kullanacak, tabloya full mü gidecek gibi soruların cevabını anlık sürelerde tespit edip, bu cevaplara göre sorgunun maliyetini(cost) hesaplayıp, sorguları o plana göre çalıştırma (execute) kararını vermesidir.

Konunun günlük hayata yansımasından bahsedelim biraz.

Konu, değişik formatlarda sıkça karşımıza çıkmaktadır:

  1. Bu sorgu 2 gündür normalden uzun sürelerde çalışıyor. Neden olabilir? (bu soru, doğru soru)
  2. Bizim şu tabloların istatistiğini/planlarını değişmeyecek şekilde ayarlayabilir misiniz? (bu soru, konuyu hiç bilmeyenlerin sorusu)
  3. Indexlerin planı mı bozuldu acaba, doğru planı ayarlayabilir misiniz? (bu soru, konuyu duymuş ama konuyu anlamadığı için kendince yorumlayanların sorusu)

Şimdi execution plan neden değişir, ona cevap arayalım.!

Oracle, sorgularınızı çalıştırırken, objelerin(tablo, index) istatistiğine bakar. İstatistik dediğimiz şey, objelerin güncel bilgilerini(kayıt sayısı, kayıt dağılımı vs) tutar.

Eğer objelerin istatistiği eski kalmışsa, tabloda kısa zamanda çokça değişiklik olduysa(insert,delete vs), objelerin yapısı değiştiyse(kolon ekle-çıkar), indexlerde ekleme çıkarma olduysa, patch güncellemesi olduysa gibi nedenlerden dolayı, sorgularınızın çalışma planının değişmesi çok muhtemel.

Özetleyecek olursak; Oracle, sorgularınızın daha performanslı çalışacağını düşündüğü için planlarında değişiklikler yapıyor. Ama, yukarda saydığımız nedenlerden dolayı her zaman doğru tahmini yapamayabiliyor.

Peki DBA’leriniz bu duruma karşı nasıl önlem alabilir?

DBA’lerinizin, tahmin edilmesi çok zor olan bu konuda pro-aktif olarak yapacakları biraz sınırlı ne yazık ki:

  • Günlük ya da haftalık olarak, istatistiği eski kalan objelere analiz geçiyorlardır. En etkin çözüm bu.
  • Sorgularınıza uygun şekilde, partitionları, indexleri vs oluşturup, gereksiz indexleri temizleyebilirler.
  • DB’de etkisi olabilecek bazı parametreleri düzenleyebilirler.

Şimdi konuyu biraz anladığınızı düşünerek, DBA’lerinize bu konuyla ilgili şikayetlerle gitmeden önce, onlardan beklentilerinizde daha anlayışlı olabilirsiniz.

Anlayışınız için teşekkürler 🙂