新しく作成された空のテーブルに単純な外部キー制約を追加する際に多くの問題が発生しています。参照テーブルは、レコード数が40未満の小さなテーブルですが、かなり参照されます。
新しいテーブルは正常に作成されますが、FK制約を追加すると、非常に長い間「考え」、CPU負荷が増加します。メモリ使用量が増加すると、サーバーは狂ったようにページングを開始し、応答しなくなります(接続がタイムアウトします)。クエリをキャンセルしても効果はありません。動作する唯一のことはサーバーを再起動することであり、これは非常にコストがかかります。
これが私が実行しようとしているスクリプトです。SQLサーバーの達人が助けてくれることを願っています。どうも!
USE [my_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MyNewTable](
[Column1ID] [int] NOT NULL,
[Column2ID] [int] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MyNewTable] WITH CHECK ADD CONSTRAINT [FK_MyNewTable_Column1ID] FOREIGN KEY([Column1ID])
REFERENCES [dbo].[ReferenceTable] ([Column1ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[MyNewTable] CHECK CONSTRAINT [FK_MyNewTable_Column1ID]
GO
編集:ReferenceTableは、次のような小さなテーブルです。
[Column1ID] [int] IDENTITY(1,1) NOT NULL,
[TxtCol1] [varchar](50) NOT NULL,
[TxtCol2] [varchar](50) NOT NULL,
[TxtCol3] [varchar](200) NOT NULL,
[TxtCol4] [nvarchar](2000) NOT NULL,
[TxtCol5] [varchar](200) NOT NULL,
[BitCol1] [bit] NOT NULL,
[TxtCol6] [varchar](200) NOT NULL,
[NumCol1] [smallint] NOT NULL,
[ExternalColumnId] [int] NOT NULL,
[NumCol2] [int] NOT NULL
Column1IDは、他のテーブル(FK)によって頻繁に参照されます。ExternalColumnIdは、別のテーブルへのFKです。この問題は、ALTERTABLE呼び出しの1つで発生します。残念ながら、両方が一緒に実行されたので、どちらが原因であるかはわかりません。
編集:DBが「思考」モードに入ると、シングルモードに切り替えてからマルチユーザーモードに戻すことで、DBを元に戻すことができます。サーバーを再起動するよりもはるかに優れていますが、それでも受け入れられません。