Zabbix-SqlServer CPU计数器

Windows客户端找到所有性能计数器可以通过命令:

CMD:   typeperf -q > F:\Performance.txt

 

对于我们DBA来讲,数据库最大性能障碍无非是 CPU/DISK/MEMORY 分别介绍下面三巨头;

  PerfCounter=Processor_Total,"\Processor(_Total)\% Processor Time",30 (阈值:>85%)

 

全实例  指处理器执行非闲置线程时间的百分比,测量处理器繁忙的时间 这个计数器设计成用来作为处理器活动的主要指示器,可以选择单个CPU实例;

 

   PerfCounter=ProcessorUserTime,"\Processor(_Total)\% User Time",30    

非内核级应用程序占用的时间.表示耗费CPU的数据库操作如order by group by等。如果该值很高,可增加合适的索引和优化语句,尽量使用简单                                                                                                         

的表联接,水平分割大表格等方法来降低该值。 

 

PerfCounter=Processor_sqlservr,"\Process(sqlservr)\% Processor Time",30  (阈值:>80%)

指定单个进程消耗的CPU时间占比.参考总的CPU消耗(% Processor Time(_Total))

 

下图是本地机测试演示用的,所以都很低;

cpu 持续很高,要留意下并行度、是否是缺少索引,导致逻辑读多和全表扫描多导致复杂查询占有大量CPU;

下图的案例 是语句执行时间和cpu、执行时间对比,明显能看出出现了CXPACKET等待;

参考:32个CPU 最大并行度设置成8或者4;如果是OATP事物级数据库,可以建议设置为1;

并行度开销阈值:越小代表越容易走并行执行;默认值为5;

 

最常用的方法处理cpu占有高的问题:

  1. 添加索引降低语句开销,执行需要的资源消耗少了消耗的CPU 自然相对就少了。
  2. 降低语句复杂度,让SQL Server执行高效(同样也是降低资源消耗的方法)。
  3. 分析语句是否可以采用串行计划。
  4. 前端程序尽量参数化减少语句的编译消耗。

 

之前也遇到过CPU飙高,远程卡的动不了;

首先看下当前数据库连接用户数:

SELECT * FROM SYS.SYSPROCESSES WHERE SPID>50 --AND SPID<>@@SPID --AND BLOCKED>0;

SELECT COUNT (*) FROM  SYS.DM_EXEC_SESSIONS WHERE SESSION_ID>50 --AND SPID<>@@SPID --AND BLOCKED>0;

 

其次首先查下Top 10 CPU消耗资源

SELECT TOP 10
A.SESSION_ID,
A.REQUEST_ID,
A.BLOCKING_SESSION_ID,
B.[TEXT],
A.STATUS,
A.WAIT_TYPE,
A.WAIT_TIME,
A.WAIT_RESOURCE,
A.CPU_TIME,
A.READS,
A.WRITES,
A.LOGICAL_READS,
A.ROW_COUNT,
DB_NAME(A.DATABASE_ID)  AS [DB_NAME],
C.query_plan
FROM
SYS.dm_exec_requests A
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(SQL_HANDLE) B
CROSS APPLY SYS.DM_EXEC_QUERY_PLAN(PLAN_HANDLE) C
WHERE A.SESSION_ID <>@@SPID

AND A.SESSION_ID >50
ORDER BY A.CPU_TIME DESC

 

查看数据库cpu个数、用户scheduler数目以及最大工作线程;满的时候检查blocking;

SELECT  CPU_COUNT,SCHEDULER_COUNT,MAX_WORKERS_COUNT FROM SYS.dm_os_sys_info

 

当前数据库最大workers

select * from sys.dm_os_schedulers

 

 

视图:[sys].[dm_os_wait_stats]

关联这个视图查看等待任务数目:

SELECT TOP 10
  [session_id],
  [request_id],
  [start_time] AS ‘开始时间‘,
  [status] AS ‘状态‘,
  [command] AS ‘命令‘,
  dest.[text] AS ‘sql语句‘,
  DB_NAME([database_id]) AS ‘数据库名‘,
  [blocking_session_id] AS ‘正在阻塞其他会话的会话ID‘,
der.[wait_type] AS ‘等待资源类型‘,
[wait_time] AS ‘等待时间‘,
[wait_resource] AS ‘等待的资源‘,
[dows].[waiting_tasks_count] AS ‘当前正在进行等待的任务数‘,
[reads] AS ‘物理读次数‘,
[writes] AS ‘写次数‘,
[logical_reads] AS ‘逻辑读次数‘,
[row_count] AS ‘返回结果行数‘
FROM sys.[dm_exec_requests] AS der
INNER JOIN [sys].[dm_os_wait_stats] AS dows
ON der.[wait_type]=[dows].[wait_type]
CROSS APPLY
sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]>50 
ORDER BY [cpu_time] DESC

最后再看下总体CPU占有资源消耗;

SELECT TOP 10
   total_worker_time/execution_count AS avg_cpu_cost,
  execution_count,
  (SELECT SUBSTRING(text, statement_start_offset/2 + 1,
     (CASE WHEN statement_end_offset = -1
        THEN LEN(CONVERT(nvarchar(max), text)) * 2
       ELSE statement_end_offset
     END - statement_start_offset)/2)
   FROM sys.dm_exec_sql_text(sql_handle)) AS query_text,

C.query_plan

FROM sys.dm_exec_query_stats

cross apply sys.dm_exec_query_plan(plan_handle) c
ORDER BY [avg_cpu_cost] DESC

时间: 2024-11-19 10:23:53

Zabbix-SqlServer CPU计数器的相关文章

zabbix 添加CPU占用百分比图形

zabbix内置模板无带cpu占用,需自己添加 在Template OS Linux中,添加ITEM,我直接在Processor load那clone出来修改,key修改为system.cpu.util[,,],Units改成% 2.  在Template OS Linux中,添加graph,create graph,选择刚刚修改添加的item,Y axis MIN value改为fixed 0,加个name,就可以了 最后连接模板的都会自动增加这个图形

zabbix监控主机cpu达到80%后报警

在zabbix监控中,默认cpu监控模板中的触发器,当负载在一定时间内(比如最近5分钟)超过5以上为报警阀值.但是在实际场景中,由于服务器配置不一样,这个默认的cpu触发器用起来意义就不大了,这时候就需要我们手动自定义cpu的触发器了. 在cpu utilization中有一个cpu idle时间,即cpu的空闲时间,当空闲时间小于20%的时候就是cpu大于80%的时候.所以cpu达到80%后报警的触发器配置如下:名称:cpu user percent on {HOST.NAME} gt 80%

zabbix监控CPU等资源报警到163邮箱

监控cpu报警: zabbix自带模板有一个 Template OS Linux模板.这个模板有监控CPU的监控项,如果没有添加一个监控项" CPU idle time" 这个监控项监控的是CPU剩余的时间.监控到这个指标也就可以监控到使用了多少. 1.首先,如果没有添加一个监控项" CPU idle time",具体步骤如下: 1.1:配置->模板-->找到Template OS Linux模板-监控项  创建监控项: 内容如下: 备注这个一般没有需要

zabbix监控CPU、内存、磁盘、流量超值则报警

手动添加监控项,通过?system.cpu.util[,,]?来进行配置添加监控项? 其他告警不在截图 内存告警:使用百分比来显示 , 注:重新添加触发器更换对应IP 类型:可计算的健值:vm.memory.free[percent]100*last("vm.memory.size[available]")/last("vm.memory.size[total]")信息类型:浮点数单位:%应用集:memory触发器: {103.68.173.202:vm.memor

Zabbix 3.0 监控交换机(CPU、内存监控及配置Trigger)

一.zabbix监控CPU 1.zabbix监控CPU及配置Triggers (1).要用到的OID        1.3.6.1.4.1.9.2.1.57.0  CPU utilization for one minute        1.3.6.1.4.1.9.2.1.58.0  CPU utilization for five minutes        1.3.6.1.4.1.9.2.1.56.0  CPU utilization for five seconds (1).创建ite

zabbix管理四之监控cpu的负载

监控cpu的负载 分析: 安装完zabbix后,在Template OS Linux这个模板下面默认有监控cpu负载的触发器,但是这个默认的触发器是以cpu负载的个数为触发值的,由于agent客户机每台的cpu核数是不一样的,所以,以负载的个数为触发值不是很好,下面我设置的触发值是cpu负载占cpu核数的百分比 步骤: 1.(agent端) mkdir -p /etc/zabbix/itemscripts         (创建一个脚本目录,所有的zabbix agent的脚本都放在这里,方便管

Zabbix通过SNMP监控多核CPU使用率时, 计算CPU平均使用率

环境:没有Agent,只能通过SNMP监控时,需要获取多核CPU的平均使用率. ZABBIX的使用SNMP监控CPU使用率时,由于设备都是多核CPU,监控的都是单独某一核心的使用率,但单独某一核使用率过高触发告警实际意义不大. 所以写了一个"外部检查"查询CPU的每个核心的使用率,然后再计算该设备CPU的总体的一个使用率. cd /usr/local/share/zabbix/externalscripts/ vim /usr/local/share/zabbix/externalsc

简单几步使用zabbix监控Linux物理服务器CPU温度

前段时间有个属于笔者维护的小机房空调故障,温度过高导致系统卡慢,多日无人发现.于是想着使用zabbix监控CPU温度并设置告警阀值,同时也能监控到风扇异常.挡风板太脏空气不畅.进程死锁导致CPU使用率超高等异常,侧面监控服务器多种异常状况. 服务器有两台四路x86服务器,系统是CentOS,用到软件lm_sensors.使用zabbix监控系统自定义监控项,采集监控数据并设置告警.下面详细介绍. 安装 lm_sensors 并获取CPU温度 yum install lm_sensors 安装后运

深入浅出Zabbix 3.0 -- 第八章 管理告警

第八章  管理告警 在本章中可以了解到Triggers(触发器)的配置和Actions(动作)的配置,详细介绍触发器的规则表达式.告警.告警升级等, 作为一个监控解决方案,告警是不可或缺的功能.当从监控对象上收集的监控项的值满足系统中设定的阈值即产生告警事件,依据告警事件的不同类型,产生相应的告警动作,给用户发送告警信息,或者执行命令等等.Zabbix中的告警流程如下图7-1所示. 图 8-1 8.1 触发器 我们知道在Zabbix中是通过监控项收集监控数据,然后这些数据会保存在数据库中.有时候