SQL Server’daki Tablolar için Disk Alanı Kullanımını T-SQL ile Kontrol Etme

Bir veritabanını yönetirken, her bir tablonun ne kadar disk alanı tükettiğini anlamak, optimizasyon ve kapasite planlama açısından hayati öneme sahiptir. Pek çok kullanıcı SQL Server Management Studio (SSMS) grafik arayüzü aracılığıyla tablo özelliklerini kontrol etmeye alışkın olsa da, aynı görevi T-SQL kullanarak yerine getirmeyi bilmek, özellikle otomasyon ve ileri düzey veritabanı yönetimi görevleri için son derece faydalı olabilir.

Bu blog yazısında, SQL Server’daki tablolar tarafından kaplanan disk alanını T-SQL aracılığıyla belirlemenin basit bir yöntemini inceleyeceğiz. Bu yaklaşım sadece verimliliğinizi artırmakla kalmaz, aynı zamanda SQL betiklerine daha derinlemesine dalma fırsatı sunar.

Çözümün Genel Görünümü

Veritabanınızdaki çeşitli tablolar hakkında bilgi toplamak için sp_spaceused sistem saklı yordamı ile birlikte geçici tablolar kullanacağız. İşte yapmayı amaçladığımızlar:

  1. Boyut bilgilerini saklamak için geçici tablolar oluşturun.
  2. Tüm tablolardan boyut verilerini toplamak için sp_spaceused komutunu çalıştırın.
  3. Toplanan verileri okunabilir metriklere ayrıştırın.
  4. Çıktıyı ayrılmış boyuta göre sıralayıp gösterin.

Hadi başlayalım!

Adım 1: Geçici Tabloları Oluşturma

İlk adım, çıkaracağımız boyut bilgilerini saklamaya yardımcı olacak iki geçici tablo tanımlamaktır. SQL Server’da geçici tablolar # işareti ile başlar.

CREATE TABLE #tmpSizeChar (
     table_name sysname ,
     row_count int,
     reserved_size varchar(50),
     data_size varchar(50),
     index_size varchar(50),
     unused_size varchar(50))                              

CREATE TABLE #tmpSizeInt (
     table_name sysname ,
     row_count int,
     reserved_size_KB int,
     data_size_KB int,
     index_size_KB int,
     unused_size_KB int)   

Açıklama:

  • #tmpSizeChar: Boyutları birimlerle (örneğin, MB, KB) saklayan karakter formatında sonuçları tutar.
  • #tmpSizeInt: Kolay hesaplama sağlamak için tam sayı formatında sonuçları saklar.

Adım 2: Tablolardan Boyut Verilerini Toplama

Veritabanındaki her tablo üzerinde sp_spaceused komutunu çalıştırmak için sp_msforeachtable saklı yordamını kullanıyoruz. Bu komut, her tablonun alan kullanımına dair ayrıntılı bilgi sağlar.

SET NOCOUNT ON
INSERT #tmpSizeChar
EXEC sp_msforeachtable 'sp_spaceused ''?'''

Açıklama:

  • NOCOUNT ON: T-SQL ifadesi tarafından etkilenen satır sayısını bildiren mesajın döndürülmesini engeller, bu da birden fazla ifadeye sahip betikler için performansı artırır.

Adım 3: Toplanan Verileri Ayrıştırma

Verileri topladıktan sonra, karakter verilerini analiz için uygun tam sayı değerlerine dönüştürmemiz gerekiyor.

INSERT INTO #tmpSizeInt (
        table_name,
        row_count,
        reserved_size_KB,
        data_size_KB,
        index_size_KB,
        unused_size_KB
        )
SELECT  [table_name],
        row_count,
        CAST(SUBSTRING(reserved_size, 0, PATINDEX('% %', reserved_size)) AS int) reserved_size,
        CAST(SUBSTRING(data_size, 0, PATINDEX('% %', data_size)) AS int) data_size,
        CAST(SUBSTRING(index_size, 0, PATINDEX('% %', index_size)) AS int) index_size,
        CAST(SUBSTRING(unused_size, 0, PATINDEX('% %', unused_size)) AS int) unused_size
FROM #tmpSizeChar

Açıklama:

  • Bu adım, ayrılmış boyutların sayısal kısmını çıkararak onları güvenilir hesaplamalar için tam sayılara dönüştürür. Boyut dizelerinden (KB, MB gibi) karakterleri çıkarır.

Adım 4: Sonuçları Gösterme

Son olarak, geçici tam sayı boyutundaki tablomuzdan özet sonuçları alıp gösteriyoruz.

SELECT * FROM #tmpSizeInt
ORDER BY reserved_size_KB DESC

Açıklama:

  • Bu SQL komutu, #tmpSizeInt‘den tüm kayıtları alır ve reserved_size_KB sütununa göre sıralar, böylece hangi tabloların en fazla disk alanını tükettiğini görebilirsiniz.

Sonuç

Yukarıda belirtilen adımları izleyerek, SQL Server’daki bir tablonun ne kadar disk alanı kullandığına dair yapılandırılmış bir şekilde bilgi edinmiş oldunuz. Bu yöntem, optimal performansı korumaya ve SQL Server ortamlarındaki kaynak kullanımını takip etmeye çalışan veritabanı yöneticileri ve geliştiriciler için özellikle faydalıdır.

Artık GUI tıklamalarını, temel olarak veritabanı yönetim becerilerinizi geliştiren güçlü bir komut satırı yaklaşımıyla değiştirebilirsiniz!