当前位置: 代码迷 >> Sql Server >> 怎么整理表碎片
  详细解决方案

怎么整理表碎片

热度:41   发布时间:2016-04-27 12:46:38.0
如何整理表碎片
ms sqlserver2000数据库,某个表经常做insert操作,不定时做delete操作,查询的速度较慢,如何整理表碎片而不中断业务?
索引的整理有命令可以在线做,但表的整理如何做?

如果用truncate然后插入表记录的方法肯定就需要停止业务了。除此之外还有别的方法吗?

解决立即给分,多谢!

------解决方案--------------------
整理索引碎片

  SQL Server 2000 支持联机索引重组,相比于以前的版本,这是一个非常大的进步。联机索引重组对事务的吞吐量影响非常小,并且可随时停止并重新启动,而不会影响其运行效果。索引重组操作按较小增量进行,并且可完全恢复。

  随着在表中插入、删除和更新信息,聚集和非聚集索引页最终将变得零碎,从而降低对数据的范围查询的效率。因此,定期整理索引碎片是非常有益的。可以使用 DBCC SHOWCONTIG(该命令在 SQL Server 2000 中已有所改进)分析并报告碎片。

  如果确定索引已变为碎片,就可以使用 DBCC INDEXDEFRAG 命令对其进行重组。该命令以逻辑键的顺序记录页,同时压缩可用空间,移动已建立的扩展中的行以满足填充因子设置。通过提高页面中内容的密度以减少数据扫描时读取的页数,从而提高读取性能。如果索引经常得到维护并且其分布不是完全散碎的,那么运行 DBCC INDEXDEFRAG 对联机性能的影响要远远小于重建索引。

  DBCC INDEXDEFRAG 是众多长期运行的管理操作中的一个,它们内部都使用短小的事务。这些短小的事务可最大限度提高服务器中的并发操作,允许操作停止而不影响工作,并且这些事务被全部记录以便在发生故障时进行恢复。

------解决方案--------------------
http://www.windbi.com/showtopic-38.aspx
------解决方案--------------------
转过来的:
http://book.77169.org/ask29/how204344.htm 
维护语句

DBCC DBREINDEX 重建指定数据库中表的一个或多个索引
DBCC DBREPAIR 除去损坏的数据库
DBCC INDEXDEFRAG 整理指定的表或视图的聚集索引和辅助索引碎片
DBCC SHRINKDATABASE 收缩指定数据库中的数据文件大小
DBCC SHRINKFILE 收缩相关数据库的指定数据文件或日志文件大小
DBCC UPDATEUSAGE 报告和更正 sysindexes 表的不正确内容,
该内容可能会导致通过 sp_spaceused 
系统存储过程产生不正确的空间使用报表


状态语句
DBCC INPUTBUFFER 显示从客户端发送到MS SQL Server 的最后一个语句
DBCC OPENTRAN 如果在指定数据库内存在最旧的活动事务和最旧的分布和非分布式复制事务,
则显示与之相关的信息。只有当存在活动事务或数据库包含复制信息时,
才显示结果。如果没有活动事务,就显示信息性消息
DBCC OUTPUTBUFFER 以十六进制或 ASCII 格式返回指定系统进程 ID (SPID) 的当前输出缓冲区
DBCC PROCCACHE 以报表形式显示有关过程高速缓存的信息
DBCC SHOWCONTIG 显示指定的表的数据和索引的碎片信息
DBCC SHOW_STATISTICS 显示指定表上的指定目标的当前分布统计信息
DBCC SQLPERF 提供有关所有数据库中的事务日志空间使用情况的统计信息
DBCC TRACESTATUS 显示跟踪标记的状态
DBCC USEROPTIONS 返回当前连接的活动(设置)的 SET 选项



验证语句
DBCC CHECKALLOC 检查指定数据库的磁盘空间分配结构的一致性
DBCC CHECKCATALOG 检查指定数据库中的系统表内及系统表间的一致性
DBCC CHECKCONSTRAINTS 检查指定表上的指定约束或所有约束的完整性
DBCC CHECKDB 检查指定数据库中的所有对象的分配和结构完整性
DBCC CHECKFILEGROUP 检查指定文件组中的所有表(在当前数据库中)的分配和结构完整性
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正DBCC CHECKTABLE
检查指定表或索引视图的数据、索引及 text、ntext 和 image 页的完整性
DBCC NEWALLOC 检查数据库的扩展结构内的每个表的数据和索引页的分配


其他语句
DBCC dllname (FREE) 从内存中卸载指定的扩展存储过程动态链接库 (DLL)
DBCC HELP 返回指定的 DBCC 语句的语法信息
DBCC PINTABLE 将表标记为驻留,这表示MS SQL Server不从内存中刷新表页
DBCC ROWLOCK 在MS SQL Server 6.5 版中使用,对表启用插入行锁定 (IRL) 操作
DBCC TRACEOFF 禁用指定的跟踪标记
DBCC TRACEON 打开(启用)指定的跟踪标记
DBCC UNPINTABLE 将表标记为不在内存驻留。将表标记为不在内存驻留后,
可以清空高速缓存中的表页
------解决方案--------------------
貌似整理索引碎片就是整理表碎片的哦!
http://www.sql-server-performance.com/articles/per/detect_fragmentation_sql2000_sql2005_p1.aspx
How can you measure a table that is fragmented and how can you reduce the fragmentation?

In SQL Server 2000, you can use DBCC SHOWCONTIG, which will show the scan density and fragmentation level of a table. If you use this statement and WITH TABLERESULTS then it displays results as a row set with additional information. The DBCC INDEXDEFRAG and DBCC DBREINDEX statements are best used to reduce table fragmentation.

DBCC INDEXDEFRAG will defrag the leaf level of an index, which will enable the physical order of pages to match the logical order of the leaf nodes. This statement reports the estimated percentage of the process every five minutes. (You can learn more about how to verify the fragmentation in SQL Server 2000 on this Web site.)
  相关解决方案