Oca
6
2012

MSSQL üzerindeki tablolarda INDEX bakımı

Zaman zaman sizlerinde başına gelmiştir, çeşitli veritabanları ile çalışırken gayet düzgün çalışan bir veritabanı bir anda kararsız duruma düşebilir ya da yavaşlayabilir.

Bunun temel nedenlerinden bir tanesi tablolarda kullanılan INDEX yapılarının fragmantasyonlarının bozulmasıdır.

Peki bu durumları nasıl tespit edebiliriz ya da index yapısı bozuldu diyelim. Bunu nasıl düzeltebiliriz?

Normal şartlarda her tablonun index özelliklerine girip ilgili fragmantasyon değerinin kontrol edilmesi ve buna göre yine aynı menü üzerinden REPAIR ya da REBUILD işleminin yapılması gerekir.

Fakat veritabanı sayınız 5 den fazla ve her DB üzerindeki tablo sayınızda 20 den fazla ise çok işim var! demekte haklısınız 🙂

Malumunuz programcı dediğin ya çok tembel olur (kendine göre) ya da çok pratik olur (diğerlerine göre) bu durumda da mutlaka bir çözüm bulabilir 🙂

İlk olarak yapılması gereken işlem: Query Editor üzerinde

komutu ile veritabanlarımız üzerindeki dağılmış indexlerin (%10 dan  fazla) durumunu öğreniriz.

ancak gelen sorgu sonucunda da görebileceğiniz gibi kolonlarda ne bir DB adı ne de Index adı bulunmuyor, peki bu bilgileri nasıl öğrenebiliriz.

Çözüm:

ile öncelikle fonksiyonumuzu yaratıyoruz. Sonra da;

ile hangi tablonun hangi index verisi ne oranda bozulmuş görebiliyoruz.

Artık hangi tabloda hangi index bozulmuş gördüğümüze göre bunları elimizle düzeltebiliriz. Yok ben yine tembelliğimden şaşmak istemiyorum 🙂

Aşağıdaki kod ile tüm veritabanlarında yer alan tüm index yapıları kontrol ediliyor ve fragmantasyon yapılıyor.

 

İşte hepsi bu kadar…

Siteden SQL komutlarını kopyala yapıştır ile alırken sorun yaşayan kullanıcılar için bu kodları TXT formatında kaydettim isteyenler SQL Server Index Bakımı adresinden ulaşabilir.

10 Yorum “MSSQL üzerindeki tablolarda INDEX bakımı”

  • Recep 22 Haziran 2012, 01:14

    Hocam sondaki kodu calistiramadim bir turlu. digerlerini goruyorum sorun yok fakat bu sekilde hata aliyorum :

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near ‘”’.
    Msg 16916, Level 16, State 1, Line 25
    A cursor with the name ‘TableCursor’ does not exist.
    Msg 16916, Level 16, State 1, Line 28
    A cursor with the name ‘TableCursor’ does not exist.

    • Burak ŞEKERCİOĞLU 22 Haziran 2012, 10:30

      Recep bey sql kodlarında Incorrect syntax near ‘”’ aldığınız hatanın sebebi kullanılan tırnak sembolünden dolayı olabilir.
      SQL kodlarını bir notepad ekranına aktardıktan sonra tırnak (”) işaretlerini ” olarak güncelleyebilirseniz sorunun düzeleceğini düşünüyorum.
      Çünkü bu kodları kendi sunucumda test ettikten sonra buraya aktarmıştım.
      Kolay gelsin.

  • Ersoy AYDIN 15 Ağustos 2012, 13:43

    Hocam Merhaba ,

    Bu indeks kontroolerini sistem (DB) kullanımda iken yapmamızda bir sakınca var mıdır ?

  • Ersoy AYDIN 15 Ağustos 2012, 15:20

    Kontrol kodları başarılı hocam ;

    Fakat fragmantasion işleminin bir server üzerindeki tüm DB lerde değilde sadece istediğimiz bir dB de yapılabilmesi için kodda nasıl bir revizyon yapmamız gerekir ?

    • Burak ŞEKERCİOĞLU 16 Ağustos 2012, 10:04

      WHERE name NOT IN (‘master’,’msdb’,’tempdb’,’model’,’distribution’)

      satırını

      WHERE name IN (‘veritabanımız’)

      şeklinde değiştirirsen olacağını düşünüyorum.

  • Ersoy AYDIN 15 Ağustos 2012, 15:21

    Bir de server SQL 2008 R2 ise kod nasıl olmalı ?

  • Ersoy AYDIN 16 Ağustos 2012, 10:33

    Cevabınız için teşekkürler hocam ,
    Bu fragmantasyon query olayından sonra , karşılaşmam gereken response sonucun nasıl bir sonuç olduğu konusunda hiç fikrim olmadığından biraz tereddüt içerisindeydim , yani düzeltme querysi çalıştırıldıktan sonra ikinci bir fragmantasyon kontrol querysi çalıştırdığımız da SIFIR sonuç ile mi karşılaşactım yada “indexleri fragmantasyon olmuş table ya rastlanmadı” şeklinde otomatik bir sistem mesajı mı alıp alamayacağımı bilmediğimden , hep bir soru işareti vardı….sonuç olarak %85-90-95 lerde ve yaklaşık 350 Table da gezen fragmantasyon sorunu düzeltme sonrası yaklaşık 150 Table ve %20-40 arasında değerlere indi…

TeamViewer ile İnternet üzerinden Uzaktan Erişim ve Destek Sekercioglu.eu Uzaktan Yardım
Ammyy Uzaktan Yardım
WinRAR
WEBMAIL Google PageRank Checker
Twitterda Takip Edin! Twitterda Takip Edin!
Twitter

Üye Paneli

Son Yazılar

Kategoriler

Son Yorumlar