我有一个mssql数据库服务器很少达到100%的CPU使用率。发生这种情况时,不能再与数据库建立连接。
到目前为止,我们唯一的解决方案是重启服务器。使用任何类型的频率都不会发生这种情况。不是在同一时间,任何事情。我们去了三个星期没有发生任何事情,到目前为止已经过了一周,因为它发生在我们最后一次遇到这个问题。
当我们查看SQL Server错误日志时,我们可以看到一个似乎导致问题的pid,但日志不存储进程正在执行的操作,是否被其他进程阻止等。
当问题发生时,我们无法连接到框,我们无法运行任何sp_who命令来尝试识别问题发生时正在执行的sql语句。将承认我们正在尝试使用Management Studio进行连接。
我们不想运行SQL分析器,即使在数据库盒子上也是如此,如果我们可以避免它,因为资源流失很少发生。
我错过了一个技巧,因为错误日志中记录了一些内容,但因为我不是DBA,所以我很想念它。
答案 0 :(得分:1)
答案 1 :(得分:0)
你可以尝试做这些事情:
DBCC FREEPROCCACHE
您可以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
您可以检查管理下的活动监视器并按CPU排序
答案 2 :(得分:0)
首先, 检查sql server中正在运行的内容并检查spid的cpu利用率或是否存在任何阻塞。 从sys.sysprocesses中选择*,其中spid> 50顺序由cpu desc; 如果发现任何特定进程运行并导致CPU利用率,则查找表并检查更新的最新统计信息或该表的任何缺失索引,或执行索引重建操作。 如果服务器didint让你登录或者每次CPU高时sql都挂起,那么使用名为 PSSDIAG 的数据收集工具,这是一个诊断工具,它将收集sql server上的每一个动作,这样你就可以稍后分析问题及其免费并由微软提供。只运行10到15分钟,因为它需要很大的空间(取决于操作)。