23
SQL Server’da Index Kavramı Performance Tuning ve Query Optimization

SSO- SQL Serverda Index Kavramı

Embed Size (px)

Citation preview

Page 1: SSO- SQL Serverda Index Kavramı

SQL Server’da Index KavramıPerformance Tuning ve Query Optimization

Page 2: SSO- SQL Serverda Index Kavramı

Ajanda

Neden Index ?

Index Nasıl Çalışır ? (B-Tree Yapısı)

Clustered Index

NonClustered Index

Örneklerle Index Page’ler

Included Column Kullanımı

Sonuç - Özet

Page 3: SSO- SQL Serverda Index Kavramı

Neden Index ? SQL Server açısından index

kullanımının en önemli amacı, istenen bilginin daha az veri okunarak daha kısa zamanda getirilmesini sağlamaktır.

Index kullanarak bir tablonun tamamını okumaktansa index key vasıtasıyla okumak istediğimiz kayıda daha hızlı bir şekilde ulaşmamız mümkündür.

Tamamlanması saatler süren bir sorgunun uygun index’ler kullanılarak saniyeler seviyesinde getirilmesi sağlanabilir.

Telefon rehberi index kullanımı için iyi bir örnektir. (Karışık Rehber – Sıralı Rehber)

Canlı örnek - table scan-index kullanımı arasındaki fark

Gerekli index’ler faydalı olduğu gibi çok fazla index kullanımı OLTP işlemlerde performans sıkıntısı doğurur.

Page 4: SSO- SQL Serverda Index Kavramı

Index Nasıl Çalışır ? (B-Tree Yapısı)

Index’in çalışma prensibini anlamak, Index tipine ve Index’in hangi kolonlar üzerine tanımlanması gerektiğine karar verme aşamaları için oldukça önem taşımaktadır.

Client İsteği -> Protocol Layer -> Parse -> Query Processor

Query Processor = Optimize + Execute Optimize = En Uygun Index’ten Query Plan

Oluşturulur. Execute = Bu aşamada Index üzerinde B-Tree

yapısı kullanılarak arama yapılır.

Page 5: SSO- SQL Serverda Index Kavramı

Index’lerde B-Tree Yapısı

1 Level Root 1 veya 1’den fazla Intermediate Level 1 Level Leaf

NonLeaf Level

Page 6: SSO- SQL Serverda Index Kavramı

Index Page’leri Görüntüleme

• DBCC IND ( {'dbname' | dbid}, tablenum, indexnum )

DBCC IND('AdventureWorks','tblIndexDeneme1',1)

Bir Index’in Page’leri

• DBCC PAGE ( {'dbname' | dbid}, filenum, pagenum [, printopt={0|1|2|3} ])

DBCC PAGE('AdventureWorks',1,24044,3)

Bir Page’in İçeriği

• DBCC TRACEON (3604)

Leaf Level Data Page’lerin İçeriğini Görmek İçin

Page 7: SSO- SQL Serverda Index Kavramı

Page Örnekleri

ChildFileId ChildPageId Id – Clustered Index Key UNIQUIFIER (*) – Key’i Unique’leştirmek İçin Kullanılır. (4 byte

Integer)

Alt Level Page’lere Erişmek İçin Kullanılır

Clustered Index NonLeaf Level Page

*Bir key’in unique olup olmaması index tanımlanırken kullanılan UNIQUE ifadesine bağlıdır.

Page 8: SSO- SQL Serverda Index Kavramı

Page Örnekleri

ChildFileId ChildPageId Ad – NonClustered Index Key Id – Clustered Index Key UNIQUIFIER – Key’i Unique’leştirmek İçin Kullanılır. (4 byte

Integer)

Alt Level Page’lere Erişmek İçin Kullanılır

NonClustered Index NonLeaf Level Page

Page 9: SSO- SQL Serverda Index Kavramı

Page Örnekleri

Ad – NonClustered Index Key SoyAd – Included Column Id – Clustered Index Key UNIQUIFIER

NonClustered Index Leaf Level Page

Lookup yapmak için kullanılır.

Page 10: SSO- SQL Serverda Index Kavramı

B-Tree Örneği

Canlı data üzerinde index B-Tree arama demosu

Page 11: SSO- SQL Serverda Index Kavramı

Clustered Index Clustered Index = Fiziksel Index Diskte veriler mantıksal olarak sıralı

tutulurlar. (Page Chain) Bir tabloda sadece 1 adet Clustered

Index bulunabilir. Leaf Level = Datanın Kendisi Ada göre sıralı bir telefon defteri

Clustered Index için iyi bir örnektir. Otomatik artan (Identity) bir alana

Clustered Index tanımlanması best practice’dir. Bunun nedenler;

Identity unique’dir. 4 byte’lık UNIQUIFIER kullanımından kurtulunur.

Identity kolonu update görmez. Update gören bir alana Clustered Index tanımlanmasının sakıncaları şunlardır:

Page Split Index Fragmentation NonClustered Index’lerin

Update Görmesi Index Seek yerine Index Scan

yapılır.

Page 12: SSO- SQL Serverda Index Kavramı

NonClustered Index Telefon defteri için mesleki bir

index yapmak iyi bir NonClustered Index örneğidir.

Leaf Level = Row Locator + Included Kolonlar

Row Locator Heap ya da Clustered Index durumuna göre farklılık gösterir.

Heap -> Dosya Numarası (File Identifier)

+ Sayfa Numarası (Page Number)

+ Kayıt Numarası (Slot Number)

Clustered Index -> Clustered Index Keys

+ (UNIQUIFIER)

Maksimum NonClustered Index Sayısı

SQL Server 2005 – 249 SQL Server 2008 – 999

Page 13: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’ler

• Unique Clustered Index• NonUnique Clustered Index

Clustered Index’te Page’lerin Yapısı

• Heap Tablo + Unique NonClustered Index• Unique Clustered Index + Unique NonClustered Index• NonUnique Clustered Index + Unique NonClustered Index• NonUnique Clustered Index + NonUnique NonClustered

Index

NonClustered Index’te Page’lerin Yapısı

Page 14: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerUnique Clustered Index - NonLeaf

Leaf

Page 15: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerNonUnique Clustered Index - NonLeaf

Leaf

Page 16: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerHeap Tablo + Unique NonClustered Index

Page 17: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerUnique Clustered Index + Unique NonClustered Index

Page 18: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerNonUnique Clustered Index + Unique NonClustered Index

Page 19: SSO- SQL Serverda Index Kavramı

Örneklerle Index Page’lerNonUnique Clustered Index + NonUnique NonClustered Index

Page 20: SSO- SQL Serverda Index Kavramı

Included Kolon Kullanımı

SQL Server 2005 ile gelen bir özelliktir. Amaç sorguyu cover edip lookup yapmamaktır. Covering Index : Lookup yapma ihtiyacı olmadan

istenen tüm bilgileri leaf level page’lerinde bulunduran NonClustered Index’lerdir.

NonLeaf Level Page’lerde covering column’u bulundurmayıp boyutu arttırmadan sadece leaf level page’lerde bulundurmayı amaçlar.

Telefon Rehberi için verilen mesleki NonClustered Index örneği Included kolon ile yapılırsa lookup’tan kurtulunur.

Composite Index25.21 MB

% 1Included Column Index

25.02 MB

Page 21: SSO- SQL Serverda Index Kavramı

Sonuç - Özet Index’i SQL Server’ın beygir gücü olarak tanımlayabiliriz. Etkin

index kullanımı verinin sorgulanması ihtiyacını daha etkin bir şekilde karşılamak için göz önünde bulundurulması gereken en önemli konudur

Clustered ve NonClustered Index’lerin davranışları farklı olduğu için bu 2 index tipi arasındaki farkı bilmek Index oluşturma açısından önemlidir.

Index’lerin B-Tree yapısının ne şekilde çalıştığı bir diğer önemli konudur.

Index’lerin tanımlanmış olması, sürekli performanslı bir çalışma getireceği manasına gelmez. Periyodik olarak Index’lerin bakımının yapılması Index performansına etki eden önemli faktörlerden biridir.

Index kullanımı çok önemliyken, gereksiz,kullanılmayan Index’leri sistemde bulundurmak bir o kadar dezavantajdır. Periyodik olarak kullanılmayan ya da yazma istatistiği okuma istatistiğinden fazla olan index’lerin belirlenip drop edilmesi gerekir

Aynı şekilde olması gerekipte olmayan index’lerin (Missing Index) belirlenip oluşturulması sistemi daha performanslı çalışır hale getirecektir.

Page 22: SSO- SQL Serverda Index Kavramı

Soru - Cevap

Page 23: SSO- SQL Serverda Index Kavramı

Daha Fazlası İçin :

www.sqlserveronculeri.comwww.turgaysahtiyan.com