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.
“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