重建索引会阻止我的生产数据库工作吗?

时间:2014-10-22 14:01:07

标签: sql sql-server sql-server-2012

我使用SQL Server 2012已经超过2年了。在此期间,我添加了一些索引,但从未触及碎片。老实说,我没有意识到索引碎片。但今天我跑的时候,

SELECT 
    dbschemas.[name] as 'Schema', 
    dbtables.[name] as 'Table', 
    dbindexes.[name] as 'Index',
    indexstats.avg_fragmentation_in_percent,
    indexstats.page_count
FROM 
    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN 
    sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN 
    sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN 
    sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
                             AND indexstats.index_id = dbindexes.index_id
WHERE 
    indexstats.database_id = DB_ID()
ORDER BY 
    indexstats.avg_fragmentation_in_percent DESC

我得到了这些结果:

Schema  Table                           Index                           avg_fragmentation_in_percent    page_count
--------------------------------------------------------------------------------------------------------------
dbo     ELMAH_Error                 IX_ELMAH_Error_App_Time_Seq         99.2438563327032                529
dbo     ELMAH_Error                 PK_ELMAH_Error                      98.8664987405542                794
dbo     ProductsCountriesVariants   PK__Products__3214EC270AC6A076      98                              100
dbo     Tags                        PK_Tags                             91.2820512820513                195
dbo     ProductGallery              PK_ProductGallery                   89.0909090909091                220
dbo     devicecatalog               IX_DeviceCatalog_NativeDeviceID     88.5964912280702                342
dbo     Products                    IX_Products_RetailerID_ModelNumber  88.5245901639344                122
dbo     Products                    IX_Products_RetailerID_SKU          82.7272727272727                110
--------------------------------------------------------------------------------------------------------------

我应该重建所有索引吗?它会影响我在生产中运行的数据库吗?有趣的是,我刚刚在几分钟前创建了IX_DeviceCatalog_NativeDeviceID索引。

2 个答案:

答案 0 :(得分:2)

重建索引将锁定表,除非您指定操作是在线完成的:

ALTER INDEX REBUILD WITH (ONLINE = ON)

仅适用于企业版及以上版本。

答案 1 :(得分:1)

您还可以查看重新组织是否有帮助,直到您可以执行完全重建。你需要做更多的研究,但基本上,根据需要经常重新组织,以便将你的碎片保持在20-30%之下,直到你能在非工作时间重建。忽略少于15-20页的任何内容,因为碎片不可靠。

具有NULL名称的索引是系统创建的临时索引,直到重新启动服务。