查看buffer pool数据密度

简介:

我们都知道SQL Server访问的数据会放到Buffer Pool中,但是你知道Buffer Pool中使用的数据密度吗? 如果Buffer Pool中我们要查询数据的密度小,说明很多无用的内存被占用了,导致内存的浪费。 那么如何查看buffer pool中数据的密度呢?

 

SQL Server2005版本中提供了sys.dm_os_buffer_descriptors DMV,使用这个View可以查询到SQL Server 缓冲池中当前所有数据页的信息。 字段free_space_in_bytes追踪了每个页面上的空闲空间,将所有的空闲页面最汇总我们就可以得出数据的密度。

 

下面的脚本可以查看每个数据库占用的Buffer Pool空间以及空数据占用的内存空间。

 

SELECT

(CASEWHEN([database_id]= 32767)

THEN 'Resource Database'

ELSE DB_NAME([database_id])END)AS [DatabaseName],

COUNT(*)* 8/ 1024AS [MBUsed],

SUM(CAST([free_space_in_bytes]ASBIGINT))/(1024* 1024) AS [MBEmpty]

FROM sys.dm_os_buffer_descriptors

GROUP BY [database_id];

GO

 

Resource Database 总共占用了28M的Buffer Pool,其中空的部分为7M。

 

DatabaseName MBUsed MBEmpty

------------------------------------------------------------------------------ -----------------

Resource Database 28 7

 

如果发生有低密度数据可以与sys.allocation_units进行关联可以追踪到每个Object内存使用状况。

 

造成低数据密度的可能原因:

  • 分页
  • 大数据列(比如一张表字段为500个字符,那么就会有3000字节的浪费)
  • 数据删除后空间没有被重用

几种解决办法:

  • 更改表Schema
  • 更改索引列(比如更改为GUID或者identity列)
  • 使用FILLFACTOR减少分页】
  • 定期重建索引或者组织索引
  • 启动数据压缩

 

本文转自 lzf328 51CTO博客,原文链接:http://blog.51cto.com/lzf328/1002161


相关文章
|
8月前
|
算法 安全 关系型数据库
深度|庖丁解InnoDB之Buffer Pool
聚焦在Buffer Pool的本职功能上,从其提供的接口、内存组织方式、Page获取、刷脏等方面进行介绍
105138 90
|
5月前
|
缓存 关系型数据库 MySQL
整体方案 参数调优 innodb_buffer_pool_size
【8月更文挑战第14天】
62 0
|
8月前
|
存储 算法 关系型数据库
Buffer Pool
Buffer Pool
76 1
Cache 和 Buffer 有什么区别?
Cache 和 Buffer 有什么区别?
143 0
|
存储 缓存 关系型数据库
多个buffer Pool实例 (3)—Buffer Pool(五十六)
多个buffer Pool实例 (3)—Buffer Pool(五十六)
|
存储 缓存 关系型数据库
磁盘&CPU调节(1)—Buffer Pool(五十四)
磁盘&CPU调节(1)—Buffer Pool(五十四)
|
SQL 缓存 算法
缓冲池(buffer pool),这次彻底懂了!!!
缓冲池(buffer pool)是一种常见的降低磁盘访问的机制。
4096 0
缓冲池(buffer pool),这次彻底懂了!!!