求助比赛网站的SQL数据库CPU一直占用100%的解决办法?--附详细说明最近公司和主办单位协同举办了一场大型比赛.比赛项目包含了"网络投票".其中 投票的服务器就是现在出了问题的服务器.需要各位的帮助?1.服务器比赛网站是 .net+SQL2000 比赛投票这几天 SQL占用CPU一直>90%,如果没其他程序的话,它绝对要占用100%.
2.我用事件探察器跟踪了下.发现SQL中有三个执行过程对CPU占用很高,这是截图:下面分别对应三个存储过程的内容:
------------------------------------
--用途:统计一小时内此IP对此ID的投票数
--项目名称:CodematicDemo
--说明:
--时间:2008-7-16 9:28:40
------------------------------------
CREATE PROCEDURE UP_V_ConditionIpUser
@PassportID int,
@vote_ip varchar(50)
AS
SELECT
count(*) as countCondition
FROM V_Condition where DATEDIFF(minute,Pubdatetime,getdate()) <60 and vote_ip=@vote_ip and PassportID=@PassportID
GO
------------------------------------
--用途:统计一分钟内此IP对此ID的投票数
--项目名称:CodematicDemo
--说明:
--时间:2008-7-16 9:28:40
------------------------------------
create PROCEDURE UP_V_ConditionsecondUser
@PassportID int
AS
SELECT
count(*) as countsecondCondition
FROM V_Condition where DATEDIFF(second,Pubdatetime,getdate()) <60 and PassportID=@PassportID
GO3.这几个存储过程最终的目的就是: 1小时内相同IP不能给同一个ID投6票
1分钟内所有IP不能给同一个ID投30票
现在我有两个问题要请教大家:
1.怎么用事件探察器查看 具体的CPU占用率? 上面的CPU是使用时间.
2.怎么知道SQL究竟是不是这三个存储过程引起呢?
3.如果是这三个存储过程引起,怎么来改正这三个存储过程?
2.我用事件探察器跟踪了下.发现SQL中有三个执行过程对CPU占用很高,这是截图:下面分别对应三个存储过程的内容:
------------------------------------
--用途:统计一小时内此IP对此ID的投票数
--项目名称:CodematicDemo
--说明:
--时间:2008-7-16 9:28:40
------------------------------------
CREATE PROCEDURE UP_V_ConditionIpUser
@PassportID int,
@vote_ip varchar(50)
AS
SELECT
count(*) as countCondition
FROM V_Condition where DATEDIFF(minute,Pubdatetime,getdate()) <60 and vote_ip=@vote_ip and PassportID=@PassportID
GO
------------------------------------
--用途:统计一分钟内此IP对此ID的投票数
--项目名称:CodematicDemo
--说明:
--时间:2008-7-16 9:28:40
------------------------------------
create PROCEDURE UP_V_ConditionsecondUser
@PassportID int
AS
SELECT
count(*) as countsecondCondition
FROM V_Condition where DATEDIFF(second,Pubdatetime,getdate()) <60 and PassportID=@PassportID
GO3.这几个存储过程最终的目的就是: 1小时内相同IP不能给同一个ID投6票
1分钟内所有IP不能给同一个ID投30票
现在我有两个问题要请教大家:
1.怎么用事件探察器查看 具体的CPU占用率? 上面的CPU是使用时间.
2.怎么知道SQL究竟是不是这三个存储过程引起呢?
3.如果是这三个存储过程引起,怎么来改正这三个存储过程?
解决方案 »
- 删除和选取(内详)~
- distinct区分大小写问题!
- 学生管理系统,如何创建索引?
- 一条UPDATE语句
- 我的sql server 2005附加数据库时提示"附加数据库时出错。有关详细信息,请单击“消息”列中的超链接"
- SQL语句问题
- SQLServer惊天大BUG? [code=SQL] select * from table_name where col_date<='2010-6-28
- 判断一张表的某个字段是否是主键
- MS Search服务无法启动,导致SQL SERVER全文检索无法启动????
- 请教sql server 与vfp的问题!!!(c/s)
- 难道在用sum()等等函数时不用用字段???不会吧,晕了,哪位朋友给说说到底是怎么回事? [100]
- 如何判断游标是否处于开启状态?
其中 Pubdatetime 我数据库中其中一个表 TB_Record 中一个字段.
TB_Record 是 每一个成功的投票都会在TB_Record中产生记录.Pubdatetime是当前投票成功时的时间.那我该怎么做优化呢?把他们放到客户端好象是不现实的吧?
忘记给多分了,只能明天把分加起来.
我觉的你说的很对.
不过我没明白你说把函数移到=右边 是什么意思?另外,我现在对Pubdatetime和PassportID加索引 ,中途不会出问题吧?因为比赛已经进行到一半时间了,表 TB_Record 产生的数据记录已经很大了,现在再加索引可以吗?如果可以我就去试试了.
根据以往项目中的经验,感觉你的视图V_Condition效率如何。是否该优化。楼主可以考虑下建议
这里我要说明下,V_Condition 可能是程序以前是视图,所以取了以V开头的名字,其实他是表.另外我想知道11楼说这里有大问题,那么改怎么解决呢?