【问题标题】:SQL Azure - SSMS - A transport-level error has occurred when receiving results from the serverSQL Azure - SSMS - 从服务器接收结果时发生传输级错误
【发布时间】:2014-08-12 18:54:10
【问题描述】:

我正在尝试在包含 910 万行的表上重建索引。它目前处于 88% 的碎片化状态

在 [MYTABLE] REBUILD 上更改索引 [MYINDEX]

几分钟后,我从 SSMS 收到以下信息...

消息 10054,级别 20,状态 0,行 0 从服务器接收结果时发生传输级错误。 (提供者:TCP Provider,错误:0 - 现有连接被远程主机强行关闭。)

几分钟后,我从管理门户收到以下信息...

运行 Transact-Sql 命令失败 读取响应状态失败。

目前不知道该尝试什么。

【问题讨论】:

  • 最终删除了表上的一些其他索引,然后使用重建,然后重新添加索引。这使我能够成功重建索引。我真的不觉得我解决了问题,只是解决了一项大型操作。
  • 您是说表上的其他索引会影响您在rebuild中指定的索引的rebuild吗?不知道这个...

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


【解决方案1】:

您可以尝试 CREATE INDEX...WITH DROP_EXISTING。只需将现有索引编写为 CREATE 并添加 DROP_EXISTING 选项,如下例所示。这将更有效,因为它利用了现有的索引结构,从而避免了聚集索引的扫描和排序。此方法将减少碎片,但不会像 REBUILD 那样解决索引损坏问题。

CREATE INDEX [MYINDEX] ON MYTABLE
(
    [MYCOLUMN] ASC
)WITH (DROP_EXISTING = ON);

【讨论】:

  • 感谢您的回复。这是主键,我收到一条消息说它无法创建索引,因为定义不同。抱歉,我面前没有确切的信息。最后在表上删除了一些其他索引,然后使用重建,然后重新添加索引。这工作正常。
  • 您需要添加UNIQUE关键字以使用CREATE INDEX语法重建主键索引,并根据现有的主键索引类型指定(或省略)CLUSTERED。
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多