数据库服务器的监控可大致分为两类:

(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了或者故障了,可能本机的程序/脚本就无法运行了,又怎么监控呢?

最后

基于上面的监控列表,还需要将监测工作自动化,并在发现问题时告警。

0. SQL Server监控清单的更多相关文章

  1. SQL Server监控清单

    SQL Server监控清单 一. 服务器1. 状态监控(1) 服务器是否可访问?(2) 相应的数据库服务是否启用?(3) 操作系统事件日志中的错误或告警(4) 磁盘可用空间 服务器状态监控,不管使用 ...

  2. SQL Server 监控系列(文章索引)

    一.前言(Introduction) SQL Server监控在很多时候可以帮助我们了解数据库做了些什么,比如谁谁在什么时候修改了表结构,谁谁在删除了某个对象,当这些事情发生了,老板在后面追着说这是谁 ...

  3. SQL Server监控报警架构_如何添加报警

    一.数据库邮件报警介绍 数据库邮件是从SQL Server数据库引擎发送电子邮件企业解决方案,使用简单传输协议(SMTP)发送邮件.发送邮件进程与数据库的进程隔离,因此可不用担心影响数据库服务器. 数 ...

  4. SQL Server 监控 使用sp_trace_create

    监控前言 上一节我们提到了MSSQL的基于SQL Event的监控,但是有些时候我们需要更加详细.适用于调优排错的监控.SQL Server内部运行的可见性是的查询调整.优化和综合排查成为可能!这一节 ...

  5. SQL Server ->>监控和管理Tempdb

    Tempdb作为一个公共数据库,存储着一些临时的数据.有些是用户自己创建的,有些是SQL Server自己创建的.Tempdb空间被使用的一些常见场景有 用户自定义:临时表和表变量.游标. SQL S ...

  6. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  7. SQL Server 监控统计阻塞脚本信息

        数据库产生阻塞(Blocking)的本质原因 :SQL语句连续持有锁的时间过长 ,数目过多, 粒度过大.阻塞是事务隔离带来的副作用,它是不可避免的,而且是一个数据库系统常见的现象. 但是阻塞的 ...

  8. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)

    第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库 ...

  9. SQL SERVER 监控数据文件增长情况

    在项目前期评估数据库的增长情况,然后根据数据库数据量的增长情况来规划存储的分配其实是一件比较麻烦的事情.因为项目没有上线,用什么来评估数据库的数据增长情况呢? 如果手头没有实际的数据,我们只能从表的数 ...

随机推荐

  1. HDU2955Robberies(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 题目是说一小偷偷东西,第i个物品的价值是M[i],被抓的概率是p[i],现在要使得在被抓的概率在P以下时的 ...

  2. ASP.NET MVC 4 中Jquery上传插件Uploadify简单使用-版本:3.2.1

    1.官网下载开发包:http://www.uploadify.com/download/,选择免费的Flash版本: 2.解压后,需要用到以下几个文件: 需要修改uploadify.css中取消上传按 ...

  3. 读写锁:ReadWriteLock

    http://my.oschina.net/20076678/blog/173165   一.在JDK文档中关于读写锁的相关说明 ReadWriteLock 维护了一对相关的 锁 ,一个用于只读操作, ...

  4. 当类库项目中无法使用Application.StartupPath

    通常我们WinForm编程时,要获取程序当前运行的文件夹路径会用Application.StartupPath ,但是Application.StartupPath在编写类库项目时却无法使用,因为我们 ...

  5. Hanganalyze 使用

    It is  important to find the that the reason hangs the database. How can we do, is a headache thing. ...

  6. Delphi ThreadPool 线程池(Delphi2009以上版本适用)

    http://blog.sina.com.cn/s/blog_6250a9df0101kref.html 在网上查找Delphi线程池,结果发现寥寥无几. 看了半天源代码,弄得一头雾水,觉得不容易理解 ...

  7. uva129 - Krypton Factor 7.4.3 困难的串

      7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstrin ...

  8. windows7下实现局域网内文件共享

    1.右击桌面网络----属性----更改高级共享设置 (注释:查看当前网络 比如:家庭网络.公共网络 等!) "我这里为公共网络" 2.选择 公共网络---选择以下选项:启动网络发 ...

  9. 【java开发系列】— JDOM创建、改动、删除、读取XML文件

    有非常多中操作XML文件的方法,这里介绍一下JDOM的用法和技巧. JDOM下载地址 创建XML文档 XML文件是一种典型的树形文件,每一个文档元素都是一个document元素的子节点. 而每一个子元 ...

  10. Java学习笔记之深入理解引用

    引言:Java中数据传递的方式,除了基本数据类型是按照值传递,其它类型全部是按照引用传递,这和C++有很大区别,但是很多网上文章都解释的不清楚,甚至是错误的,在查阅资料之后,下面整理出一个比较容易理解 ...