22
Index ve İstatistik Turgay Sahtiyan Eurobank Tekfen – Veritabanı Yöneticisi Microsoft MVP – SQL Server Performansınızı Arttırın

Index ve İstatistik:performansınızı arttırın

Embed Size (px)

Citation preview

Page 1: Index ve İstatistik:performansınızı arttırın

Index ve İstatistik

Turgay SahtiyanEurobank Tekfen – Veritabanı YöneticisiMicrosoft MVP – SQL Server

Performansınızı Arttırın

Page 2: Index ve İstatistik:performansınızı arttırın

Konuşmacı : Turgay Sahtiyan

SQL Server DBA – Eurobank TekfenKonuşmacı/Yazar/Lider - SQL Server

ÖncüleriE-mail : [email protected] : www.turgaysahtiyan.com

10+ WebcastMS Technet Türkiye - WhitepaperSQLPass Turkey Chapter LeaderMicrosoft MVP – SQL Server

Page 3: Index ve İstatistik:performansınızı arttırın

Ajanda

Neden Index ?

Index

Clustered Index – NonClustered Index

Clustered Index’in Önemi

NC Index’lerde Included Column Kullanımı

DMV’ler ile Index Analizi

İstatistik (Stats)

İstatistik Nedir ?

İstatistik Nasıl Oluşur ?

İstatistik Nasıl Güncellenir ?

Veritabanı İstatistik Özellikleri

Page 4: Index ve İstatistik:performansınızı arttırın

Neden Index ?

Daha az IO Veriye daha hızlı erişim Table Scan <> Index

Search Tamamlanması saatler

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

Telefon rehberi Gerekli index’ler faydalı

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

Page 5: Index ve İstatistik:performansınızı arttırın

Index’lerde B-Tree Yapısı

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

NonLeaf Level

NonLeaf Level Page’ler sadece navigasyon için kullanılır. Veri dönüş işlemi NonLeaf Level Page’lerden değil Leaf Level Page’lerden yapılır.

Page 6: Index ve İstatistik:performansınızı arttırın

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: Index ve İstatistik:performansınızı arttırın

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.

Page 8: Index ve İstatistik:performansınızı arttırın

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 9: Index ve İstatistik:performansınızı arttırın

CL Key’in Veri Tipi (Boyutu) ‘nun Etkisi CL Key’lerin veri tipleri NonClustered

Index boyutunu etkileyen en önemli faktörlerden birisidir.

Diğer önemli faktör, CL’nin composite yani birden fazla key üzerine oluşturulup oluşturulmamasıdır.

Clustered Index Key Açıklaması CL Key Size

Kayıt Sayısı NC Index Sayısı

MB

integer 4 byte 10.000.000 8 305,18

Datetime 8 byte 10.000.000 8 610,35

Datetime + Integer 12 byte 10.000.000 8 915,53

Guid 16 byte 10.000.000 8 1.220,70

Composite 32 byte 10.000.000 8 2.441,41

Composite 64 byte 10.000.000 8 4.882,81

10 Milyon kayıda ve 1 CL, 8 NC index’e Sahip Tablo Örneği

Kaynak : Kimberly L. Tripp – www.sqlskills.com

Page 10: Index ve İstatistik:performansınızı arttırın

CL Key’in Veri Tipi (Boyutu) ‘nun Etkisi

Clustered Index Key Açıklaması CL Key Size

Kayıt Sayısı NC Index Sayısı

MB

integer 4 byte 100.000.000

12 4.577,64

Datetime 8 byte100.000.00

012 9.155,27

Datetime + Integer 12 byte 100.000.000

12 13.732,91

Guid 16 byte 100.000.000

12 18.310,55

Composite 32 byte 100.000.000

12 36.621,09

Composite 64 byte 100.000.000

12 73.242,19

Peki ya 100.000.000 kayıt ve 12 NC var ise?

Kaynak : Kimberly L. Tripp – www.sqlskills.com

+70 GB’ın getirdiği yük• Disk• Memory• Backup• Insert / update performansı

Page 11: Index ve İstatistik:performansınızı arttırın

Clustered Index Kriterleri• Unique

• Olmazsa: UNIQUFIER (4byte)• Static

• Olmazsa: Update’ler NC’lerde de yapılır, CL’de Page Split’e ve Fragmantasyona sebep olur.

• Küçük Boyutlu• Olmazsa: NC’lerde gereksiz alan kullanımı

• Non-Nullable• Olmazsa: 3 byte’lık gereksiz alan kullanımı

• Sürekli Artan• Olmazsa: Page Split ve Fragmantasyona sebep olur.

Identity

Page 12: Index ve İstatistik:performansınızı arttırın

NC Index’lerde 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.

Included kolonlar sadece Leaf Level Page’lerde bulunur.

Composite Index25.21 MB

% 1Included Column Index

25.02 MB

Page 13: Index ve İstatistik:performansınızı arttırın

DMV’ler ile Index Analizi

•Index Kullanım İstatistikleri

•Kullanılmayan Index’ler

•Fragmante Olan Index’ler

•Eksik Index (Missing Index) Analizi

Page 14: Index ve İstatistik:performansınızı arttırın

Index Özet

Index = Horse PowerClustered - NonClustered

IndexIndex’lerde B-Tree YapısıIndex MaintenanceIndex Kullanım

İstatistiklerinin AnaliziEksik Index Analizi

Page 15: Index ve İstatistik:performansınızı arttırın

İstatistik Nedir ? AdventureWorks.Person.Address

AddressID – Clustered Index City – NonClustered Index

26 satır NonClustered Index Seek + LookUp

141 Satır Clustered Index Scan

Page 16: Index ve İstatistik:performansınızı arttırın

İstatistik Nedir ? Tabloda bulunan verilerin

dağılımını gösterir.

Sorgu planı (Query Plan) oluşturulurken kullanılır.

Estimated Rows’u bulmaya yarar.

Hangi Index’e hangi yöntem ile erişileceğini belirlemek için kullanılır.

Kayıtları okumadan ne kadar kaydın döneceğini tahminlemek ancak İstatistik kullanımı ile mümkündür.

Page 17: Index ve İstatistik:performansınızı arttırın

İstatistik Güncel Olmasının Önemi İstatistik delete-insert-update modifikasyon

işlemleri ile güncelliğini yitirir.

Doğru tahminleme yapabilmek için istatistiğin olması kadar güncel olması da çok önemlidir.

DEMO

Page 18: Index ve İstatistik:performansınızı arttırın

İstatistik Nasıl Oluşur ?

Index oluşturulduğu zaman. (Bu şekilde oluşan istatistiklerin ismi Index’in ismi ile aynıdır.)

Composite Index >> Sadece ilk kolon

Auto_Create_Statistics

İstatistik CREATE STATISTICS komutu ile manuel olarak oluşturulabilir. 8 MB’dan küçük ise Full Scan 8 MB’dan büyük ise Random Record

Page 19: Index ve İstatistik:performansınızı arttırın

İstatistik Nasıl Güncellenir İstatistiğin güncellenme tarihine bakmak için;

sp_autostats DBCC SHOW_STATISTICS STATS_DATE

İstatistiği manuel güncellemek için; UPDATE STATISTICS sp_updatestats (sysindexes.rowmodctr değerine göre karar

verilir.)

Auto_Update_Statistics

Auto_Update_Statistics_Aysnc

Index Rebuild

Page 20: Index ve İstatistik:performansınızı arttırın

DBCC SHOW_STATISTICS DBCC SHOW_STATISTICS ('Person.Address',IX_City) Range_Rows : x kayıdı ile histogramdaki bir

önceki değer arasında bulunan kayıt sayısını verir.select * from Person.Address where City>'Bonn' and City<'Bottrop‘

EQ_Rows : City kolonu x olan kayıt sayısını verir.select * from Person.Address where City='Bottrop‘

Distinct_Range_Rows : x ile bir önceki kayıt arasındaki tekil City sayısını verir.select City from Person.Address where City>'Bonn' and City<'Bottrop' group by City

Avg_Range_Rows : x ile bir önceki kayıt arasındaki kayıtların her birine düşen ortalama (tahmini) kayıt sayısını verir.

Maksimum 200 step olabilir. 200 Step’in yetmediği durumlarda Filtered Stats ile

daha detaylı istatistikler oluşturulabilir. (SS 2008)

Page 21: Index ve İstatistik:performansınızı arttırın

Veritabanı İstatistik Özellikleri Auto_Create_Statistics

Aktif ise where bloğunda kullanılan kolonlar için otomatik olarak istatistik oluşturulur.

Bu özellik ile otomatik olarak oluşturan istatistikler _WA_ ön eki ile başlar.

Auto_Update_Statistics İstatistik, tablodaki kayıtların %20+500 adedi

değiştikten sonra ilk kullanılmak istendiğinde güncellenir.

Kaç kaydın güncellendiği bilgisi sysindexes.rowmodctr kolonunda tutulur.

İstatistiğin çok sık güncellenmesi ReCompile’dan dolayı performans sıkıntısına sebep olabilir.

Auto_Update_Statistics_Aysnc Auto_Update_Statistics ile beraber çalışır. İstatistik güncellenme işleminin asenkron olarak

gerçekleşmesini sağlar. Sorgular istatistik güncellenme işlemini beklemedikleri

için performans artışı sağlar.

Page 22: Index ve İstatistik:performansınızı arttırın

Daha Fazlası İçin :

www.sqlserveronculeri.comwww.turgaysahtiyan.com

[email protected]