0

我们使用的是 SQL Server 2008。我们有一个 Existing 数据库,它需要ADD一个新的数据库,其中COLUMN一个只有2700 行,但它的一列是类型。当我尝试使用table 命令添加新列 () 时,需要太多时间!花了5 分钟,命令仍在运行,我停止了命令。下面是命令,我试图添加新列:TableVARCHAR(8000)CHAR(1) NULLALTER

ALTER TABLE myTable Add ColumnName CHAR(1) NULL
  1. 有人可以帮我理解 SQL Server 如何处理 ALTER Table 命令吗?究竟会发生什么?
  2. 为什么添加新列需要这么长时间

编辑

  1. 表大小ALTER 命令有什么影响?
4

2 回答 2

3

更改表需要模式锁。许多其他操作也需要相同的锁。毕竟,在select语句的中间添加一列是没有意义的。

所以一个可能的解释是一个进程将表锁定了 5 分钟。然后ALTER必须等到它自己获得锁。

您可以从 SQL Server Management Studio 的活动监视器中查看被阻止的进程和被阻止的进程。

于 2013-01-07T13:18:54.533 回答
1

好吧,要记住的一件事是您正在向表中添加一个新的固定长度列。行在存储中的结构方式,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,必须在存储中更新每一行才能进行此更改。

如果反过来,这会导致可以存储在每页上的行数发生变化,则可能需要大量新的分配。

话虽如此,对于所示的行数,我不会需要 5 分钟 - 除非,正如 Andomar 所指出的,还涉及一些锁争用。

于 2013-01-07T13:25:58.560 回答