我们都知道sqlserver存在缓存机制,那么我们要想知道到底缓存了哪些数据,每个库缓存了多大的数据?
我们可以用一个DMV查看,sys.dm_os_buffer_descriptors
select COUNT(*)*8 as KB,case database_id when 32767 then 'ResourceDb' else DB_NAME(database_id) end dbname from sys.dm_os_buffer_descriptors group by database_id
这样的话我们可以看到每个数据库缓存的数据大小,同时我们也可以根据is_modified来判断每个库的修改比例
select COUNT(*)*8/1000 as MB,DB_NAME(a.database_id),b.weigai,COUNT(*) 总数,100-(b.weigai*1.00/COUNT(*))*100 百分比 from sys.dm_os_buffer_descriptors a left join (select COUNT(*) weigai,database_id from sys.dm_os_buffer_descriptors where is_modified=0 group by database_id) b on a.database_id=b.database_id group by a.database_id ,b.weigai
其中的百分比就是缓存数据修改的比例,如果百分比越接近0那说明这个库读操作越高