mssql生产数据库服务器达到100%CPU

时间:2014-09-09 16:47:14

标签: sql-server cpu-usage

我有一个mssql数据库服务器很少达到100%的CPU使用率。发生这种情况时,不能再与数据库建立连接。

到目前为止,我们唯一的解决方案是重启服务器。使用任何类型的频率都不会发生这种情况。不是在同一时间,任何事情。我们去了三个星期没有发生任何事情,到目前为止已经过了一周,因为它发生在我们最后一次遇到这个问题。

当我们查看SQL Server错误日志时,我们可以看到一个似乎导致问题的pid,但日志不存储进程正在执行的操作,是否被其他进程阻止等。

当问题发生时,我们无法连接到框,我们无法运行任何sp_who命令来尝试识别问题发生时正在执行的sql语句。将承认我们正在尝试使用Management Studio进行连接。

我们不想运行SQL分析器,即使在数据库盒子上也是如此,如果我们可以避免它,因为资源流失很少发生。

我错过了一个技巧,因为错误日志中记录了一些内容,但因为我不是DBA,所以我很想念它。

3 个答案:

答案 0 :(得分:1)

  • 应该更新静态。
  • 应检查索引碎片并重新获取或重建sholud 完成。
  • 尝试完成覆盖索引的搜索。
  • 找出缺失的索引和实现。
  • 删除未使用的索引。

答案 1 :(得分:0)

你可以尝试做这些事情:

  1. 您可以尝试使用DBCC FREEPROCCACHE
  2. 清除缓存
  3. 您可以identify the most costly SQL Server queries using DMV’s

    SELECT TOP 20
        qs.sql_handle,
        qs.execution_count,
        qs.total_worker_time AS Total_CPU,
        total_CPU_inSeconds = --Converted from microseconds
        qs.total_worker_time/1000000,
        average_CPU_inSeconds = --Converted from microseconds
        (qs.total_worker_time/1000000) / qs.execution_count,
        qs.total_elapsed_time,
        total_elapsed_time_inSeconds = --Converted from microseconds
        qs.total_elapsed_time/1000000,
        st.text,
        qp.query_plan
    FROM
        sys.dm_exec_query_stats AS qs
        CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
        CROSS apply sys.dm_exec_query_plan (qs.plan_handle) AS qp
    ORDER BY qs.total_worker_time DESC
    
  4. 您可以检查管理下的活动监视器并按CPU排序

答案 2 :(得分:0)

首先, 检查sql server中正在运行的内容并检查spid的cpu利用率或是否存在任何阻塞。 从sys.sysprocesses中选择*,其中spid> 50顺序由cpu desc; 如果发现任何特定进程运行并导致CPU利用率,则查找表并检查更新的最新统计信息或该表的任何缺失索引,或执行索引重建操作。 如果服务器didint让你登录或者每次CPU高时sql都挂起,那么使用名为 PSSDIAG 的数据收集工具,这是一个诊断工具,它将收集sql server上的每一个动作,这样你就可以稍后分析问题及其免费并由微软提供。只运行10到15分钟,因为它需要很大的空间(取决于操作)。