繁体   English   中英

SQLServer如何处理Alter Table命令?

[英]How the Alter Table command is handled by SQLServer?

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

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

编辑

  1. 表大小ALTER Command有什么影响?

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

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

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

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

如果这进而导致可以存储在每个页面上的行数发生更改,则可能需要大量新分配。

话虽如此,对于所示的行数,我将不必花5分钟的时间-除非像Andomar指出的那样,还涉及一些锁争用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM