SQL Server’da data boyutlarını hesaplamak için aşağıdaki yöntemi izleyebilirsiniz.
Data boyutlarını hesaplarken özellikle allocate edilmiş data ve kullanılan data boyutları farklı olacaktır.
Bunun sebebi ise bir veri tabanında oluşturulan bir tablonan boşaltılması veya index’in kaldırılması gibi bir çok etken vardır.
SQL Server’da allocate edilen boyutu kullanılan boyuta düşürmek için shrink yapmak gerekir.
Fakat data dosyalarında(mdf,ndf) shrink yapmak, özellikle yoğun transaction olan yerlerde büyük risk içermektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
--1.Adımda Instance altındaki tüm veri tabanlarının İmage ve Image olmayan dataların boyutlarının bilgisini aşağıdaki tabloya yazılmaktadır. USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[useddata]( [allocation_type] [varchar](12) NOT NULL, [used_mb] [numeric](36, 2) NULL, [allocated_mb] [numeric](36, 2) NULL ) ON [PRIMARY] GO --2.Adımda oluşturmuş olduğumuz tabloya Instance’daki tüm database’lerin bilgilerinin toplandığı script. --Kullanımda olan database'lerinizde . veya başka bir işaret var ise ? yerine [?] yazmanız gerekmektedir. declare @cmd nvarchar(max) set @cmd =' use [?]; insert into master..useddata select case when spc.type in (1, 3) then ''Regular data'' else ''LOB data'' end as allocation_type, cast(sum(spc.used_pages * 8) / 1024.00 as numeric(36, 2)) as used_mb, cast(sum(spc.total_pages * 8) / 1024.00 as numeric(36, 2)) as allocated_mb from sys.tables tab inner join sys.indexes ind on tab.object_id = ind.object_id inner join sys.partitions part on ind.object_id = part.object_id and ind.index_id = part.index_id inner join sys.allocation_units spc on part.partition_id = spc.container_id group by case when spc.type in (1, 3) then ''Regular data'' else ''LOB data'' end' execute sp_MSforeachdb @cmd --Eğer bir database'i boyut hesaplamadan ayrı tutmak istiyorsanız. --INFORMATION_SCHEMA.TABLES tablosu ile tables tablosunu join'leyerek istediğimiz yada istmediğimiz database'lerin bilgisine ulaşabiliriz. --3.Adımda tabloya Insert edilen database Size’ların Toplam Image, Toplam Regular, Toplam Boyut bilgilerini elde ettiğimiz script. SELECT sum(case when [allocation_type] = 'LOB data' then used_mb end) as LOBdataSize, sum(case when [allocation_type] = 'Regular data' then used_mb end) as RegularDataSize, sum(case when [allocation_type] in('Regular data','LOB data') then used_mb end) as TotalDataSize, sum(case when [allocation_type] = 'LOB data' then allocated_mb end) as AllocationLobDataSize, sum(case when [allocation_type] = 'Regular data' then allocated_mb end) as AllocationRegularDataSize, sum(case when [allocation_type] in('Regular data','LOB data') then allocated_mb end) as TotalAllocateDataSize FROM master.[dbo].[useddata] where used_mb <> '0.00' |