Thursday, May 24, 2012

EDS5 ile Daha Hızlı Sorgulama

Yıllardır EDS kullanan müşterilerimizde, büyüyen veri bankalarının doğal bir sonucu olarak, sorgulamaları yavaşlamaktadır. EDS dönemsel aktarım yapmamaktadır, üretim mantığında senelik veri ile çalışmak çok uygun düşmez. Gerek ürün bilgilerinin yıllarca kullanılabilmesi, gerekse rezervasyon gibi süreklilik arzeden ilişkiler sayesinde bir devri kapatıp, veriyi silmek ve küçültmek mümkün olmuyor.

İşin doğrusu 2004 yılından beri EDS4 ile çalışan müşterilerimiz içinde bugün 8 -10 GB boyutlara gelen veritabanları mevcut. Bu durum pek değişecek gibi gözükmüyor, bu nedenle başka bir yaklaşım izleyerek sorgulamalardaki yükü azaltmak gerekiyor.

EDS5 ile beraber sorgulamanın hızlanması için hem alt düzeyde hem de programsal olarak etkili geliştirmeler yapıyoruz.

  1. Veritabanı sıkıştırma. Veritabanından veri silinmesine karşın fiziksel büyüklüğü ve veri dağınıklığı giderek artar ve yavaşlamaya neden olur. MsSQL yedekleme sırasında yapılacak SHRINK işlemi bu sorunu giderir. 
  2. Indeks İhtiyacı Tespit ve Oluşturma. Hazırladığımız yardımcı bir program sayesinde, her firmanın kullanımına göre değişen tablo ve saha bazında indeksleme otomatik olarak yapılmaktadır.
  3. Yeniden Indeks Oluşturma. Bazen görünürde indeks olmasına karşın, bu indekslerin de fiziksel bozulmaları nedeni ile görev yapamaz hale gelmektedir. Indeksleri taranıp yeniden oluşturularak, hızlandırılır, kitlenmelere ve Dead Lock tarzı hatalara büyük oranda engel olunur.
Programsal olarak yapılabilecekler ise daha zorlu bir süreç gerektiriyor. 
  1. ERM platformu bazında dataset'te Dinamik SQL optimizasyonu (DSO) konusun bir kaç yıl önce sadece hayallerimizi süslüyordu. Bugün yaklaşık bir yıllık geliştirmenin sonucunda dinamik SQL özelliği EDS5'e kazandırıldı. Kullanıcı ekranda saha ayarlarını yaptığında aslında yüzlerce sahayı kapatır. Bu sahalar görünmese dahi arka planda SQL cümlesi sabit olduğunda sorgulama süresini ciddi bir şekilde yavaşlatan bir işyükü (işlemci, bellek, ağ hızı) getirmektedir. Halbuki DSO özelliği ile kullanıcının her saha seçiminde gelmesi gereken sahalar ve sahaları oluşturan join ve fonksiyonlar taranıyor ve gereksiz SQL bölümleri tamamen çıkarılarak, sorgu hafifletiliyor. Fark inanılmaz. Sipariş Seçim sayfası gibi ana sayfalarda onlarca kat hızlanma sağlandığını gördük.
  2. Bazen zorunlu olarak bir çok subquery içeren sorguları listelemek zorunda kalıyoruz. Buna en uygun örnek Satınalma Kontrol sayfasıdır. Bu sayfada ondan fazla ham madde hareket ile ilişkili yüz binlerce kaydı tarayan sahalar mevcuttur. Bu sahaları fonksiyon olarak sorguya eklediğinizde en iyi sistemlerde bile dakikalara varan beklemelere neden olur. Buradaki çözüm yaklaşımımız ise bu sahaları fiziksel veri haline dönüştürmek ve özel bir trigger tekniği ile kayıt bazında güncellemeyi tetiklemektir. Bu sayede yüksek hesaplama gerektiren tablolardan anlık sorgulama yapılması mümkün olmaktadır.
  3. Geciktirilmiş güncelleme (Delayed Scroll, Delayed Details) tekniğini de ilişkili tabloların bulunduğu ekranlarda kullanıyoruz. EDS5 'den önce çok az kullandığımız bu teknik sayesinde hızlı kayıt geçişleri sağlanıyor. 200 ms gibi bir tepki süresi ile alt kayıtlar gecikmeli olarak güncelleniyor. Böylece gereksiz yüzlerce sorgulama zamanından tasarruf ediliyor, Ekran açılışları ve kayıtlar arası geçiş (cursor scroll) daha hızlı tepki veriyor, hafifliyor.
  4. Gereksiz sorgu ve kontrolleri mümkün olduğu kadar koddan temizledik.
Arka planda daha pek çok küçük iyileştirme yapılmaya devam ediyor. Ana konular ise yukarıda özetlendiği gibi ciddi performans farkları yaratıyor. Uygulama için hayati önem taşıyor, çünkü EDS müşterimizin hayatının bir parçası. Ne kadar hızlı ve kolay kullanımlı olursa sonuçları da o oranda memnuniyet verici oluyor.

Bu önlemler sayesinde EDS5 açılış süreleri hızlandı ve kullanımı oldukça keyifli bir hale geldi.


No comments: