Rel*_*ike 9 index sql-server-2005 sql-server dbcc
我目前正在运行一个脚本,该脚本对 SQL Server 2005 数据库中的每个表执行 DBCC INDEXDEFRAG,一次一个表。由于空间限制和正常运行时间要求,不能使用 DBCC DBREINDEX 代替 INDEXDEFRAG。
我注意到对某些表进行碎片整理需要很长时间。例如,如果我检查“sys.dm_exec_requests”动态管理视图,我可以看到以下 INDEXDEFRAG 当前正在处理 table_id 为 829610394 的表的聚集索引:
DBCC INDEXDEFRAG (0, 829610394, 1)
我知道在碎片整理过程完成之前需要很长时间。撇开当前运行的脚本最终会对所有表进行碎片整理的事实不谈,在当前命令执行时,我在另一个表的聚集索引上手动运行另一个 DBCC INDEXDEFRAG 有什么危害吗?如果我这样做,实际上会同时对两个表进行碎片整理吗?
小智 15
是的,您可以为多个表执行此操作。您不能对同一个表上的多个索引执行此操作 - 我发明了一个新的索引锁子资源来防止它。在 ALTER INDEX ... REORGANIZE 中的行为与我在 2005 年替换它的行为相同。
谢谢
请注意,DBCC INDEXDEFRAG 和 DBREINDEX 已被弃用并由 ALTER INDEX 取代:
重要的
此功能将在 Microsoft SQL Server 的未来版本中删除。请勿在新的开发工作中使用此功能,并尽快修改当前使用此功能的应用程序。请改用 ALTER INDEX。-- http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx
至于同时运行两个,这取决于您的文件布局。如果它们都在同一个磁盘上,您可能会减慢每个磁盘的速度,因为它们会为 I/O 相互争斗。您最好只在必要时进行 REORG 或 REBUILD。在此处查看 Michelle Ufford 的脚本以获取自动化解决方案:http : //sqlfool.com/2010/04/index-defrag-script-v4-0/
归档时间: |
|
查看次数: |
1918 次 |
最近记录: |