Power by DMForum.NET!
RSS | ATOM | WAP
DMForum.NET 官方支持讨论区 > 技术区 > 数据库应用

浏览主题:????????京京?s网????s网???s网i音?京京???

主题:????????京京?s网????s网???s网i音?京京???
螃蟹
(论坛管理员)
普通会员
2级
等级:街头游民
发帖:84
金钱:125
经验:1091
性别:美女
状态:离线
注册:2006-7-29 23:35:00
请教,进程经常被锁死  
[ 2006-9-28 17:58:00 ]
表NewsVisit用来记录文章的每天访问量,现在约有370万的记录

SP sp_insert_newsvisit是用来插入录的存储过程
在sql server管理里查看锁/对象,属性,上批TSQL命令,主要是这个SP和sp_cursorclose;1
查了一些资料,不得要领

/*
插入新闻浏览记录
输入:表名 新闻ID,新闻标题
by berk
*/
CREATE PROCEDURE sp_insert_newsvisit
(
    @NewsID int,
    @NewsTitle varchar(1000)
)
AS
BEGIN
    DECLARE @s1 int,@s2 int
    SET @s1=DATEDIFF(dd,'1999-1-1',getdate())
    Select @s2=count(visitid) From NewsVisit  where Newsid=@NewsID and VisitDateNum=@s1

    IF @s2 = 0 
        BEGIN
            Insert Into NewsVisit (NewsID,NewsTitle) Values (@NewsID,@NewsTitle)

        END
    Else
        BEGIN
            UPDATE NewsVisit SET ClickNum=ClickNum+1 Where Newsid=@NewsID and VisitDateNum=@s1
        END

END
GO
完美行动
论坛版主
4级
等级:职业侠客
发帖:276
金钱:1750
经验:9766
性别:帅哥
状态:离线
注册:2006-8-4 8:45:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2006-10-7 15:32:00 ]
一、没看出来VisitDateNum值第一次是怎么插到表里的?
二、当你update一行数据时,锁由更新锁升级为独占锁,你根本不能对该行记录放置共享锁,所以你不能select出该行的数据。
三、典型的死锁就是你这么写出来的。同时对一行数据下共享锁,再同时要更新该数据企图升级至共享锁、独占锁。必然会死锁。
四、可以降低事务隔离等级(会牺牲精确性):
CREATE PROCEDURE sp_insert_newsvisit
(
    @NewsID int,
    @NewsTitle varchar(1000)
)
AS
BEGIN
    DECLARE @s1 int,@s2 int
    SET @s1=DATEDIFF(dd,'1999-1-1',getdate())

    IF EXISTS (SELECT * FROM NewsVisit(NOLOCK) WHERE Newsid=@NewsID and VisitDateNum=@s1)
        BEGIN
            UPDATE NewsVisit SET ClickNum=ClickNum+1 Where Newsid=@NewsID and VisitDateNum=@s1
        END
    ELSE
        BEGIN
            Insert Into NewsVisit (NewsID,NewsTitle,ClickNum) Values (@NewsID,@NewsTitle,1)
        END
END



最后一次由 完美行动 在 2006-10-7 18:03:09 编辑
完美行动
论坛版主
4级
等级:职业侠客
发帖:276
金钱:1750
经验:9766
性别:帅哥
状态:离线
注册:2006-8-4 8:45:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2006-10-7 15:51:00 ]
顺便说一下:

WHERE条件中,至少应该有主键。

再顺便说一下:

IF EXISTS (SELECT * FROM NewsVisit(NOLOCK) WHERE Newsid=@NewsID and VisitDateNum=@s1)
改成
IF EXISTS (SELECT * FROM NewsVisit(XLOCK,PAGLOCK) WHERE Newsid=@NewsID and VisitDateNum=@s1)
更好些。你自己拿主义吧。


最后一次由 完美行动 在 2006-10-7 18:44:19 编辑
螃蟹
(论坛管理员)
普通会员
2级
等级:街头游民
发帖:84
金钱:125
经验:1091
性别:美女
状态:离线
注册:2006-7-29 23:35:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2006-10-11 19:17:00 ]
这样得到的统计数据,有问题的
不管了,我现在单提到了一个文件,用<script src>,好多了
メ冰枫ぱ雪
普通会员
1级
等级:新手上路
发帖:49
金钱:495
经验:1117
性别:帅哥
状态:离线
注册:2006-12-29 2:00:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2006-12-31 5:42:27 ]
楼上的签名赞。。
zyvslxl
(风吹雨晒)
普通会员
2级
荣誉:老会员
等级:街头游民
发帖:80
金钱:85
经验:621
性别:保密
状态:离线
注册:2004-4-6 0:00:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2008-1-30 15:21:41 ]
将Newsid   VisitDateNum 都建立索引 减低资源锁定时间
givear
普通会员
1级
等级:新手上路
发帖:8
金钱:80
经验:367
性别:保密
状态:离线
注册:2008-1-23 13:36:00
RE:????????京京?s网????s网???s网i音?京京???  
[ 2008-2-1 17:55:06 ]

偶来学习呵呵

︶孤独的王者
普通会员
1级
等级:新手上路
发帖:4
金钱:40
经验:646
性别:保密
状态:离线
注册:2008-3-9 9:09:00
美美  
[ 2008-3-9 9:16:39 ]

你写的xlock,pagelock

有什么作用??


回到顶部
Powered by DMForum.NET  1.4 Beta . URIMAP enabled. DEBUG enabled.
Copyright © 2003-2006 Devms.Com. All rights reserved.