当原始表正在使用时,我必须将表中的数据存档到另一个表中。归档过程是将行复制到另一个表中,然后从原始表中删除行。要归档的行由具有Identity属性的列选择。
一个因素是正在使用存档行的表 - 在存档过程运行时,新行将写入表中。这是一个无法停止的24/7应用程序。
要删除的行位于Identity列编号的低端,而新行将添加到表的末尾。
我担心的是僵局。是否有可能在两个进程之间发生死锁?
档案流程将从存储过程运行?我应该将DEADLOCK_PRIORITY设置为LOW以确保如果发生死锁确实会导致存档过程被杀死而不是正在运行的应用程序吗?
我还应该设置TRANSACTION ISOLATION LEVEL吗?
谢谢
表定义:
CREATE TABLE [dbo].[DummyName](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Payment Reference] [nvarchar](18) NULL DEFAULT (N''),
[Payment Amount] [decimal](28, 10) NULL,
[Payment Date] [datetime] NULL,
[Payer ID] [nvarchar](34) NULL DEFAULT (N''),
[Payer Account] [nvarchar](174) NULL DEFAULT (N''),
[Payer Name] [nvarchar](174) NULL DEFAULT (N''),
[Payer Type] [nvarchar](35) NULL DEFAULT (N''),
[Bank Reference] [nvarchar](16) NULL DEFAULT (N''),
...
指数定义:
ALTER TABLE [dbo].[DummyName] ADD PRIMARY KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
SELECT
和DELETE
在Id列上,所有操作都应该在非聚集PK上寻找并避免阻塞/死锁。你有没有理由把这张桌子留下来?