2013-01-07 57 views
0

我們使用SQL Server 2008中,我們有一個現有的數據庫,並要求它ADDCOLUMN到具有2700行僅但其列之一是VARCHAR(8000)類型的Table之一。當我嘗試使用ALTER表命令添加新列(CHAR(1) NULL)時,它需要太多時間!它花了5分鐘和命令仍在運行我停止了命令。 下面是命令,我試圖增加新列:Alter Table命令如何由SQLServer處理?

​​3210
  1. 有人可以幫助我瞭解了SQL Server如何處理 ALTER TABLE命令?究竟發生了什麼?
  2. 爲什麼需要這麼多的時間來添加新列

編輯

  1. 什麼是表大小ALTER命令效果?

回答

3

更改表需要模式鎖定。許多其他操作也需要相同的鎖。畢竟,在中途添加一個列是沒有意義的。

所以一個可能的解釋是,一個進程鎖定表5分鐘。然後ALTER必須等到它自己獲得鎖定。

您可以從SQL Server Management Studio中的活動監視器看到阻塞的進程和阻塞進程。

+0

ALTER表的+1需要LOCK。好的,所以表格的大小與它無關? –

1

那麼,有一點需要記住的是,你正在向表中添加一個新的固定長度列。在存儲中構造行的方式中,對於每行,所有固定長度的列放置在所有可變長度列之前。所以每一行都必須在存儲中進行更新才能進行此更改。

反過來,如果這導致可以存儲在每個頁面上的行數改變,可能需要很多新的分配。

這就是說,對於顯示的行數,我不會有,但它應該需要5分鐘 - 除非,正如Andomar所指出的那樣,還有一些鎖定爭用也涉及到。