sql-server-2008 – 为什么在重建和重新编制索引后,我的数据库仍然是碎片?

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – 为什么在重建和重新编制索引后,我的数据库仍然是碎片?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据库,我尝试通过运行此T-sql一次对所有表进行碎片整理:
SELECT 
        'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) +
        'ALTER INDEX all ON ' + name + ' REBUILD;'
    FROM sys.tables

然后将输出复制并粘贴到新的查询窗口并运行它.我没有错误,但我仍然有碎片.我尝试单独运行这两个命令,但仍然有碎片.注意:我已经意识到Aaron不需要REORGANIZE,我知道我可以使用动态sql自动执行此操作.

我跑了这个来确定我还有碎片:

SELECT * FROM 
sys.dm_db_index_physical_stats (DB_ID(),NULL,NULL) 
WHERE avg_fragmentation_in_percent > 0

我得到了:

database_id object_id   index_id    partition_number    index_type_desc alloc_unit_type_desc    index_depth index_level avg_fragmentation_in_percent    fragment_count  avg_fragment_size_in_pages  page_count  avg_page_space_used_in_percent  record_count    ghost_record_count  version_ghost_record_count  min_record_size_in_bytes    max_record_size_in_bytes    avg_record_size_in_bytes    forwarded_record_count  compressed_page_count
85  171147655   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   36.3636363636364    5   2.2 11  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  421576540   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   75  7   1.14285714285714    8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  965578478   1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   14.7058823529412    6   5.66666666666667    34  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1061578820  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   40  4   1.25    5   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1109578991  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   30.7692307692308    5   2.6 13  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1205579333  2   1   NONCLUSTERED INDEX  IN_ROW_DATA 2   0   50  5   1.6 8   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
85  1493580359  1   1   CLUSTERED INDEX IN_ROW_DATA 2   0   50  6   1.66666666666667    10  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL

我知道我错过了一些基本的东西,但我不知道是什么.

解决方法

桌子很小.表格中的页数是:

11,8,6,5,13,​​8,10

它们总共占用480kb.碎片整理真的没什么.

编辑:这需要更多解释.

一个新的表或索引通常从混合而不是统一的范围分配它的前8页.因此,前8页中的每一页都可以从不同的混合范围中分配.因此,消耗8个页面的表或索引可以具有8个片段,在8个不同的混合范围中的每一个上有1个片段.

更广泛使用的碎片整理脚本(下面链接的几个示例)倾向于排除小表,因为这样. IIRC,< 500页在其中一个或两个.在这些规模下,碎片整理的好处很少,碎片化数据可能会受到混合范围分配的影响.
> Ola Hallengren – SQL Server Maintenance Solution
> SQL Fool – Index Defrag Script

猜你在找的MsSQL相关文章