第十章——维护索引(9)——监控索引消耗的空间

简介: 原文: 第十章——维护索引(9)——监控索引消耗的空间 前言:性能优化是DBA的工作之一,但是同时,DBA还需要关心SQLServer实例、数据库消耗的空间、提供数据库用户高可用性、管理数据库备份策略等等。
原文: 第十章——维护索引(9)——监控索引消耗的空间

前言:

性能优化是DBA的工作之一,但是同时,DBA还需要关心SQLServer实例、数据库消耗的空间、提供数据库用户高可用性、管理数据库备份策略等等。

磁盘空间的管理是一件非常重要的事情,DBA需要关注磁盘空间和未使用索引的空间消耗情况,管理数据文件和日志文件的大小等等。在其他章节和本章都有提到,索引会消耗磁盘空间。所以,是时候去管理这部分的内容。

 

准备工作:

在开始之前,先要确保:

1、 用户具有VIEW DATABASE STATE权限。

2、 了解sys.dm_db_partition_stats动态管理视图。

 

步骤:

1、 运行下面语句:

--显示索引消耗的磁盘情况
SELECT  CASE InnerTable.index_id
          WHEN 0 THEN 'HEAP'
          WHEN 1 THEN 'Clustered Index'
          ELSE 'Non-Clustered Index'
        END AS Index_Type ,
        SUM(CASE WHEN FilledPage > PageToDeduct
                 THEN ( FilledPage - PageToDeduct )
                 ELSE 0
            END) * 8 Index_Size
FROM    ( SELECT    partition_id ,
                    index_id ,
                    SUM(used_page_count) AS FilledPage ,
                    SUM(CASE WHEN ( index_id < 2 )
                             THEN ( in_row_data_page_count
                                    + lob_used_page_count
                                    + row_overflow_used_page_count )
                             ELSE lob_used_page_count
                                  + row_overflow_used_page_count
                        END) AS PageToDeduct
          FROM      sys.dm_db_partition_stats
          GROUP BY  partition_id ,
                    index_id
        ) AS InnerTable
GROUP BY CASE InnerTable.index_id
           WHEN 0 THEN 'HEAP'
           WHEN 1 THEN 'Clustered Index'
           ELSE 'Non-Clustered Index'
         END 
GO



分析: 

          Sys.dm_db_partition_stats提供了有用的信息给DBA,例如每个表的每个分区的总行数、已经使用的页、预留给LOB、in-row、overflow的页,每个页占用8K,所以统计所有的页并乘以8,就可以知道总的KB数。

          我们可以使用Used_Page_Count列,显示一个对象总共用了多少页,如果是堆或者聚集索引,就去除in_row_data_page_count、lob_used_page_count和row_overflow_used_page_count,否则只需要移除上面的最后两个即可。

目录
相关文章
|
27天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
22天前
|
存储 关系型数据库 MySQL
mysql索引优化,更好的创建和使用索引
mysql索引优化,更好的创建和使用索引
|
11月前
|
存储 关系型数据库 MySQL
第七章 创建⾼性能的索引
第七章 创建⾼性能的索引
|
SQL 存储 缓存
索引不是越多越好,理解索引结构原理,才有助于我们建立合适的索引!
MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引。
589 0
|
存储 缓存 分布式计算
指定表和分区来预先缓存,查询分析更高效 | 学习笔记
快速学习指定表和分区来预先缓存,查询分析更高效。
135 0
|
Go 索引
维护索引——通过重组索引提高性能
原文:维护索引——通过重组索引提高性能 前言: 如果碎片程度小于30%,建议使用重组而不是重建。因为重组不会锁住数据页或者数据表,并且降低CPU的资源。 总得来说,重组会清空当前的B-TREE,特别是索引的叶子节点,重组数据页和消除碎片。
1049 0

热门文章

最新文章