进程数太多可能是连接没有及时释放造成的。 你可以使用sp_who active查看当前活动的进程数是多少。象你说这种服务器,按理说连接数(就是你说的进程数)应该在40以下,活动进程一般不会超过5个(系统进程不算)。如果cpu超过常年100%,肯定是存在不少效率低下的SQL语句(估计是没能利用索引)。建议你使用事件探查器监视那些cpu超过500的SQL语句,看看能否优化。
解决方案 »
- sql语句中如何实现递归查询?
- 求一条SQL,怎么统计出name字段中有多少个人.(name格式为"张三\囝中\王五\老六")
- 用sp_addlinkedserver添加了连接服务器,那在存储过程中的事物,该怎么写呢!以前的写法,去都报错!
- 怎样高效地同步大量实时数据到多张表中(五秒一次)
- SQL2005 XML问题
- 动态字段名和变量赋值问题
- SQL 问题?
- mysql ordery by 默认是如何进行排序的呢?
- 同步复制表的问题 (老大快出来)
- 怎样去掉程序执行过程中,程序停下来显示一些中间的不必要的提示?
- 6个表,4个变量,要实现最多组合功能的存储过程
- 高分求教,如何实现对机关发文的文件编号的正确排序?
select * from master.dbo.sysprocesses
where spid>50
and waittype = 0x0000
and waittime = 0
and status = 'sleeping'
and last_batch < dateadd(minute, -10, getdate())
and login_time < dateadd(minute, -10, getdate())如果这样的进程很多, 则说明连接确实有很多连接没有释放(上面的查询查询出已经超过10分钟都没有做任何动作的连接)
3. 如果确实是连接没有释放的问题, 你可以硬行释放连接, 不一定要改程序. 在sql server中, 创建一个job, 每10分钟一次, 执行下面的代码来定时检查并释放掉空连接就可以了:
declare hcforeach cursor global
for
select 'kill ' + rtrim(spid) from master.dbo.sysprocesses
where spid>50
and waittype = 0x0000
and waittime = 0
and status = 'sleeping'
and last_batch < dateadd(minute, -60, getdate())
and login_time < dateadd(minute, -60, getdate())
exec sp_msforeach_worker '?'