MSSQL Server Tempdb İnitial Size-Data File Path Bilgileri ve Data File IO Değerlerini Görme

Bu makalede mssql server tempdb veritabanı üzerinde initial size değerini, data file path bilgilerini ayrıca hangi tempdb data file üzerinde IO sorunu olduğunu görebiliriz.

Aşağıdaki komut ile tempdb anlık boyutunu görebiliriz.

SELECT
name
,size*8.0/1024/1024 'Current Size in GB'
FROM
tempdb.sys.database_files

Aşağıdaki komut yardımıyla tempdb dosyalarının initial size değerini görebiliriz.

SELECT
name
, size*8.0/1024/1024
'Initial Size in GB'
FROM master.sys.sysaltfiles WHERE dbid = 2

Aşağıdaki script ile tempdb dosyalarının boyutu, bulunduğu path bilgisi ve growth değerini görebiliriz.

USE tempdb;
GO
SELECT
name AS [FileName],
size * 8 / 1024 AS [CurrentSizeMB], -- Şu anki boyut
growth * 8 / 1024 AS [GrowthIncrementMB], -- Artış miktarı
max_size * 8 / 1024 AS [MaxSize_MB], -- Maksimum boyut
physical_name AS [FilePath]
FROM sys.database_files;

İkinci bir komut:

select*from sys.sysaltfiles where dbid=DB_ID('TEMPDB')

Aşağıdaki komut ile de tempdb yollarını öğrenmiş oluyoruz.

USE TempDB
GO
EXEC sp_helpfile
GO

Tempdb başlangıç boyutu maksimum tempdb kullanımın %25-30 kadar uygulanmalıdır. Bu dilim varsayılandır. İyi diskleriniz veya memory konusunda sıkıntı yaşamıyorsan bu boyut artırılabilir. Tempdb dosyalarının autogrowth değeri 512 MB veya 1 GB’lık büyütme adımlarıyla ayarlamamız gerekmektedir.

Gerçek sistem üzerinde tempdb başlangıç olarak initial size değeri tempdb sayısına bağlı 50-100 GB olarak yapılandırılabilir.

Aşağıdaki komut ile hangi dosyada IO sorunu olduğunu görebiliriz.

SELECT 
    DB_NAME(mf.database_id) AS DbName,
    mf.physical_name,
    vfs.num_of_writes,
    vfs.io_stall_write_ms,
    vfs.io_stall_write_ms / NULLIF(vfs.num_of_writes, 0) AS AvgWriteMs
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS vfs
JOIN sys.master_files AS mf 
  ON mf.database_id = vfs.database_id AND mf.file_id = vfs.file_id where DB_NAME(mf.database_id)='tempdb'
ORDER BY AvgWriteMs DESC;

Gerçek sistem üzerinde karşılaşılan bir sorun üzerine system restart olduktan sonra sql server tempdb dosyaları eşit bir şekilde büyümesi gerekirken bazı dosyaların anormal bir şekilde büyüdüğü görülmektedir. Aşağıdaki komut ile tempdb anlık boyutunu görebiliriz.

SELECT
name
,size*8.0/1024/1024 'Current Size in GB'
FROM
tempdb.sys.database_files

Yukarıdaki komutla anlık boyutlarına baktıktan sonra aşağıdaki komut yardımıyla tempdb dosyalarının initial size değerini görebiliriz.

SELECT
name
, size*8.0/1024/1024
'Initial Size in GB'
FROM master.sys.sysaltfiles WHERE dbid = 2

Resimde dikkat edilirse initial size değeri 120 GB yakın bir şey verilmiş. Buda sql server açılırken tempdb nin 120 GB yakın alan tahsis edeceğini performans anlamında bizlere sıkıntı yaşatacağı görülmektedir.

Böyle bir sorunla karşılaşılırsa modify komutuyla tüm dosyalar güncellenmelidir. Bu gibi initial size boyut değişikliğinde servis restart gerektirmez. Bu işlem ssms arayüzünden de yapılabilir.

Güncelleme komutu:

ALTER DATABASE tempdb MODIFY FILE( NAME = temp2, FILENAME = 'T:\TEMPDB\tempdb_mssql_2.ndf',SIZE = 1024,FILEGROWTH = 512);

Tempdb restart olduktan sonra yukarıdaki değerler set edilmiş olmaktadır. Başka bir makalede görüşmek dileğiyle….

Author: Yunus YÜCEL

Bir yanıt yazın

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