Aşağıdaki SQL kodu ile MS SQL Server üzerinde bulunan tüm veritabanlarının önbellekte ne kadar yer tuttuğunu öğrenebilirsiniz.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
MS SQL Server'da hangi veritabanının ne kadar yer tuttuğunu gösteren aşağıdaki SQL'in çalışma süresi, | |
veritabanı büyüklüğüyle doğru orantılıdır. Birkaç dakika sürebilir. | |
*/ | |
SELECT CAST(COUNT(1) * 8 / 1024.0 AS NUMERIC(10, 2)) AS CachedDataMB, | |
CASE database_id WHEN 32767 THEN '* Resource DB' ELSE DB_NAME(database_id) END AS DatabaseName, database_id DatabaseID | |
FROM sys.dm_os_buffer_descriptors | |
GROUP BY DB_NAME(database_id) , database_id ORDER BY DB_NAME(database_id) |
Önbellek kullanımı sayesinde, veritabanı nesneleri ve sorguların yürütme planları (execution plan) sunucu hafızasında tutulur. Bu sayede hafızadan okumaya nazaran çok daha yavaş bir işlem olan diskten okuma işlemi yerine hafızadan okuma işlemi yapılarak performans artışı sağlanır.
Bir veritabanının ne kadar yer tuttuğunu ise aşağıdaki komut ile öğrenmek mümkün:
sp_spaceused
Veritabanının diskte tuttuğu yer ile önbellekte kullandığı yeri, yukarıda belirttiğimiz sql sorgusu ve sp_spaceused prosedürünü kullanarak karşılaştırabilirsiniz.