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

  • 1,201 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,201
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
38
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Turgay SahtiyanEurobank Tekfen – Veritabanı YöneticisiMicrosoft MVP – SQL Server
  • 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. 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.  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.  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. 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.  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.  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. 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. 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. • 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.  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. •Index Kullanım İstatistikleri•Kullanılmayan Index’ler•Fragmante Olan Index’ler•Eksik Index (Missing Index) Analizi
  • 14. Index = Horse PowerClustered - NonClustered IndexIndex’lerde B-Tree YapısıIndex MaintenanceIndex Kullanım İstatistiklerinin AnaliziEksik Index Analizi
  • 15.  AdventureWorks.Person.Address  AddressID – Clustered Index  City – NonClustered Index 26 satır NonClustered Index Seek + LookUp 141 Satır Clustered Index Scan
  • 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.  İ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.  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.  İ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.  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. 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. www.sqlserveronculeri.com www.turgaysahtiyan.comturgay@turgaysahtiyan.com