dm_io_virtual_file_stats DMV

SQL Server 2005 ile birlikte gelen DMVler (Dynamic Management Views, Dinamik Yönetim Görüntüleri), SQL Server’in iç dünyasında olup bitenler hakkında önemli bilgiler sunan nesneler kütüphanesidir. Sistem tablolarından beslenen bu nesneler bazen sistemle ilgili anlık bilgiler bazen de geçmiş bilgiler sunar. Bunlarcan onlarca bulunduğu için hepsini bilmek mümkün değil ancak I/O, memory tabanlı performans verileri veya kullanıcı / oturumla ilgili tarihçeye erişmek için kullanacaklarımızı elimizin altında bulundurmamız faydalı olacaktır. Bu sitede yeri geldikçe en çok kullanılanları paylaşmaya çalışacağız.

Bu nesneler sys şeması altında barındırılmaktadır. “dm_” önekiyle başlayan nesneler çalışma amaçlarına uygun olarak isimlendirilmiştir. Örneğin oturumla veya sorgu yürütmeyle ilgili nesneler “dm_exec_” ile, SQL Server ile işletim sistemi arasındaki işlemlerle ilgili nesneler “dm_os_” ile, mevcut transactionlarla ilgili nesneler “dm_tran_” ile başlamaktadır.
Bu yazıda belli periyotlarda kullandığım dm_io_virtual_file_stats fonksiyonunu örneklendireceğiz. SQL Server en son açılıştan bu yana yürütme planları, kaynak kullanımı, index’lerin fiziksel mantıksal kullanımlarıyla ilgili verileri kaydeder. Bunları sorgulayarak sistemin durumu hakkında bilgi alabiliriz. dm_io_virtual_file_stats fonksiyonu bunlardan biri olup veritabanlarına ait data ve log dosyalarının I/O kullanım istatistiklerini döndürür.
sys.dm_io_virtual_file_stats (
{ database_id | NULL }
, { file_id | NULL }
)

Bu fonksiyon aracılığıyla veritablarının I/O cephesinde ne kadar meşgul edildiklerini öğrenebiliriz. Aşağıdaki script AK isimli veritabanı hakkında bilgi vermektedir.

SELECT CAST(DB_NAME(m.database_id) AS VARCHAR(24)) AS 'Veritabanı Adı',
CAST(m.physical_name AS VARCHAR(72)) AS 'Dosya',
s.num_of_reads,
	       s.num_of_bytes_read,
	       s.num_of_writes,
	       s.num_of_bytes_written,
	       s.size_on_disk_bytes
FROM sys.dm_io_virtual_file_stats(null,null) AS s JOIN sys.master_files AS m
ON m.database_id = s.database_id AND m.FILE_ID = s.FILE_ID
WHERE DB_NAME(m.database_id) = 'AK'


database_id ve file_id olmak üzere 2 parametre alan fonksiyonun döndürdüğü alanlar şunlardır;
sample_ms : SQL Server’in açılışından bu yana geçen süreyi milisaniye türünde belirtir.
num_of_reads : Veritabanına ait dosyadan kaç okuma yapıldığını belirtir.
num_of_bytes_read : Okuma işleminde kaç byte veri okunduğunu belirtir.
io_stall_read_ms : Okuma işleminde kullanıcının ne kadar beklediğini milisaniye cinsinden gösterir.
num_of_writes : Veritabanına ait dosyaya kaç yazma işlemi yapıldığını belirtir.
num_of_bytes_write : Dosyaya kaç byte veri yazıldığını belirtir.
io_stall_write_ms : Yazma işleminde kullanıcının bekleme süresini gösterir.
io_stall : IO işlemi yani yazma ve okuma işlemi için toplam bekleme süresini gösterir.
size_on_disk_bytes : Bu dosya için diskte ne kadar byte kullanıldığını belirtir.
Örneğin toplam süreyi, toplam işlem adetini bölecek olursak dosyaların veritabanı sistemi tarafından ne kadar frekansta kullanıldığını daha net görmüş oluruz.
SQL Server yeniden başlatıldığında bu veriler sıfırlanır.
SQL Server’de database dosyalarının mümkün olduğunca farklı fiziksel diskler üzerinde olması önemli bir performans sağlamaktadır. Aşağıdaki script veritabanı dosyalarının bulunduğu sürücüler üzerindeki trafiği gösterir.

select left(mf.physical_name, 1) as drive_letter, sample_ms,
sum(vfs.num_of_writes) as total_num_of_writes,
sum(vfs.num_of_bytes_written) as total_num_of_bytes_written,
sum(vfs.io_stall_write_ms) as total_io_stall_write_ms,
sum(vfs.num_of_reads) as total_num_of_reads,
sum(vfs.num_of_bytes_read) as total_num_of_bytes_read,
sum(vfs.io_stall_read_ms) as total_io_stall_read_ms,
sum(vfs.io_stall) as total_io_stall,
sum(vfs.size_on_disk_bytes) as total_size_on_disk_bytes
from sys.master_files mf
join sys.dm_io_virtual_file_stats(NULL, NULL) vfs
on mf.database_id=vfs.database_id and mf.file_id=vfs.file_id
group by left(mf.physical_name, 1), sample_ms

Bu sorgunun sonucunda trafiğin büyük bir kısmı belli sürücü(-ler) üzerinde akıyorsa oradaki bazı dosyaları başka sürücülere taşımamız fayda sağlayacaktır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir