Monday, June 8, 2009

SQL TUNING

Sql Tuning (SQL ayarlama) en kaba anlamı ile sql sorgularının performası denebilir. Sistem kullanımı yada cevap süresi gibi denebilir. Yazdığımzı kodun etkili bir şekilde çalişması gereksiz erişimler yapmaması yada gereksiz kullanılmayan select ler yapmaması gibi sıralayabiliriz. Where sorgusunu nasıl kullanmalı yada join işlemleri yaparken neler yapılmalı gibi bir dünya şey bunun içine giriyor. bu başlık atında bunlardan bazılarına değinmeye çalışacağim

* Automated Maintenance Tasks ile istatistik toplama konusunda çok güzel açiklama http://www.oraclefaq.org/?p=17

* Veritabanı bağlantısından olabildiğince kaçının. Yeni bir database bağlantısı gerçekten yavaş çalişan bir işlemdir.

*Index kullanmaya çok hevesli olmamak gerekiyor. Ayrıca kullanılan index tipide önemli. Bitmap ile indexlenmiş olandan sütünda çok farklı değerlerin olması gibi mesela.

aynı değerlerin tekrar etmesi mantıllıdır. Kadın erkek gibi yada var yok gibi. http://www.dba-oracle.com/art_9i_indexing.htm burada index tiplerini açikliyor.

-b-tree index

-bitmap indexes

-Function-based indexes

*Where kalıbında kullanılan eleme işlemlerinde ilk elemenin olabildiğince çok satir elemesine dikkat etmek gerekiyor. İlk başta çok satir eleyelim ki diğer AND lerde daha az satir ile muhattap olalim değil mi?

*İndex kullanırken diyelim ki 1.000.000 satırlık bir tablodan 40-50 yada ne bileyim 500-1000 satir çekecek isek bunu index ile halletmek mantıklı ama biz buradan 50.000 satir çekecek isek buradan index kullanmak yerine tabloyu tam tarama(full table scan) yapmak daha mantıklı boşuna birde index alanına erişmenin manası yok. zaten bi dünya satir getireceğim. Daha önce dediğim gibi çok buyuk bir tablodan az sayıda satir dönecek ise index kullanmak kaçınılmazdır.

*index kullanacağımız tabloların çok fazla insert update ve delete işlemine maruz kalması iyi değildir. Çünkü tablomuzun içeriği sürekli değiştiği için bu değşiiklilerin indexlere de aktarılması gerekiyor. İndexlere aktarma yaparken index tablosunun komple değişmesi yada uygun algortima ile değiştirilmesi performans sıkıntısına yol açar. Kısacası indexleri çok değişen tablolarda kullanmayın.

*Partition kullanın büyük avantajlar sağlayacaktır.

* union işlemi sıralama yapar eğer sıralamaya ihtiyacınız yok ise union all kullanın. Neden Union All işleminin sıralama yapmayacağını merak ediyor iseniz cevabı basit ve açik. Union işlemi tekrarlı satırları eliyor ama Union All işlemi tekaraları satırları göstertiğin için sıralama yapmıyor.

*Index yaratırken Create Index ile beraber Compute Statistics kullanarak index yaratma esnasında istatistik toplayarak sonraki sıralama işlemlerini elersiniz. (Bunu tam olarak bende anlamadim ama böle bişey varmış içeriğinine bakmak lazım)

*Trigger kullanırken çok dikkatli olmak gerek gerekiyor. Ne demiş atalarımız fazla merak iyi değildir. :))

*Bir database de birden fazla disk olmasımı iyidir yoksa tek bir disk olmasımı iyidir sorusunun cevabı çok disk olmasıdır. Database i birden fazla diske bölmek ve bu diskleri erkili bir şekilde yönetmek gerekir. tek bir diskten farklı verileri çekmekten ise dağınık disklerden çekmek daha iyidir. Dağınık veritabanlari gibi düşünebiliriz. sürekli kullandığın veriyi ana makinadan cekmektense local makinayi kullan gibi (tam açiklamayamadim ama öle bişey işte bu mimarinin bir adi vardi dilimin ucunda çikmadi gitti.)

*Paralellik kulanmaktan çok fazla kaçınmayın imkan varsa kullanın

*LIKE kullanmaktan kaçının ve bunun benzerlerinden

No comments: