查看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


相关文章
|
4月前
|
数据库 关系型数据库 MySQL
innodb_buffer_pool_size
【8月更文挑战第13天】
39 1
|
4月前
|
缓存 关系型数据库 MySQL
整体方案 参数调优 innodb_buffer_pool_size
【8月更文挑战第14天】
49 0
|
7月前
|
算法 安全 关系型数据库
深度|庖丁解InnoDB之Buffer Pool
聚焦在Buffer Pool的本职功能上,从其提供的接口、内存组织方式、Page获取、刷脏等方面进行介绍
105013 90
|
7月前
|
监控 关系型数据库 MySQL
innodb_buffer_pool_instances 如何根据cpu和内存进行配置
`innodb_buffer_pool_instances` 是用于配置 InnoDB 缓冲池实例数的参数。每个实例都管理缓冲池的一部分,这有助于提高并发性能。通常,你可以根据系统的 CPU 和内存来调整这个参数,以获得更好的性能。 以下是一些建议和步骤,帮助你根据 CPU 和内存进行 `innodb_buffer_pool_instances` 的配置: 1. **了解系统资源:** 首先,了解系统的硬件资源,特别是内存和CPU。检查系统上可用的物理内存和 CPU 核心数量。 2. **考虑每个实例的大小:** 在配置 `innodb_buffer_pool_instances` 时,
259 0
|
7月前
|
存储 算法 关系型数据库
Buffer Pool
Buffer Pool
61 1
|
存储 缓存 关系型数据库
多个buffer Pool实例 (3)—Buffer Pool(五十六)
多个buffer Pool实例 (3)—Buffer Pool(五十六)
|
存储 缓存 关系型数据库
磁盘&CPU调节(1)—Buffer Pool(五十四)
磁盘&CPU调节(1)—Buffer Pool(五十四)
|
SQL 缓存 算法
缓冲池(buffer pool),这次彻底懂了!!!
缓冲池(buffer pool)是一种常见的降低磁盘访问的机制。
3927 0
缓冲池(buffer pool),这次彻底懂了!!!