sqlserver 2005每个连接大概需要50K的内存资源用于存储信息,对于长期不运行但是不断开的连接,最好断掉,占着茅坑不拉屎本身不是什么问题,不过潜在风险是有未提交事务,可能会导致你的库在后续使用中一些麻烦,但是最好监控一下,是否有长期不活动的连接,如果短期的话,就别断掉,反复连接sqlsrever更大消耗

解决方案 »

  1.   

    /*
    查找5天以上未活动的会话,2005以上可用
    */
    DECLARE @days_old SMALLINTSELECT @days_old = 5SELECT s.session_id,
           s.login_time,
           s.last_request_start_time,
           s.last_request_end_time,
           s.[status],
           s.[program_name],
           s.cpu_time,
           s.total_elapsed_time,
           s.memory_usage,
           s.total_scheduled_time,
           s.reads,
           s.writes,
           s.logical_reads,
           s.row_count,
           s.is_user_process
    FROM   sys.dm_exec_sessions s
           INNER JOIN sys.dm_tran_session_transactions t
                   ON s.session_id = t.session_id
    WHERE  s.is_user_process = 1
           AND Datediff(dd, s.last_request_end_time, Getdate()) > @days_old
           AND s.[status] != 'Running'
    ORDER  BY s.last_request_end_time
      

  2.   

    我用的是SQL Server 2000. 数据库服务器CPU 好几次都达到95%以上,并持续挺长时间. 所以我想是不是 连接泄露导致的?
      

  3.   


    这个连接,倒是小问题。你说cpu占用率很高,那肯定是其他的问题,比如很多硬解析,都是由于不用绑定变量导致的。另外,是否建了合适的索引,如果没有合适的索引,也会导致在多表关联时,大量的cpu时间都占用在表扫描上
      

  4.   

    CPU可能和索引、查询、编译重编译等问题有关,不一定和你哪个有关