设为首页 收藏本站
查看: 626|回复: 0

[经验分享] 0. SQL Server监控清单

[复制链接]

尚未签到

发表于 2015-6-28 13:28:06 | 显示全部楼层 |阅读模式
  数据库服务器的监控可大致分为两类:
  (1) 状态监控:数据库服务器有没有在健康地运行?
  (2) 性能监控:健康运行的同时,有没有性能问题?可不可以更快些?
  
  . 服务器
  1. 状态监控
  (1) 服务器是否可访问?
  (2) 数据库服务是否启用?
  (3) 操作系统事件日志中的错误或告警
  (4) 磁盘可用空间
  
  2. 性能监控
  (1) IO压力
  (2) 内存使用
  (3) CPU使用
  (4) 网络带宽占用
  这1,2,3,4是按照容易出现瓶颈的顺序排列的,由于磁盘的读写速度限制,通常IO是最容易出现瓶颈的地方,我们所做的很多优化,也都是针对IO的,比如:索引优化,读写分离等等。
  
  . 数据库
  1. 状态监控
  (1) 数据库可否打开 (数据库状态)
  (2) SQL Server/SQL Server Agent错误日志中的错误或告警
  (3) 数据库/文件组可用空间
  (4) SQL Agent 作业运行状态
  (5) 数据库备份有没有成功
  (6) 数据库还原测试的结果
  (7) 数据库一致性检查的结果 (DBCC CHECKDB)
  
  以下几条状态监控,通常需要和系统平均值/基线值比较才有意义,否则没有告警的标准。
  (8) 连接数、请求数、事务数、线程数
  (9) 数据库/文件/表的大小
  (10) 表使用、行数
  
  2. 性能监控
  (1) 有没有长时间运行的查询 (一般指没有被任何请求阻塞,效率很差的查询)
  (2) 有没有被阻塞的查询 (可能单独运行很快,但和别的请求一起,由于有锁等待,耗时很长)
  (3) 有没有死锁 (开发人员/用户口中说的”死锁” 通常是阻塞/等待,数据库死锁通常很少让用户感觉到等待,一般是请求被中断,因为被kill掉了)
  (4) 有没有等待 (一般指各种资源的等待,等待和阻塞的交集就是锁等待)
  
  以下几条性能监控,通常在性能优化时作为参考,或者如:索引碎片整理/统计信息更新,直接设置为后台维护作业,并不直接告警。
  (5) 有没有缺失的/未被使用的/效率不高的索引,以及索引碎片
  (6) 有没有过期的统计信息
  (7) 有没有数据库文件的争用 (比如:日志文件,tempdb争用)
  (8) 有没有消耗CPU较大、IO读写较多的查询 (通常IO消耗大的,也就是内存消耗大的查询)
  
  . 其他
  (1). 如果有部署高可用的策略,会有镜像、复制、日志传送、集群状态的监控;
  (2). 某些业务数据有严格的一致性要求,业务数据的校验,最好也做在监控的告警里面;
  (3). 对于数据库/实例的选项、参数设置,链接服务器等对象的可用性,通常在每年/每季度的health check里检查过就可以了,如果不放心,当然也可以放到监控的告警中来。
  
  . 如何部署监控?
  1. 不要选择依赖性的脚本/命令
  以监视服务是否启动为例,脚本如下:
  (1) SQL扩展存储过程



--参数1: QueryState 检查服务状态/ Start启动服务/ Stop停掉服务
--参数2: 服务名
exec master.dbo.xp_servicecontrol 'QueryState', 'MSSQLServer'
exec master.dbo.xp_servicecontrol 'QueryState', 'SQLServerAgent'
exec master.dbo.xp_servicecontrol 'QueryState', 'SQLBrowser'
exec master.dbo.xp_servicecontrol 'QueryState', 'NetLogon'
EXEC xp_servicecontrol N'Stop', N'SQLServerAGENT'
EXEC xp_servicecontrol N'Start',N'SQLServerAGENT'
  
  (2) SQL调用操作系统命令



if OBJECT_ID('tempdb..#tmp_started_services') is not null
drop table #tmp_started_services
create table #tmp_started_services (started_services varchar(255))
insert into #tmp_started_services(started_services)   
exec master..xp_cmdshell 'net start'
select *
from #tmp_started_services
where LTRIM(RTRIM(started_services)) like 'SQL%'
  如果SQL Server没启动,这些脚本根本就跑不了,又怎么监控呢?
  也许,又会有这么一个思路,服务器正常时,发出邮件通知,如果没有收到邮件就说明服务器不正常了,可如果有很多服务器时,怎么知道谁没发邮件呢?
  
  2. 部署在专门的一台/多台监控机上
  服务器状态监控,不管使用第三方工具,还是使用自定义脚本,都建议部署在专门的监控机上,远程监视目标机器。
  因为:如果服务器DOWN了或者故障了,可能本机的程序/脚本就无法运行了,又怎么监控呢?
  
  最后
  基于上面的监控列表,还需要将监测工作自动化,并在发现问题时告警。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81178-1-1.html 上篇帖子: SQL Server 性能优化之——T-SQL TVF和标量函数 下篇帖子: 《Microsoft SQL Server 2008 MDX Step by Step》学习笔记三:了解结果集(Sets)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表