Used and Allocated Data Size Calculate for LOB and Regular Data

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.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 […]

Used and Allocated Data Size Calculate for LOB and Regular Data

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

Benzer Yazılar

TAIL-LOG BACKUP İLE DATABASE’E ATILAN SON COMMIT’E GERİ DÖNME

SQL Server 2 ay önce

Bu yazımızda “.LDF” dosyası üzerinden tail-log backup alarak database’in son commit olan haline kadar geri dönme işlemi nasıl yapılıyor bu konuyu anlatacağım. Ama ondan önce tail-log backup ne için kullanılır ve nedir onu bir açıklayalım; Bir database’i başka bir yere taşımak istediğimizde aşağıdaki görsel’de olduğu gibi bir tail-log backup alırız ve database restoring state düşer işlem yapılamaz olur. Sonrasında aldığımız tail-log’u yeni ayağa kaldırmak istediğimiz instance üzerinde, önceden restore edilen backup zinciri üzerine işleyerek ayağa kaldırırız. Bu şekilde hem veri bütünlüğü korunur(veri kaybı olmaz) hemde kısa süreli kesinti ile db’yi başka bir instance’de ayağa kaldırmış oluruz. Ama ben bu yazıda size daha farklı bir senaryo üzerinde size tail-log’u anlatacağım. DİPNOT OLARAK; tail-log backup alındığında DB restoring state’e düşer, aynı tail-log restore edildiğinde db restoring state’ten Online state’e geçer. Tail-log backup aslında .LDF dosyasını truncate etmeyen bir log backup türevidir.   Basit bir senaryo üzerinde anlatacak olursak; Öncelikle bir adet full […]

SQL DATE FUNCTIONS

T-SQL 9 ay önce

SQL Server’da kullanmış olduğumuz bir çok fonksiyon vardır. Bu fonksiyonlardan bir taneside tarih ile alakalı olarak kullanmış olduğumuz  “DATE” fonksiyonlarıdır. Bu yazımızda sizlere; DATEDIFF DATEPART VE DATENAME DATEADD DATEDIFF_BIG GETDATE Fonksiyolarını anlatacağım. DATEDIFF(interval, date1, date2) FUNCTIONS DATEDIFF() fonksiyonun temel kullanım amacı girilen iki tarih arasında geçen zaman farkı yıl, ay veya gün olarak “INT” türünden almamızı sağlamaktadır. Bu fonksiyon 3 adet parametreden oluşur. Bulmak istediğiniz zaman farkını hangi zaman diliminden istediğiniz(Year-Month-Day) Başlangıç tarihi Bitiş tarihi DATEDIFF_BIG(datepart,startdate,enddate)FUNCTIONS DATEDIFF_BIG fonksiyonu, verilen iki tarih arasındaki farkı “BIGINT” türünden hesaplamaktadır. DATEDIFF fonksiyonuda verilen iki tarih arasındaki farkı hesaplamaktadır fakat “INT” türünden hesap yapar ve bizim yapacağımız çalışma “INT (max=2,147,483,647)”türünden büyük ise yetersiz kalacaktır. Yukarıdaki sorgumuzda DATEDIFF fonksiyonunun yapabileceği işlem limitinden fazla bir değer aralığı yaptık ve hata aldık. Aynı sorguyu DATEDIFF_BIG ile yaptığımızda ise herhangi bir hata almadık DATEPART&DATENAME(datepart , date) FUNCTIONS DATENAME ve DATEPART fonksiyonları belli bir zaman dilimindeki tarihlerin belirtilen bir bölümünü döndürür. Aralarındaki […]

Sleeping Session Kill Script – II

T-SQL 1 yıl önce

Bir önceki yazımızda az yoğun olup sorun yaratabilecek sistemlerde (örn.log shipping) sleeping sesion’ların killl edilmesine ilişkin yazıya (Sleeping Session Kill Script -I) ek olarak, bu yazımızda yoğun transaction olan yerlerde sleeping sessionların killl edilmesine ilişkin yazımızı paylaşacağız. Yoğun transaction olan yerlerde Sleeping session’lar lock oluşturarak kaynak tüketimini artırmakta ve sistemde dar boğaza sebebiyet verebilmektedir. Bu tür yoğun olan sistemlerde running, runnable veya suspend modda bekleyen session_id ‘leri kill etmek he uygulamada hemde veri tabanlarında büyük sorunlara sebebiyet verebilmektedir. bİZ DBA’ların en dikkat ettiği durumlardan biride bir DML işleminin rollback olması durumunda yaşanabilecek senaryolardır. Böyle bir durumla karşlılaşmamak adına Kimberly L. Tripp, Adam Machanic’in yayınlamış olduğu sp_whoisactive çıktısının sonucunda sleeping session’ları kill etmenin iyi bir yöntem olduğunu savunmaktadır. Aşağıda scriptlere ulaşabilirsiniz eğer sorguları bir job içerisine koyup belirli bir zaman dilimine bağlarsanız sürekli olarak sleeping session’ları kill edebilirsiniz. Ancak çok yoğun olarak kullanılan sistemlerde herhangi bir tempdb contentaion’ı yaşadığınızda, sp_whoisactive çıktısı […]

0 Yorum

Yorum Yaz

Rastgele