新しく作成された空のテーブルに単純な外部キー制約を追加する際に問題が発生しています。参照表は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
EDITは:Column1IDは、他のテーブルで多くのことを参照され
[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
(FKさん):ReferenceTableは次のようになります小さなテーブルです。 ExternalColumnIdは別のテーブルへのFKです。この問題は、ALTER TABLE呼び出しの1つの間に発生します。残念ながら、それらの両方が一緒に実行されたので、私はそれを引き起こしたものを言うことができません。
EDIT:DBが「思考」モードになったら、シングルモードに切り替えてからマルチユーザーモードに戻って元の状態に戻すことができます。サーバをリブートするよりはるかに良いですが、依然として受け入れられません。
Strange。 'ReferenceTable'の定義は何ですか?その後、すべてのステートメントは間違っていますか? '追加拘束 'は? –
詳細を追加しました。元のテーブルになかったことの1つは主キーです。新しいテーブルが空であると考えると、どんなに効果があるのでしょうか? –
Gbnが正しかったと私はかなりあなたがオブジェクトのロックを見ていると確信しています。再現性がありましたか?私はsqlserverについては十分に分かっていませんが、マウントされたドライブのデータファイルによって提供され、新しいテーブルスペースを作成して問題が終了するかどうかを確認できます(oracleとsql serverは並行していると仮定します)) –