Yeni oluşturulmuş boş bir tabloya basit bir yabancı anahtar kısıtlaması ekleyerek birçok sorun yaşıyorum. Referans tablosu, içinde 40'tan az kayıt bulunan küçük bir dosyadır, ancak biraz referans alınacaktır. yeni tablo başarıyla oluşturuldu alır, ancak FK kısıtlamayı eklerken, bu gerçekten uzun bir süre için "düşünür" ve CPU yükü artırır:Yabancı Anahtar kısıtlaması eklemek belleği boşa harcıyor ve sayfalamaya neden oluyor
İşte böyle oluyor. Bellek kullanımı artar, sunucu çılgın gibi çağrı yapmaya başlar ve yanıt vermiyor (bağlantılar zaman aşımına uğrar). Sorguyu iptal etmek yardımcı olmaz. Çalışmakta olan tek şey, sunucuyu yeniden başlatmanın çok maliyetli olduğu.
Çalıştırmaya çalıştığım komut dosyası. SQL server gurularının yardım edebileceğini umuyorum. Teşekkürler!
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
DÜZENLEME: Column1ID diğer tablolar çok başvurulmaktadır
[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) 'ın: ReferenceTable şuna benzer küçük bir tablodur. ExternalColumnId, başka bir tabloya bir FK olduğunu. Sorun, ALTER TABLE çağrılarından birinde gerçekleşir. Ne yazık ki ikisi de birlikte koşuyordu, bu yüzden hangisinin neden olduğunu söyleyemem.
DÜZENLEME: DB "düşünme" moduna girdiğinde, tek bir moda geçip daha sonra çoklu kullanıcı moduna geri getirilerek geri getirilebilir. Sunucu yeniden başlatılmasından çok daha iyi ama yine de kabul edilemez.
Garip. ReferenceTable'ın tanımı nedir? Hangi açıklamadan sonra hepsi yanlış gidiyor? 'İLAVE EKLE' biri? –
Sadece daha fazla bilgi eklendi. Orijinal tabloda sahip olmadığım bir şey birincil anahtardır. Yeni tabloyu göz önünde bulundurarak, ne kadar bir etkisi olacağını bilemez misiniz? –
Gbn haklı ve ben nesne kilidine baktığınızdan eminim. Tekrarlanabilir miydi? Yeterince sqlserver bilmiyorum, ama yeni bir tablespace oluşturmayı deneyebilirsiniz, bir sürücüde bir veri dosyası tarafından sunulan ve sorun çıkıp çıkmadığını kontrol edin. (Oracle ve sql server'ın parallels olduğunu varsayalım;)) –