作者Toshiya (Kill me softly)
看板Database
标题[SQL ] MS SQL Server Insert时造成过多lock block
时间Tue Jul 10 13:49:54 2007
我有一个系统目前有着以下的问题
1. 用大量的javascript与Classic ASP来写, 对於FF user不够亲合
2. javascript与ASP本身的安全性问题
3. 从client端insert into DB时造成过多的lock block
其中#3是我想在本版讨论的
我今天试着一个一个把Default constraint, FK constraint都下掉
一样会有这种情形
当我发现我的PK有指定fillfactor=90时
我试着把他分别指定为0 (直接uncheck不指定)
指定为95及98
然後进行insert into的测试
(从ASP端call sp->执行insert statement)
很奇怪的是他好像只要是奇数笔的资料insert进去就不会有事
偶数笔的时候就会在系统里造成极高的lock block(大约3600)
我一直强烈怀疑是table schema的问题
但是经过今天的测试我开始怀疑倒底是SQL端的问题还是别的地方
是造成系统bottleneck的原凶
还请各位SQL专家不吝指教, 谢谢
使用系统是SQL server 2000
付上DB schema及sp原始码
CREATE TABLE [Notetable] (
[NoteID] [bigint] IDENTITY (1, 1) NOT NULL ,
[Sender] [int] NOT NULL ,
[Receiver] [int] NOT NULL ,
[Subject] [nvarchar] (200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[TheContent] [nvarchar] (3000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[NoteType] [tinyint] NOT NULL CONSTRAINT [DF__note_ta__NoteT__6D2D2E85] DEFAULT (0),
[CreateDate] [datetime] NOT NULL CONSTRAINT [DF__note_ta__Creat__6E2152BE] DEFAULT (getdate()),
[IsConfirmed] [tinyint] NOT NULL CONSTRAINT [DF__note_ta__IsCon__6F1576F7] DEFAULT (0),
CONSTRAINT [PK_notetable] PRIMARY KEY CLUSTERED
(
[NoteID]
) WITH FILLFACTOR = 90 ON [PRIMARY] ,
CONSTRAINT [FK_notetable_membertable] FOREIGN KEY
(
[ReceiverID]
) REFERENCES [membertable] (
[charID]
) ON DELETE CASCADE ON UPDATE CASCADE
) ON [PRIMARY]
GO
Create PROCEDURE myproc_SendNotes
@Sender int, @Receiver int, @subject nvarchar(200),
@TheContent nvarchar(3000)
AS
SET NOCOUNT ON
insert into Notetable (Sender, Receiver, Topic,Content)
values (@Sender ,@Receiver,@subject,@TheContent)
IF (@@ERROR <> 0)
return -1
else
RETURN
SET NOCOUNT OFF
--
╭──╮╭──╮╭──╮╭╮╭╮╭──╮╭╮╭╮╭──╮
╰╮╭╯│╭╮││ ─┤│╰╯│╰╮╭╯│╰╯││ ○ │
││ │╰╯│├─ ││╭╮│╭╯╰╮╰╮╭╯│╭╮│
╰╯ ╰──╯╰──╯╰╯╰╯╰──╯ ╰╯ ╰╯╰╯
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 75.85.22.50