SQLServer如何处理Alter Table命令?
我们正在使用SQLServer2008。我们有一个现有的数据库,需要SQLServer如何处理Alter Table命令?,sql,sql-server-2008,alter-table,Sql,Sql Server 2008,Alter Table,我们正在使用SQLServer2008。我们有一个现有的数据库,需要向表中的一个表添加一个新的列,该表只有2700行,但其中一列的类型为VARCHAR(8000)。当我尝试使用ALTERtable命令添加新列(CHAR(1)NULL)时,它花费了太多时间!!花了5分钟,命令仍在运行,我停止了命令。 下面是命令,我正在尝试添加新列: ALTER TABLE myTable Add ColumnName CHAR(1) NULL 有人能帮助我理解SQL Server是如何处理的吗 ALTERTAB
向表中的一个表添加一个新的列
,该表只有2700行,但其中一列的类型为VARCHAR(8000)
。当我尝试使用ALTER
table命令添加新列(CHAR(1)NULL
)时,它花费了太多时间!!花了5分钟,命令仍在运行,我停止了命令。
下面是命令,我正在尝试添加新列:
ALTER TABLE myTable Add ColumnName CHAR(1) NULL
有人能帮助我理解SQL Server是如何处理的吗
ALTERTABLE命令?到底发生了什么
为什么要花这么多时间添加新列
编辑:
表格大小对ALTER命令的影响是什么
更改表需要模式锁。许多其他操作也需要相同的锁。毕竟,在select
语句的中间添加一列是没有意义的
因此,一种可能的解释是进程将表锁定了5分钟。然后,ALTER
必须等待它自己获得锁
您可以从SQL Server Management Studio中的活动监视器中看到被阻止的进程和被阻止的进程。更改表需要架构锁。许多其他操作也需要相同的锁。毕竟,在select
语句的中间添加一列是没有意义的
因此,一种可能的解释是进程将表锁定了5分钟。然后,ALTER
必须等待它自己获得锁
您可以从SQL Server Management Studio中的活动监视器中看到被阻止的进程和被阻止的进程。需要记住的一点是,您正在向表中添加一个新的固定长度列。按照存储中的行结构,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,要进行此更改,必须更新存储中的每一行
如果这反过来导致每个页面上可以存储的行数发生变化,则可能需要大量新的分配
也就是说,对于所指示的行数,我不认为它应该需要5分钟——除非,正如Andomar所指出的,还涉及一些锁争用。好的,需要记住的一点是,您正在向表中添加一个新的定长列。按照存储中的行结构,对于每一行,所有固定长度列都放在所有可变长度列之前。因此,要进行此更改,必须更新存储中的每一行
如果这反过来导致每个页面上可以存储的行数发生变化,则可能需要大量新的分配
这就是说,对于所指示的行数,我不认为它应该需要5分钟——除非,正如Andomar所指出的,还涉及一些锁争用。+1 for ALTER table require lock。好的,那么表的大小与它无关?+1表示ALTER Table require LOCK。好的,那么桌子的大小与它无关?