0

SQL Server 2008を使用しています。既存のデータベースがあり、2700行しかないデータベースの1つに新しいデータベースが必要でしたがその列の1つはタイプADDです。tableコマンドを使用して新しい列()を追加しようとすると、時間がかかりすぎます!! 5分かかりましたが、コマンドはまだ実行されていましたが、コマンドを停止しました。以下はコマンドです、私は新しい列を追加しようとしていました:COLUMNTableVARCHAR(8000)CHAR(1) NULLALTER

ALTER TABLE myTable Add ColumnName CHAR(1) NULL
  1. SQLServerがALTERTableコマンドをどのように処理するかを誰かが理解するのを手伝ってもらえますか?正確には何が起こりますか?
  2. 新しい列を追加するのに時間がかかる理由

編集

  1. ALTERコマンドに対するテーブルサイズの影響は何ですか?
4

2 に答える 2

3

テーブルを変更するには、スキーマロックが必要です。他の多くの操作でも同じロックが必要です。結局のところ、selectステートメントの途中に列を追加することは意味がありません。

したがって、おそらく、プロセスでテーブルが5分間ロックされたという説明があります。次にALTER、ロック自体を取得するまで待機する必要があります。

SQL Server Management Studioのアクティビティモニターから、ブロックされたプロセスとブロックされたプロセスを確認できます。

于 2013-01-07T13:18:54.533 に答える
1

覚えておくべきことの1つは、新しい固定長の列をテーブルに追加していたことです。行がストレージで構造化される方法では、すべての固定長の列が、各行のすべての可変長の列の前に配置されます。したがって、この変更を行うには、ストレージ内のすべての行を更新する必要があります。

これにより、各ページに格納できる行数が変更された場合は、非常に多くの新しい割り当てが必要になった可能性があります。

そうは言っても、示された行数については、5分かかるはずですが、Andomarが示したように、ロックの競合も含まれていない限り、私にはありません。

于 2013-01-07T13:25:58.560 に答える