当前位置:首页 > 系统运维 > 正文内容

SQL Server性能的提高,可通过DBCC DBREINDEX重建索引

a8116255316年前 (2010-07-26)系统运维10

以下的文章主要介绍的是DBCC DBREINDEX重建索引对SQL Server性能进行提高的实际操作步骤,大多数SQL Server数据库表需要索引来对数据的实际访问速度进行提高,假如没有索引,SQL Server要进行表格扫描读取表中的每一个记录才能找到索要的数据。

索引可以分为簇索引和非簇索

引,簇索引通过重排表中的数据来提高数据的访问速度,而非簇索引提高SQL Server性能则通过维护表中的数据

指针来提高数据的索引。

1. 索引的体系结构

为什么要不断的维护表的索引?首先,简单介绍一下索引的体系结构。SQL

Server在硬盘中用8KB页面在数据库文件内存放数据。缺省情况下这些页面及其包含的数据

是无组织的。为了使混乱变为有序,就要生成索引。生成索引后,就有了索引页和数据页,

数据页保存用户写入的数据信息。索引页存放用于检索列的数据值清单(关键字)和索引表

中该值所在纪录的地址指针。索引分为簇索引和非簇索引,簇索引实质上是将表中的数据排

序,就好像是字典的索引目录。非簇索引不对数据排序,它只保存了数据的指针地址。向一

个带簇索引提高SQL Server性能的表中插入数据,当数据页达到100%时,由于页面没有空间插入新的的纪录,这

时就会发生分页,SQL Server

将大约一半的数据从满页中移到空页中,从而生成两个半的满页。这样就有大量的数据空间

。簇索引是双向链表,在每一页的头部保存了前一页、后一页地址以及分页后数据移动的地

址,由于新页可能在数据库文件中的任何地方,因此页面的链接不一定指向磁盘的下一个物

理页,链接可能指向了另一个区域,这就形成了分块,从而减慢了系统的速度。对于带簇索

引和非簇索引的表来说,非簇索引的关键字是指向簇索引的,而不是指向数据页的本身。

为了克服数据分块带来的负面影响,需要重构表的索引,这是非常费时的,因此只能在需要

时进行。可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引提高SQL Server性能。

2. DBCC SHOWCONTIG用法 下面举例来说明DBCC SHOWCONTIG和DBCC

REDBINDEX的使用 *** 。以应用程序中的Employee数据表作为例子,在 SQL Server的Query

*** yzer输入命令:

use database_name declare @table_id int set @table_id=object_id(’Employee’) dbcc showcontig(@table_id)

输出结果:

DBCC SHOWCONTIG scanning ’Employee’ table... Table: ’Employee’   (1195151303); index ID: 1, database ID: 53 TABLE level scan performed. - Pages   Scanned................................: 179 - Extents   Scanned..............................: 24 - Extent   switches..............................: 24 - Avg. Pages per   Extent........................: 7.5 - Scan Density [Best Count:Actual   Count].......: 92.00% [23:25] - Logical Scan Fragmentation ..................:   0.56% - Extent Scan Fragmentation ...................: 12.50% - Avg. Bytes Free   per Page.....................: 552.3 - Avg. Page Density   (full).....................: 93.18% DBCC execution completed. If DBCC printed   error messages, contact your system administrator.  

通过分析这些结果可以知道该表的索引是否需要重构。如下描述了每一行的意义: 信息

描述 Pages Scanned 表或索引中的长页数 Extents Scanned

表或索引中的长区页数 Extent Switches

DBCC遍历页时从一个区域到另一个区域的次数 Avg. Pages per Extent

相关区域中的页数 Scan Density[Best Count:Actual Count] Best

Count是连续链接时的理想区域改变数,Actual Count是实际区域改变数,Scan

Density为100%表示没有分块。 Logical Scan Fragmentation

扫描索引页中失序页的百分比 Extent Scan Fragmentation

不实际相邻和包含链路中所有链接页的区域数 Avg. Bytes Free per Page

扫描页面中平均自由字节数 Avg. Page Density (full)

平均页密度,表示页有多满

从上面命令的执行结果可以看的出来,Best count为23 而Actual

Count为25这表明orders表有分块需要重构表索引。下面通过DBCC

DBREINDEX来重构表的簇索引。

3. DBCC DBREINDEX 用法 重建指定数据库中表的一个或多个索引。

语法 DBCC DBREINDEX ( [ ’database.owner.table_name’ [ , index_name [ ,

fillfactor ] ] ] )

参数 ’database.owner.table_name’

是要重建其指定的索引的表名。数据库、所有者和表名必须符合标识符的规则。有关更多信

息,请参见使用标识符。假如提供 database 或 owner 部分,则必须使用单引号 (’)

将整个 database.owner.table_name 括起来。假如只指定 table_name,则不需要单引号。

index_name 是要重建的索引名。索引名必须符合标识符的规则。假如未指定 index_name

或指定为 ’ ’,就要对表的所有索引进行重建。

fillfactor 是创建索引时每个索引页上要用于存储数据的空间百分比。fillfactor

替换起始填充因子以作为索引或任何其它重建的非聚集索引(因为已重建聚集索引)的新默

认值。假如 fillfactor 为 0,DBCC DBREINDEX 在创建索引提高SQL Server性能时将使用指定的起始

fillfactor。

同样在Query Analyzer中输入命令:

dbcc dbreindex(’database_name.dbo.Employee’,’’,90) 

然后再用DBCC SHOWCONTIG查看重构索引提高SQL Server性能后的结果:

DBCC SHOWCONTIG scanning   ’Employee’ table... Table: ’Employee’ (1195151303); index ID: 1, database ID: 53   TABLE level scan performed. - Pages Scanned................................: 178   - Extents Scanned..............................: 23 - Extent   Switches..............................: 22 - Avg. Pages per   Extent........................: 7.7 - Scan Density [Best Count:Actual   Count].......: 100.00% [23:23] - Logical Scan Fragmentation ..................:   0.00% - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free   per Page.....................: 509.5 - Avg. Page Density   (full).....................: 93.70% DBCC execution completed. If DBCC printed   error messages, contact your system administrator. 

通过结果我们可以看到Scan Denity为100%。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/22258.html

分享给朋友:

“SQL Server性能的提高,可通过DBCC DBREINDEX重建索引” 的相关文章

Windows7开机后出现黑一下屏性能降低

Windows7开机后出现黑一下屏性能降低

打开IE浏览器的时候、聊QQ的时候、玩游戏的时候… … 这到底是谁惹的祸呢? 很多人都知道Windows 7桌面特效全部开启会使系统性能降低,那到底是哪个特效导致的这一情况呢? 解决办法: 右键计算机,高级系统设置-性能-设置-关闭”任务栏和开始菜单使用动画“和”最大化和最小化动态显示窗口“...

windows 7查看电脑近期使用情况确定有没有被他人使用

windows 7查看电脑近期使用情况确定有没有被他人使用

我一个朋友最近装装了Windows 7,他总感觉有人用了他的电脑,但是一直不确定,他想知道有没有人动用他的电脑,问我有没有办法 我说设置一下就行了: 启动Windows 7,在搜索栏中输入编辑组,马上就搜索到了编辑组策略,点击即可启动程序编辑组策略。依次展开组策略左侧树形列表的计算机配置/管理模...

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。 1、在开始搜索框中键入“regedit”,按回车键打开注册表编辑器。 2、依次定位到以下分支:HKEY_CLASSES_ROOTlnkfile。 3、在lnkfile项上鼠标右键单击“新建”——“字符串值”。...

windows 7系统重装后卡在正在启动Windows开机界面怎么办

windows 7系统重装后卡在正在启动Windows开机界面怎么办

重装系统是我们面对许多电脑问题时的终极方法,不过重装系统也不意味着就能将全部的问题都修复。一些用户在重装系统后开机时,电脑卡在“正在启动Windows”开机界面上了,这要怎么解决呢? Windows 7系统重装后卡在开机界面的解决方法: 一、首先可以看看该故障出现的原因是否是因为启动了acp...

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...

windows 7为什么老掉线 windows 7使用迅雷或快车下载的时候老掉

windows 7为什么老掉线 windows 7使用迅雷或快车下载的时候老掉

经过几天的测试后发现,Windows 7用户反映的情况确实存在,但并没有达到“频繁”的情况。同时,也并非是迅雷或快车抢了带宽。(即便是抢了带宽,表现的形式也是页面打开慢,而非是掉线),寻找问题的原因过程中,我们认为是Windows 7系统对于网卡的电源管理的默认设置造成的。 下面,就以Window...