Index Detail Script

Reading Time: 3 minutes

Merhaba Arkadaşlar ,

Tablolarımız üzerinde yer alan index ‘lerimiz hakkında bilgiye nasıl ve ne şekilde erişiriz. Bu bilgiler nelerdir ? Bu makalemde bu sorulara cevap bulmaya çalışacağız.

Veritabanı üzerinde yer alan tablolarda ki Index bilgilerine SSMS üzerinden nasıl ulaşırız ilk adım da onu görelim.

Test veritanbanım içerisinde yer alan Monitoring2 adlı tablomun üzerine geldim ve içerisine girdiğimde Indexes bölümüne tıkladım ve burada yer alan Index ‘leri görmüş oldum.

1

Index ‘lere baktığımızda birinde Anahtar işareti mevcuttur. Bu Index ‘imiz aynı zamanda Primary Key ‘idir tablonun. Index ‘lerin yanında sahip oldukları tipler belirtilmiştir. Primary Key olan Index ‘imiz aynı zamanda Clustered Index ‘tir. NCIX_Monitoring _Date adlı Index ‘imizde Non Clustere Index ‘tir.

Index türlerinde bu makalemde değinmeyeceğim. Daha sonra daha detaylı bir şekilde başka bir makale ile Index türlerine değineceğiz.

Gördüğünüz üzere tablomuz üzerinde toplam iki adet Index mevcuttur. Index lerin hangi kolonlar üzerinde yer aldığını görebilmek için Index ‘imizin üzerine iki kere tıklayıp Index detayları sayfasına erişmemiz gerekmektedir.

2

Yukarıda ki ekranda NCIX_Monitoring_Date adlı Index ‘imizin detayına erişmiş bulunmaktayız. Burada Index ‘imizi hangi kolon üzerine oluşturduğumuzu ve Included kolonlarımızın hangisi olduğuna dair bilgilere ulaşabiliriz. Bunun dışında bu ekranda Index boyutlarına Fragmantasyon oranlarına vb. Bilgilere erişebiliriz ve düzenleyebiliriz.

Gördüğünüz üzere bizim index ‘imiz Date kolonu üzerine oluşturulmuş durumda. Peki Included kolon olarak tanımlanan kolonlarımıza ise Icluded columns sekmesine tıklayarak görebiliriz.

2.1

Yukarıda da görüldüğü üzere Index ‘imiz Date kolonu üzerine oluşturulmuş ve onbir adet kolonda Included olarak eklenmiş. Included Colums konusuna bu makalemde değinmeyeceğim.

Şimdi bu verileri SSMS üzerinden her tabloya gidip tek tek Index detaylarına bakmaktansa aşağıda hazırlamış olduğum Script ile bu detaylara tüm tablolar için erişebilirsiniz.

 

3

 

Scriptimizi çalıştırdığımızda yukarıda ki ekran görüntüsünde yer alan sonuçlar karşımıza çıkmaktadır.  Monitoring2 tablomuzun Index ‘lerini SSMS üzerinden incelemiştik.

Çıkan sonucuda bu tablo üzerinden inceleyecek olursak ;

Database_Name             : Index ‘imizin hangi veritaba nın da yer aldığı bilgisini verir.

Schema Name                 : Şema bilgisini verir.

Table_Name                    : Index ‘in hangi tablo üzerinde yer aldığı bilgisini verir.

Index_Name                    : Index ‘in isim bilgisini verir.

Index_Type                      : Index ‘in Tip bilgisini verir.

Column_Name                : Index ‘in hangi kolon üzerinde olduğu bilgisini verir.

Data_Type                        : Index ‘in hangi kolon üzerinde olduğu ve bu kolonun hangi veri tipinde oluşturulduğu bilgisini verir.

Include_Column             : Index ‘in içerisinde Included olarak tanımlanmış kolonların bilgisini verir.

Identity                              : Index ‘in Identity bilgisini verir.

PRIMARY_KEY               : Index ‘in Primary Key kolon üzerinde olup olmadığı bilgsini verir.

tabloların kolonlarının ne anlama geldikleri yukarıda aktarılmıştır.

NCIX_Monitoring_Date adlı Index ‘imiz Date kolonu üzerinde oluşturulduğunu ve Included Colum olarak da session_id

,DBName,login_name,text,statement_text,blocking_session_id,status,wait_type,wait_time,percent_complete

,estimated_completion_time kolonlarını içerdiğini tablo üzerinden  analiz edebiliyoruz.

Saygılarımla…

 

2 Replies to “Index Detail Script”

  1. Merhaba,

    Elinize sağlık. Güzel bir script. Veritabanında bulunan index’leri gösteriyor. Bu scripti biraz daha geliştirip, bu indexlerin performansını ölçecek şekilde değiştirmek çok daha faydalı olur. Yani yararından çok zararı mı var onu da gösterebilse daha faydalı olur. (Okumasından daha fazla yazıyor mu gibi mesela.)

    1. Selam Fatih ,

      Makalenin başlığında da belirtildiği üzere Index yapısı ve detaylarını veren bir Script bu. Index Perfomance analiz scripti değil. Ama aşağıda ki script ile Index Performansını ölçebilir ve Bad ındex lerini belirleyip takibini belirli bir rutinde yaptıktan sonra gereken operasyonlaırnı gerçekleştirebilirsin.

      SELECT
      o.name AS ObjectName
      , i.name AS IndexName
      , i.index_id AS IndexID
      , dm_ius.user_seeks AS UserSeek
      , dm_ius.user_scans AS UserScans
      , dm_ius.user_lookups AS UserLookups
      , dm_ius.user_updates AS UserUpdates
      , p.TableRows
      , ‘DROP INDEX ‘ + QUOTENAME(i.name)
      + ‘ ON ‘ + QUOTENAME(s.name) + ‘.’ + QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID)) AS ‘drop statement’
      FROM sys.dm_db_index_usage_stats dm_ius
      INNER JOIN sys.indexes i ON i.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = i.OBJECT_ID
      INNER JOIN sys.objects o ON dm_ius.OBJECT_ID = o.OBJECT_ID
      INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
      INNER JOIN (SELECT SUM(p.rows) TableRows, p.index_id, p.OBJECT_ID
      FROM sys.partitions p GROUP BY p.index_id, p.OBJECT_ID) p
      ON p.index_id = dm_ius.index_id AND dm_ius.OBJECT_ID = p.OBJECT_ID
      WHERE OBJECTPROPERTY(dm_ius.OBJECT_ID,’IsUserTable’) = 1
      AND dm_ius.database_id = DB_ID()
      AND i.type_desc = ‘nonclustered’
      AND i.is_primary_key = 0
      AND i.is_unique_constraint = 0
      ORDER BY (dm_ius.user_seeks + dm_ius.user_scans + dm_ius.user_lookups) ASC
      GO

Leave a Reply

Your email address will not be published. Required fields are marked *