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

1,657 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,657
On SlideShare
0
From Embeds
0
Number of Embeds
230
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Turgay SahtiyanEurobank Tekfen – Veritabanı YöneticisiMicrosoft MVP – SQL Server
  2. 2. SQL Server DBA – Eurobank TekfenKonuşmacı/Yazar/Lider - SQL Server Öncüleri E-mail : turgay@turgaysahtiyan.com Blog : www.turgaysahtiyan.com10+ WebcastMS Technet Türkiye - WhitepaperSQLPass Turkey Chapter LeaderMicrosoft MVP – SQL Server
  3. 3. Index Neden 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
  4. 4.  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.
  5. 5.  1 Level Root NonLeaf Level  1 veya 1’den fazla Intermediate Level  1 Level LeafNonLeaf Level Page’ler sadece navigasyon için kullanılır. Veri dönüş işlemi NonLeaf LevelPage’lerden değil Leaf Level Page’lerden yapılır.
  6. 6. Bir Index’in Page’leri• DBCC IND ( {dbname | dbid}, tablenum, indexnum ) DBCC IND(AdventureWorks,tblIndexDeneme1,1)Bir Page’in İçeriği• DBCC PAGE ( {dbname | dbid}, filenum, pagenum [, printopt={0|1|2|3} ]) DBCC PAGE(AdventureWorks,1,24044,3)Leaf Level Data Page’lerin İçeriğini Görmek İçin• DBCC TRACEON (3604)
  7. 7.  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.
  8. 8.  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
  9. 9. 10 Milyon kayıda ve 1 CL, 8 NC index’e Sahip Tablo Örneği Clustered Index Key Açıklaması CL Key Kayıt Sayısı NC Index MB Size Sayısıinteger 4 byte 10.000.000 8 305,18Datetime 8 byte 10.000.000 8 610,35Datetime + Integer 12 byte 10.000.000 8 915,53Guid 16 byte 10.000.000 8 1.220,70Composite 32 byte 10.000.000 8 2.441,41Composite 64 byte 10.000.000 8 4.882,81Kaynak : Kimberly L. Tripp – www.sqlskills.com
  10. 10. Peki ya 100.000.000 kayıt ve 12 NC var ise? Clustered Index Key Açıklaması CL Key Kayıt Sayısı NC Index MB Size Sayısıinteger 4 byte 100.000.000 12 4.577,64Datetime 8 byte 100.000.000 12 9.155,27Datetime + Integer 12 byte 100.000.000 12 13.732,91Guid 16 byte 100.000.000 12 18.310,55Composite 32 byte 100.000.000 12 36.621,09Composite 64 byte 100.000.000 12 73.242,19Kaynak : Kimberly L. Tripp – www.sqlskills.com+70 GB’ın getirdiği yük • Disk • Memory • Backup • Insert / update performansı
  11. 11. • 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
  12. 12.  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. %1 Composite Index Included Column Index 25.21 MB 25.02 MB
  13. 13. •Index Kullanım İstatistikleri•Kullanılmayan Index’ler•Fragmante Olan Index’ler•Eksik Index (Missing Index) Analizi
  14. 14. Index = Horse PowerClustered - NonClustered IndexIndex’lerde B-Tree YapısıIndex MaintenanceIndex Kullanım İstatistiklerinin AnaliziEksik Index Analizi
  15. 15.  AdventureWorks.Person.Address  AddressID – Clustered Index  City – NonClustered Index 26 satır NonClustered Index Seek + LookUp 141 Satır Clustered Index Scan
  16. 16.  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.
  17. 17.  İ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
  18. 18.  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
  19. 19.  İ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
  20. 20.  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)
  21. 21. 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.
  22. 22. www.sqlserveronculeri.com www.turgaysahtiyan.comturgay@turgaysahtiyan.com

×