在Azure上创建索引返回错误

时间:2014-06-27 19:28:14

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

我在Azure中有一个只有超过一百万行的表,我尝试使用以下SQL添加聚簇索引:

CREATE CLUSTERED INDEX IX_MyIdxName
ON [MyApp].MyTable([MyColumn])
WITH (DROP_EXISTING=ON)
ON [Primary]

当我通过网络界面进行操作时,它会运行一个多小时,然后失败并显示错误:

Failed to read the status of the response

如果我通过SQL Management Studio执行它运行半小时,然后失败并显示错误:

40552: The session has been terminated because of excessive transaction log 
space usage. Try modifying fewer rows in a single transaction.

我得到了它的意思,但我该怎么办呢?我想创建这个聚簇索引,那么如何解决这个事务日志大小问题呢?

由于

2 个答案:

答案 0 :(得分:0)

您也可以尝试使用(online = on)选项创建索引。这应该可以防止长表锁...

答案 1 :(得分:0)

由于事务日志空间过多,会话被终止。我不确定您是哪个性能层,但升级到V12将有助于解决此问题,因为我没有看到由于事务日志空间而受到限制并且受可用日志空间的限制。 您可以执行以下操作: 1.升级到V12 2.使用sys.dm_db_partition_stats查找表的总大小 3使用sys.database_files知道可用的日志大小 4.如果日志的大小至少为1.5 -2x(只是一个粗略的数字,以确保您没有点击日志已满)执行在线索引重建。