Microsoft SQL Query optimizasyonu nasıl yapılır konusunda kısa bir bölme sizlerle paylaşacağım. SQL query sonuçlarının hızlı yüklenmesini sağlayan index yapısı gibi birçok konuya bu yazımızda değineceğiz. Fill Factor, Statistics, Fragmentation ve maaliyet kısımlarından bahsedeceğiz. Query hızlarımızı arttırmamız için önemli olacak noktalara değineceğiz.

Fiil Factor Nedir ve Nasıl Bulunmaktadır?

Öncellikle Fill Factor ne demektir ve sql için önemi nedir onu açıklayalım. SQL yapısında performansı arttırmak için index yapıları disklerde page olarak saklanmaktadır. Fill Factor kısaca bu page yapısının doluluğunu seçmektedir. Örnek olarak %70 seçersek eğer sayfa yapısında 1000 kayıt girileceğine 700 kayıt girilmektedir. 300 kayıtlık alan boş kalmaktadır. Fill Factor yapısında seçimimiz doluluk olacaktır. Bu sayede tüm sayfa doldurulmaz ve yeni gelen kayıtlar araya girebilmektedir.

Örnek olarak tarih bazlı insert işlemi yapıyorsunuz. Gelen verilerde eski tarihli veri var eğer sayfa yapısı tamamen doluysa verinin girebileceği yer kalmamıştır. Bu yüzden index yapısında bozulmalar başlar. Bu nedenle de query hızlarında düşüklüğüne neden olmaktadır. Fakat fill factor ayarlaması yapıldığında %70 ayarlanma yapıldığında index yapısında bozulmalar daha geç oluşur. Index bozulmaları fragmentation konusuna birazdan değineceğiz.

Peki Fill Factor Nereden Değiştirilmektedir.

Microsoft SQL Query Optimizasyonu Fill Factor

Management Studio dan tablo veya view index kısmında Options içerisinde ayarlamasını yapabilirsiniz.



ALTER TABLE [dbo].[_394_CONTROLLER_DATA] ADD  CONSTRAINT [_394_CONTROLLER_DATA_AK] UNIQUE NONCLUSTERED 
(
	[DeviceID00] ASC,
	[MachineID] ASC
)WITH ( FILLFACTOR = 80) ON [PRIMARY]
GO


Ya da query ile oluşturmak istenildiğinde WITH ile yapılabilmektedir.

Peki Performansa etkisi , artıları ve eksileri nelerdir ?

Artıları

  • Insert yapıldığında sayfa yapısındaki bozulmalar azalacaktır.
  • Index fragmentation da azalmalar başlayacaktır.

Eksileri

  • Daha fazla page oluşacağı için disk kullanımı artacaktır.
  • Ram kullanımında düşmeler olacaktır. Çünkü daha fazla cache oluşacağı için Ram boşa kullanılmış olmaktadır.
  • Reconfigure index ile fill factor değerinin ayarlamazsınız.

Sonuç olarak evet performansa etkileri bazı tablolar veya viewlar için etkileri görünmektedir. Fakat dikkatli kullanılmazsa problemlerle karşılaşabilirsiniz. Bu sebepten verilerinizin indexlerinin düzenli bakımlarını veya izlemeye alın. Yukarıdaki artı ve eksileri göz önünde bulundurun ve ona göre ayarlama yapın. Reconfigure index ile fill factor değerinin ayarlamazsınız. Bunu da göz önünde kesinlikle bulundurun.

Fill Factor kontrolü nasıl yapılmaktadır.

Öncellikle daha önceki resimde gösterdiğimiz yerden veya query yardımıyla görebilmekteyiz.

select * from sys.indexes where fill_factor <>0

Burada özellikle fragmentation kısmına el atmak istiyorum.

Fragmentation Nedir?

Fragmentation kısaca indexin bozulma oranıdır. Yani indexlerinizin yapısındaki değişikler yüzünden oluşan bozulmalardır. Bu bozulmaları görmek için çeşitli yöntemler vardır. Öncelikle management studiodan nasıl görünmektedir. Index properties de Fragmentation kısmı’na ait tüm bilgiler bulunmaktadır.

Microsoft SQL Query Optimizasyonu Fragmentation

Ayrıca Query ile de bulabilirsiniz.


SELECT 
T.NAME AS TABLENAME,
I.name AS INDEXNAME,
(SELECT avg_fragmentation_in_percent FROM sys.dm_db_index_physical_statS (DB_ID(),T.object_id,I.index_id,0,NULL)) AS FRAGMENTATION


 
 FROM SYS.tables T
INNER JOIN SYS.indexes I ON I.object_id=T.object_id

WHERE T.name='Tablo Adı'


 

Fragmentation indexin kalbidir. Düzenli olarak takibi yapılmalıdır. Bozulmaların yüksek olması ( %50 -%70) üzeri olması query hızlarında çok yavaşlıklara neden olmaktadır. Sistemlerimiz için bu detaylar gayet önem taşımaktır.

Peki Fragmentation yüksek olan indexler için hangi yöntemlere başvurulabilmektedir.

  • Index rebuild
  • Index Reorganize
  • Fill Factor Değerleri

Microsoft SQL Query Optimizasyonu İstatistik Kısımlarının Önemi Nedir?

Sql yapısında kullanılan indexler zamanla istatistik oluşturmaya başlamaktadır. Bu istatistikler aslında şunu ifade etmektedir. Örnek olarak Primary keyiniz var ve istatistik tutarak o primary keyinize karşılık gelen değeri raporlamaktadır. Bu sayede query çalıştırıldığında sql server çoktan o değerinin karşılığını bilmiş olacaktır. Bu sayede queryleriniz hızlanmaktadır.

Peki istatislikler nasıl öğrenilmektedir. Management studio ile Statistic bölümünden bir indexe ait istatistiğin detaylarına kadar ulaşabilmekteyiz.

Microsoft SQL Query Optimizasyonu İstatislikler

Burada önemli bir konuya da daha değinmek istiyorum. Null değeri dönen verileriniz sizin için bir anlam ifade etmiyor olabilmektedir. Bunun istatistiği tutulmasına gerek duymamaktayız. Bunun içinde bir ayar yapmanız gerekmektedir. Filter kısmında filtrelemek istediğiniz istatislikleri girebilmektesiniz. Eğer null değerler sizin için önemli değil ise WHERE IS NOT NULL komutunu kullanabilirsiniz.

İstatisliklerde de bozulmalar zamanla başlamaktadır. Ya da yeni veri girişleriyle istatisliklerinin güncellenmesi gerekmektedir. Bu verilerin güncel tutulması sizin için her zaman sistemlerinize artı olarak yansıyacaktır. Peki nasıl güncelleyeceğiz. General kısmında bulunan update statistics seçeneğini kullanabilirsiniz.

Ya da query yardımıyla hızlıca yapabilirsiniz.

sp_updatestats ---tümünü

update STATISTICS Tabloadı--- tabloyla

İstatislik query optimizasyonu için önemlidir. Düzenli olarak takip edilmesi gereken bir konudur.

Microsoft SQL Query Optimizasyonu Index Maaliyeti Nedir ve Nasıl Bulunur ?

Sonuç olarak query optimizasyonumuzu sağladık ama bizede bir maaliyet çıktı. Bunu görüp takip etmemiz gerekmektedir.

Tüm Veri tabanının maaliyetini sp_spaceused komutu ile öğrenebiliriz.

Microsoft SQL Query Optimizasyonu Maaliyetler

Ya da sadece bir tablonun öğrenmek için “sp_spaceused Tablo Adı” olarak öğrenebilmekteyiz.

sp_spaceused TABLO ADI

Burada dikkat çekmek istediğim nokta Index Size ve Unused alanlardır. Buraların düzenli kontrolünü sağlamak gerekmektedir.

  • Reserved: Tablo için ayrılan alandır
  • Data: Verinizin boyutunu göstermektedir.
  • Index_Size: Indexinizin boyutunu gösterirken
  • Unused: Ayrılmış ama kullanılmayan alandır.

Sonuç olarak Microsoft SQL Query Optimizasyonu da kısa bir bölümü anlatmış olduk. Fill Factor, Statistics, Fragmentation ve maaliyetleri öğrendik. Sistemlerimiz için kritik öneme sahip bu noktaları uygulamaya özen gösteriniz.

Diğer yazılarımıza aşağıdaki kategorilerden ulaşabilirsiniz.

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
0 CommentsYorum Kapat

Yorumla