即使使用online = on,索引重建也会冻结数据库

时间:2017-09-02 14:20:47

标签: sql-server azure azure-sql-database

我有一个托管在Azure上的SQL数据库,其大小为712 Gb。

每当我尝试使用(online=on)重建索引时,网站可以正常工作几分钟然后冻结,DTU会达到100%并且我必须停止执行查询。即使使用单个索引重建,也会发生这种情况。

我们有非常高的碎片,我们需要定期重建索引。

我们让用户从世界各地访问该网站,因此很难找到非高峰时间并重建它。

有人可以提出解决方案吗?

2 个答案:

答案 0 :(得分:2)

我在Guidelines for Online Index Operations中读到可能需要设置MAXDOP来保留一些处理器用于其他活动。

  

在运行SQL Server 2016的多处理器计算机上,索引语句可能会使用更多处理器来执行与索引语句关联的扫描和排序操作,就像其他查询一样。 您可以使用MAXDOP索引选项来控制专用于在线索引操作的处理器数量。通过这种方式,您可以平衡索引操作使用的资源与并发用户的资源。

所以说你有八个处理器,你可以强制重建动作只使用四个处理器:

... REBUILD WITH (ONLINE=ON,MAXDOP=4); 

答案 1 :(得分:1)

尝试使用分片来按地理分布数据库的数据。然后,您将能够为每个地理位置识别不同的维护窗口,并且维护时间将缩短。这也将提高性能。您可以在this文章中了解详情。

对于大数据库和24 x 7全天候连接的用户,您需要使用索引重新组织并仅更新需要更新的统计信息(sp_updatestats),以最大限度地减少维护所需的时间以及对用户的影响。