<%@ page contentType="text/html; charset=gb2312"%> 识别外部或内部表碎片
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
识别外部或内部表碎片
     发布者: 发布时间:2006-05-07

本文描述了如何识别那些内部(在数据页内部)或者外部(在数据页外部)产生碎片的表。

  对一个大数据库执行dbcc re-index的过程是一项很消耗时间的任务。大多数情况下,碎片只是发生在数据库的一部分,并且集中在少数几个表中。应该对这些表进行充分地重建索引,这样宝贵的时间和计算机资源就会被节省下来。

  这里我描述一下识别产生碎片的表的方法。我使用dbcc showcontig t-sql语句作为基本语句,来收集使用了群集索引(clustered index)的数据库中所有的用户表信息。在这里,假设群集索引中的碎片会导致所有其他索引中产生碎片,因为群集索引(cluster index)被作为“群集关键字(cluster key)”与所有其他的在其上构造的非群集索引(non-clustered index)一起使用。

  我使用带有tablesresult子句的dbcc showcontig语句来查询产生的结果表,以列出所有包含内部碎片或者外部碎片的表的名字,其中内部碎片低于一个给定的可接受的扫描密度百分比,外部碎片大于一个给定的外部碎片百分比。产生的表应该用re-index 或 index defrag进行碎片整理。

  下面是识别包含碎片的表的程序代码。这个程序需在数据库中编译,以便进行重建索引。


create procedure sp_list_fragmented_tables
  ( @internalfragmentationpctallowed int,
    @externalfragmentationpctallowed int )
as
begin
  declare @showcontigstmt varchar(100)
  declare @currtable         varchar(50)

/*定义有一个集群索引的user表的指针*/

  declare c_examined_tables
        cursor for select a.table_name from
        information_schema.tables a,sysindexes b
        where             a.table_type = ''base table'' and
                a.table_name = object_name (b.id) and
                b.indid = 1
  set nocount on

/* 生成作为临时图表的结果图表*/  

  create table #showcontigresults
        (objectname sysname,
         objectid bigint,
         indexname sysname,
         indexid int,
         [level] int,
         pages int ,
         [rows] bigint,
         minrecsize int,
         maxrecsize int,
         avgrecsize real ,
         forwardrecs int,
         extents int,
         extentswitches int,
         avgfreebytes real,
         avgpagedensity real,
         scandensity decimal(5,2),
         bestcount int,
         actcount int,
         logicalfrag decimal (5,2),
         extentfragmentation decimal (5,2))
 
  /* 循环所有的图表并执行以tableresults格式的dbcc showcontig 语句  */

  open c_examined_tables
  fetch next from c_examined_tables into @currtable
  while @@fetch_status = 0
   begin
     set @showcontigstmt = ''dbcc showcontig (['' + @currtable + ''])'' +
                '' with tableresults''
     insert  #showcontigresults exec (@showcontigstmt)
     fetch next from c_examined_tables into @currtable
   end

  close c_examined_tables
  deallocate c_examined_tables

 /* 输出符号条件的碎片对象*/
  select objectname ,  scandensity , extentfragmentation
  from #showcontigresults
  where scandensity < @internalfragmentationpctallowed or
        extentfragmentation > @externalfragmentationpctallowed
 
end
go

下面是调用函数的例子:
/* 列出少于50% scan密度的 (内部碎片) 和超过10% 外部碎片图表 */
exec sp_list_fragmented_tables 50,10

  我在这里展示的过程可作为工具来识别包含碎片的表,并且将碎片整理或重建索引的维护任务集中在这些对象上,这样就可以减少大数据库中那些占用大量时间和资源的,对所有表进行重建索引的作业。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
sqlserver2005的可操纵性和商务分析方法
使用链接服务器和t-sql将查询结果写入excel
sqlserver计数器
sqlserver“yukon”beta1clr的基本架构(1)
sqlserver“yukon”beta1clr的基本架构(2)
sqlserver“yukon”beta1clr的基本架构(3)
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(7447)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(4498)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(5073)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(1416)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(8530)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(5549)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(4288)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号