SQL Server’da Tablo ve Index Büyüklükleri

12 Tem by NURULLAH ÇAKIR

SQL Server’da Tablo ve Index Büyüklükleri

SQL Server ‘da tablo ve index büyüklüklerini bir çok işleme başlamadan önce listeleme ihtiyacı hissederiz. Örneğin Compression yapmaya başlamadan önce ya da hangi tabloları partition yapmamız gerektiğine karar vermeden önce büyük tabloları bulmamız gerekir. Tablo büyüklüklerini veren script’in elimizin altında olması için bu makalede bu script’i paylaşmak istedim.

Compression ve Partition ile ilgili aşağıdaki makaleleri okumak isteyebilirsiniz.

SQL Server Compression“,

Partition Oluşturmak“,

Sliding Window-Switch Partition-Split Range-Merge Range“,

Veritabanında Partition Yapılmış Tabloları Bulmak

SELECT
    tbl.NAME AS Tabloİsmi,
    s.Name AS Şemaİsmi,
    p.rows AS SatırSayısı,
    SUM(au.total_pages) * 8 AS ToplamBüyüklükKB,
    SUM(au.used_pages) * 8 AS KullanılanBüyüklükKB,
    (SUM(au.total_pages) - SUM(au.used_pages)) * 8 AS KullanılmayanAlanKB
FROM
    sys.tables tbl
INNER JOIN     
    sys.indexes ind ON tbl.OBJECT_ID = ind.OBJECT_ID
INNER JOIN
    sys.partitions p ON ind.OBJECT_ID = p.OBJECT_ID AND ind.index_id = p.index_id
INNER JOIN
    sys.allocation_units au ON p.PARTITION_ID = au.container_id
LEFT OUTER JOIN
    sys.schemas s ON tbl.SCHEMA_ID = s.SCHEMA_ID
WHERE
tbl.is_ms_shipped = 0
    AND ind.OBJECT_ID > 255
GROUP BY
    tbl.Name, s.Name, p.Rows
ORDER BY
    SUM(au.total_pages) DESC

 

Script’te gelen kolonları biraz açıklamak gerekirse;

ToplamBüyüklük kısmında tablodaki verinin(index hariç) toplam boyutunu,

KullanılanBüyüklük kısmında toplam boyutun ne kadarının kullanıldığını,

KullanılmayanAlan kısmında ise toplamboyutun ne kadarının henüz kullanılmadığını gösteriyor.

 

Eğer index boyutlarını da aynı sorguda listelemek isterseniz aşağıdaki script’i daha çok işinize yarayacaktır.

create table #tablolistesi
(
  TabloIsmi nvarchar(250),
  satirsayisi varchar(50),
  reserveedilmisalan varchar(50),
  veri varchar(50),
  indexbuyuklugu varchar(50),
  kullanılmayanalan varchar(50)
)
declare @TabloIsmi nvarchar(250)
declare crs cursor for
SELECT SCHEMA_NAME(schema_id) +'.'+  name As TableTabloIsmi from sys.tables
ORDER BY name
open crs
fetch crs into @TabloIsmi
while @@fetch_status = 0 begin
  insert into #tablolistesi
  exec sp_spaceused @TabloIsmi
  fetch crs into @TabloIsmi
end
close crs
deallocate crs

select * from #tablolistesi
order by convert(int, substring(reserveedilmisalan, 1, len(reserveedilmisalan)-3)) desc

drop table #tablolistesi

 

 

Loading

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir