我在SQL Server 2012中更改表时遇到问题,需要很长时间才能将允许NULL
的04列添加到包含340列和大约166M行和01非聚集索引的大表
此问题仅在恢复后的特定表中发生。 我正在等待执行10个小时,但还没有完成,所以我必须取消它以进行更多调查。这很奇怪,因为脚本真的非常简单,如下所示:我们之前已成功完成:
alter table sample_database.sample_schema.sample_table
add column_001 int null
,column_002 numeric(18,4) null
,column_003 nvarchar(500) null
,column_004 int null;
我的问题是:
非常感谢所有人,
答案 0 :(得分:2)
如果是2012年(根据标签),可能会发生这种情况:
http://rusanu.com/2012/02/16/adding-a-nullable-column-can-update-the-entire-table/
如果在SQL Server 2012中添加可为空的列具有潜在的可能性 增加行大小超过8060大小然后ALTER执行 离线数据大小更新到表的每一行以确保它 适合页面。此行为是SQL Server 2012中的新增功能。
答案 1 :(得分:0)
@Anton解释了这背后的原因。 -Page Split
对于解决方法,您可以按照以下步骤操作:
SELECT * INTO <New table> from sample_table WHERE 0=1
)您还应尝试添加NOT NULL
值的列,并在添加列后再对其进行相应修改。
答案 2 :(得分:0)
这种情况发生在我们的UAT环境中。从最新备份再次还原数据库后,此问题不会再次发生。修改在mili-seconds内完成。
在我看来,自上次恢复以来存在一定的问题。
非常感谢所有人,