27 Mart 2014 Perşembe

Bir kaydın Data Cache'te olduğunu nasıl anlarsınız?

Belli bir veritabanındaki, belli bir tablodaki, belli bir kaydın Buffer Pool / Data Cache'te mi yoksa diskte mi olduğunu nasıl anlarsınız?

Öncelikle ilgilendiğiniz kaydın Page ID'sini bulmanız gerekiyor. Bunun için aşağıdaki gibi bir komut kullanabilirsiniz:

SELECT Teslim_Alan, sys.fn_physlocformatter(%%physloc%%) FROM dbo.tabloAdi WHERE xxx_No = 8071030185

Bu komutun sonucu aşağıdaki ekran görüntüsündeki gibi olacaktır:

İlgilendiğimiz kayıt ve Page bilgileri

sys.fn_physlocformatter(%%physloc%%) ile dönen veri bize ilgili kaydın fiziksel olarak nerede durduğunu gösteriyor. Açıklaması şöyle:

1 - Page'in bulunduğu dosyanın ID'si (File ID).
2 - Page ID
3 - Slot numarası

Artık elimizde ilgili kaydın gereken tüm fiziksel bilgileri var. Bu bilgileri kullanarak, önceki bir yazımda bahsettiğim gibi DBCC PAGE komutuyla ilgili Page hakkında daha fazla bilgiye de ulaşabilirsiniz, aşağıdaki DMV ile ilgili Page'in Data Cache'te olup olmadığını da kontrol edebilirsiniz.

SELECT * FROM sys.dm_os_buffer_descriptors WHERE page_id = 8867992 AND database_id = DB_ID()

Yukarıdaki komutu çalıştırdığınızda aşağıdaki gibi bir sonuç dönecektir:

İlgili Page'in Cache'te olup olmadığının sonucu
Eğer bir sonuç dönüyorsa, ilgili kayda ait Page, Cache'te demektir. Yani bu kayıt ile ilgili bir işlem yapmak istediğinizde, SQL Server diske gidip fiziksel IO yapmak zorunda kalmayacak, çok daha hızlı bir şekilde çalışabileceği RAM'e gidecek ve işlemi orada gerçekleştirecektir.

Not: sys.fn_physlocformatter(%%physloc%%) komutuna ait resmi Microsoft dokümanları bulamazsınız, çünkü Microsoft tarafından dokümante edilmemiş bir komuttur.

Ekrem Önsoy

Hiç yorum yok: