一台执行缓慢CPU偏高的DB服务器的处理

一台生产环境的 Windows Server2008 的DB服务器, 数据库为 SQL Server2014 (无补丁), 经常发生 CPU 偏高(经常跳到80%,90%, 平均也有 45%左右 )。

配置(虚拟机):



但奇怪的是这台机基本上没有用户访问, 一天都不到一次, 主要是监控的SQL和同步的SQL, 一般来说这点SQL不足以将资源占尽。

剩余内存大约只有 100MB .

处理步骤:

1. 将SQL Server最大内存设置为 2000MB, 系统内存占用无改善;

2. 重启SQL Server服务, 执行速度变快, 但过一段时间会慢下来;

3. 用下面的脚本查询SQL Server所占内存, 大约为 260MB 左右;

--查看SQLServer占用内存  
IF CAST(SUBSTRING(@@VERSION,22,4) AS INT)<2008  
    select cast(cntr_value/(1024.0) as DECIMAL(12,1)) AS SQLServerMemoryMB  
    from master.sys.sysperfinfo AS s  
    where counter_name='Total Server Memory (KB)'  
ELSE  
    SELECT CAST(physical_memory_in_use_kb/1024.0 AS DECIMAL(12,1)) AS SQLServerMemoryMB   
    FROM sys.dm_os_process_memory 

4. xp_readerrorlog 查错误日志, 有如下关于系统内存不足的信息:

There is insufficient system memory in resource pool 'default' to run this query.

5. 上面的信息提到了跟资源池有关, 查 default 资源池居然显示为限制最大内存为 25%, 以为找到原因了, 改为 100%, 重启服务, 还是快不起来。后面仔细看看, 那个资源池设置是禁用的, 所有不会有影响……;

6. 在任务管理器上注销除本人之外的其它所有已断开用户( 3个);

7. 安装SQL Server2014补丁SP2。

经过 6,7 后,查询速度变快, 内存占用变小(2600MB), CPU在 1%~10% 之间波动。


综上所述, 6和7为解决问题的关键。

由于比较紧急,没有在6之后立即测速度,但个人感觉6的用处比7要大得多。

服务器上, 不用了还是注销为好, 仅仅断开无法释放内存等资源。这对比较差的服务器来说, 是非常必要的。

——————————————————

后记:

后面再观察, 安装了补丁也还是有 CPU 过高的情况, 必须注销用户才能让CPU降下来。应该是服务器的配置太低导致。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值