変更を行うために必要な実際の時間を示すALTER COLUMNのテストを実行しました。結果は、ALTER COLUMNがでなく、であり、必要な時間が直線的に増加することを示しています。
RecordCt Elapsed Mcs
----------- -----------
10000 184019
100000 1814181
1000000 18410841
私が推奨するようにバッチすることをお勧めします。新しい列を作成し、ROWCOUNTとWAITFORの組み合わせを使用して時間の経過とともに列を事前に設定します。
WAITFOR値がテーブルから読み取られるようにスクリプトをコーディングします。こうすることで、実稼働サーバーの稼働中にWAITFORの値をオンザフライで変更できます。オフピーク時にはWAITFORを短くすることができます。 (あなたはWAITFOR値を自動的にするためにDMVを使用することもできますが、これは確かにより複雑です)
これは、プランニングと多くのベビーシッターを必要とする複雑なアップデートです。
ロブここ
は、ALTER COLUMNテストコードです。
USE tempdb;
SET NOCOUNT ON;
GO
IF EXISTS (SELECT * FROM sys.tables WHERE [object_id] = OBJECT_ID('dbo.TestTable'))
DROP TABLE dbo.TestTable;
GO
CREATE TABLE dbo.TestTable (
ColID int IDENTITY,
ColTest int NULL,
ColGuid uniqueidentifier DEFAULT NEWSEQUENTIALID()
);
GO
INSERT INTO dbo.TestTable DEFAULT VALUES;
GO 10000
UPDATE dbo.TestTable SET ColTest = ColID;
GO
DECLARE @t1 time(7) = SYSDATETIME();
DECLARE @t2 time(7);
ALTER TABLE dbo.TestTable ALTER COLUMN ColTest bigint NULL;
SET @t2 = SYSDATETIME();
SELECT
MAX(ColID) AS RecordCt,
DATEDIFF(mcs, @t1, @t2) AS [Elapsed Mcs]
FROM dbo.TestTable;
生産能力として、定期的に実行する必要がありますか?それともこれは一度限りのことですか? –
これは1回だけ実行する必要があります – user1337121