Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Aralık 2017  >>
PaSaÇaPeCuCuPa
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Keywords

Daha önce şu makalemde bir instance’da bulunan tüm veritabanlarının boyutlarını sp_msforeachdb sistem prosedürünü kullanarak nasıl raporlayabileceğimizi görmüştük.

[more]

Bir müşterimde aynı raporu cursor kullanarak alma ihtiyacımız doğdu. Raporun cursor versiyonlu halini aşağıda paylaşıyorum.

create table #tmp1 (DBName varchar(100),reservedpages float,usedpages float,pages float)
declare @cmd varchar(max)='',
		@DBname sysname
		
select DB_NAME (dbid) as DBName, Cast(sum(Size)/128. as numeric(18,2)) as FileSize_MB
into #tmp2	   
from sys.sysaltfiles 
where dbid > 4  and dbid<1000 and groupid <> 0
group by DB_NAME (dbid)

declare curx cursor
for
	select name from sys.databases
	open curx
	fetch next from curx into @DBname
	while (@@FETCH_STATUS = 0) begin
		set @cmd='use '+ @DBname +'
			insert #tmp1
			select '''+@DBname+''',sum(a.total_pages) as reservedpages,  
				sum(a.used_pages) as usedpages,  
				sum(  
				CASE  
					When it.internal_type IN (202,204,211,212,213,214,215,216) Then 0  
					When a.type <> 1 Then a.used_pages  
					When p.index_id < 2 Then a.data_pages  
					Else 0  
				END ) as pages
			from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id  
			left join sys.internal_tables it on p.object_id = it.object_id'  
		exec (@cmd)
		fetch next from curx into @DBname
	end

close curx
deallocate curx

select  
	t1.DBName,
	t2.FileSize_MB,
	Cast(Round(t1.reservedpages * 8192 / 1024. /1024.,2) as Numeric(18,2)) as reserved_size_MB, 
	Cast(Round(t1.pages * 8192 / 1024. / 1024.,2) as Numeric(18,2)) as data_size_MB,
	Cast(Round((t1.usedpages - t1.pages) * 8192 / 1024. / 1024.,2) as Numeric(18,2)) as index_size_MB,
	Cast(Round(t1.usedpages * 8192 / 1024. / 1024.,2) as Numeric(18,2)) as total_used_size_MB,
	Cast(Round((t1.reservedpages - t1.usedpages) * 8192 / 1024. / 1024.,2) as Numeric(18,2)) as unused_from_reserved_size_MB,
	t2.FileSize_MB - Cast(Round(t1.reservedpages * 8192 / 1024. /1024.,2) as Numeric(18,2)) as unused_from_file_size_MB
from #tmp1 t1
join #tmp2 t2 on t2.DBName=t1.DBName
order by t1.DBName

drop table #tmp1
drop table #tmp2

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


10 Ekim 2012 Çarşamba günü yapacağım webcast’in duyurusunu yapmak istiyorum.

SQL Server 2012 yenilikleri üzerine konuşacağımız webcast saat 10:00’da başlayacak.

Kayıt olmak için aşağıdaki linki kullanabilirsiniz.

Başlangıcı: 10 Ekim 2012 Çarşamba 10:00
Saat dilimi: (GMT+02:00)
Süre: 1 saat 30 dakika
Kayıt Linki : https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032527841&Culture=TR-TR&community=0

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server Error Log best practice’lerini anlattığım şu makalemde Error Log sayısının öneminden de bahsetmiştik. Bugün göstereceğim script ile error log dosya sayısını TSQL ile nasıl sorgulayabileceğimize bakıyor olacağız.

[more]

SQL Server error log sayısını sorgulamak için aşağıdaki script’i kullanabilirsiniz.

declare @NumErrorLogs int

exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', 
	@NumErrorLogs OUTPUT

select @NumErrorLogs

Bu script’i registered servers özelliğini kullanarak tüm sunucular üzerinde tek seferde çalıştırarak best practice’e uymayan sunucularınızı kolayca bulabilirsiniz.

Bir diğer seçenek ise central management servers ile beraber policy based management kullanmak olabilir.

Son olarak SQL Server error log’lar ile ilgili aşağıdaki 2 makalemi okumanızı tavside ederek yazımı noktalıyorum.

SQL Server Logları’nı Okumak İçin Özelleştirilmiş Log Arama Stored Precedure ü

SQL Server Başarılı Backupların Error Log’a Yazılmasını Engellemek

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


SQL Server’da bulunan veritabanları üzerinde yapılan auto growth işlemlerinin ne kadar sürdüğünü ve ne zaman yapıldığını sorgulamak için default trace’i kullanabilirsiniz.

[more]

İlk olarak default trace sonuçlarının hangi file’da tutulduğuna bakıyoruz.

select * from sys.traces
where is_default=1

Yukarıdaki sorgu sonucu gelen result set’te bulunan path bilgisini fn_trace_gettable fonksiyonuna parametre olarak göndererek default trace’i sorguluyoruz.

SELECT databaseid, filename, SUM(IntegerData*8) AS Growth_KB, Duration, StartTime, Endtime
FROM ::fn_trace_gettable('C:\Program Files\Microsoft SQL Server\MSSQL11.SS2012\MSSQL\Log\log_31.trc', default)
WHERE EventClass = 92 OR EventClass = 93
GROUP BY databaseid, filename, IntegerData, Duration, StartTime, Endtime
ORDER BY StartTime

image

Sorgu sonucunda benim instance’imda gerçekleşen auto growth işlemlerini sorgulamış olduk.

Default trace bildiğiniz gibi belirli boyutta kayıt tutmakta. O yüzden auto growth işlem loglarını kaybetmemek adına ya default trace sonuçlarını belirli periyotlarda başka bir log tablosuna yazmamız ya da auto growth’ları monitor etmek için ayrı bir trace başlatmamız daha sağlıklı bir yaklaşım olacaktır.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


As you all know, on of the most important best practices is all data files of TempDB should be same size.

If you have 4 core processor on your box, then best practice is create Tempdb with 4 data files, and set the initial size for all of them. (let’s say 1 GB)

After that what if Tempdb needs to grow? At this time one of Tempdb data file will be grow and all data files’ size are not identical anymore.

There’s a trace flag for this purpose. With T1117 trace flag, you can keep all data files’ size same after auto growth. I mean all data files growth together if your database needs to grow

Let me give an example. Assume that your TempDB has 4 data files and each data file has 1GB initial size and 256Mb auto growth value. If Tempdb needs to grow, not only one data file grow, all data files grow together, so you can keep them same size.

One last word, this trace flag is instance wide. So every databases in this instance may affected by this behavior.

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan