需求描述

一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控

监控值范围

根据经验,作为DBA一般需要监控如下系统能行指标

  1.   cpu
  2.  
  3.     \Processor(_Total)\% Processor Time
  4.     \Processor(_Total)\% Privileged Time
  5.  
  6.     \SQLServer:SQL Statistics\Batch Requests/sec
  7.     \SQLServer:SQL Statistics\SQL Compilations/sec
  8.     \SQLServer:SQL Statistics\SQL Re-Compilations/sec
  9.     \System\Processor Queue Length
  10.     \System\Context Switches/sec
  11.  
  12.   Memory:
  13.  
  14.     \Memory\Available Bytes
  15.     \Memory\Pages/sec
  16.     \Memory\Page Faults/sec
  17.     \Memory\Pages Input/sec
  18.     \Memory\Pages Output/sec
  19.     \Process(sqlservr)\Private Bytes
  20.     \SQLServer:Buffer Manager\Buffer cache hit ratio
  21.     \SQLServer:Buffer Manager\Page life expectancy
  22.     \SQLServer:Buffer Manager\Lazy writes/sec
  23.     \SQLServer:Memory Manager\Memory Grants Pending
  24.     \SQLServer:Memory Manager\Target Server Memory (KB)
  25.     \SQLServer:Memory Manager\Total Server Memory (KB)
  26.  
  27.   Disk:
  28.  
  29.     \PhysicalDisk(_Total)\% Disk Time
  30.     \PhysicalDisk(_Total)\Current Disk Queue Length
  31.     \PhysicalDisk(_Total)\Avg. Disk Queue Length
  32.     \PhysicalDisk(_Total)\Disk Transfers/sec
  33.     \PhysicalDisk(_Total)\Disk Bytes/sec
  34.     \PhysicalDisk(_Total)\Avg. Disk sec/Read
  35.     \PhysicalDisk(_Total)\Avg. Disk sec/Write
  36.  
  37.   SQL Server:
  38.  
  39.     \SQLServer:Access Methods\FreeSpace Scans/sec
  40.     \SQLServer:Access Methods\Full Scans/sec
  41.     \SQLServer:Access Methods\Table Lock Escalations/sec
  42.     \SQLServer:Access Methods\Worktables Created/sec
  43.     \SQLServer:General Statistics\Processes blocked
  44.     \SQLServer:General Statistics\User Connections
  45.     \SQLServer:Latches\Total Latch Wait Time (ms)
  46.     \SQLServer:Locks(_Total)\Lock Timeouts (timeout > )/sec
  47.     \SQLServer:Locks(_Total)\Lock Wait Time (ms)
  48.     \SQLServer:Locks(_Total)\Number of Deadlocks/sec
  49.     \SQLServer:SQL Statistics\Batch Requests/sec
  50.     \SQLServer:SQL Statistics\SQL Re-Compilations/sec

上述指标含义,可以参照我上一篇文章:SQL Server需要监控哪些计数器

监控脚本

  1. $server = "(local)"
  2. $uid = "sa"
  3. $db="master"
  4. $pwd="password"
  5. $mailprfname = "SendEmail"
  6. $recipients = "787449667@qq.com"
  7. $subject = "数据库指标异常了!"
  8. $computernamexml = "f:\computername.xml"
  9. $alter_cpuxml = "f:\alter_cpu.xml"
  10. function GetServerName($xmlpath)
  11. {
  12. $xml = [xml] (Get-Content $xmlpath)
  13. $return = New-Object Collections.Generic.List[string]
  14. for($i = ;$i -lt $xml.computernames.ChildNodes.Count;$i++)
  15. {
  16. if ( $xml.computernames.ChildNodes.Count -eq )
  17. {
  18. $cp = [string]$xml.computernames.computername
  19. }
  20. else
  21. {
  22. $cp = [string]$xml.computernames.computername[$i]
  23. }
  24. $return.Add($cp.Trim())
  25. }
  26. $return
  27. }
  28.  
  29. function GetAlterCounter($xmlpath)
  30. {
  31. $xml = [xml] (Get-Content $xmlpath)
  32. $return = New-Object Collections.Generic.List[string]
  33. $list = $xml.counters.Counter
  34. $list
  35. }
  36.  
  37. function CreateAlter($message)
  38. {
  39. $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
  40. $CnnString ="Server = $server; Database = $db;User Id = $uid; Password = $pwd"
  41. $SqlConnection.ConnectionString = $CnnString
  42. $CC = $SqlConnection.CreateCommand();
  43. if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() }
  44.  
  45. $cc.CommandText=" EXEC msdb..sp_send_dbmail
  46. @profile_name = '$mailprfname'
  47. ,@recipients = '$recipients'
  48. ,@body = '$message'
  49. ,@subject = '$subject'
  50. "
  51. $cc.ExecuteNonQuery()|out-null
  52. $SqlConnection.Close();
  53. }
  54.  
  55. $names = GetServerName($computernamexml)
  56. $pfcounters = GetAlterCounter($alter_cpuxml)
  57. foreach($cp in $names)
  58. {
  59. $p = New-Object Collections.Generic.List[string]
  60. $report = ""
  61. foreach ($pfc in $pfcounters)
  62. {
  63. $b = ""
  64. $counter ="\\"+$cp+$pfc.get_InnerText().Trim()
  65. $p.Add($counter)
  66.  
  67. }
  68. $count = Get-Counter $p
  69. for ($i = ; $i -lt $count.CounterSamples.Count; $i++)
  70. {
  71. $v = $count.CounterSamples.Get($i).CookedValue
  72. $pfc = $pfcounters[$i]
  73. #$pfc.get_InnerText()
  74. $b = ""
  75. $lg = ""
  76. if($pfc.operator -eq "lt")
  77. {
  78. if ($v -ge [double]$pfc.alter)
  79. {$b = "alter"
  80. $lg = "Greater Than"}
  81. }
  82. elseif ($pfc.operator -eq "gt")
  83. {
  84. if( $v -le [double]$pfc.alter)
  85. {$b = "alter"
  86. $lg = "Less Than"}
  87. }
  88. if($b -eq "alter")
  89. {
  90. $path = "\\"+$cp+$pfc.get_InnerText()
  91.  
  92. $item = "{0}:{1};{2} Threshold:{3}" -f $path,$v.ToString(),$lg,$pfc.alter.Trim()
  93. $report += $item + "`n"
  94. }
  95.  
  96. }
  97. if($report -ne "")
  98. {
  99. #生产警告 参数 计数器,阀值,当前值
  100. CreateAlter $report
  101. }
  102. }

其中涉及到2个配置文件:computernamexml,alter_cpuxml分别如下:

  1. <computernames>
  2. <computername>
  3. wuxuelei-pc
  4. </computername>
  5. </computernames>
  1. <Counters>
  2. <Counter alter = "" operator = "gt" >\Processor(_Total)\% Processor Time</Counter>
  3. <Counter alter = "" operator = "gt" >\Processor(_Total)\% Privileged Time</Counter>
  4. <Counter alter = "" operator = "gt" >\SQLServer:SQL Statistics\Batch Requests/sec</Counter>
  5. <Counter alter = "" operator = "gt" >\SQLServer:SQL Statistics\SQL Compilations/sec</Counter>
  6. <Counter alter = "" operator = "gt" >\SQLServer:SQL Statistics\SQL Re-Compilations/sec</Counter>
  7. <Counter alter = "" operator= "lt" >\System\Processor Queue Length</Counter>
  8. <Counter alter = "" operator= "lt" >\System\Context Switches/sec</Counter>
  9. </Counters>

其中 alter 就是阀值,如第一条,如果 阀值 > 性能计数器值,就会发出警告。

其实这种自定义配置的方式,实现了灵活多变的自动化监控标准:

1、比如可以检测磁盘空间大小

2、检测运行峰值状态

3、定时的根据历史运行值,更改生产系统中的阀值大小,也就是所谓的运行基线

警告实现方式

1、SQL Agent配置Job方式实现

2、计划任务

以上两种配置方式,可以灵活掌握,操作还是蛮简单的,如果不会,可自行google。当然,如果不想干预正常的生产系统,可以添加一个Server专门用来自动化运维检测来用,实现远程监控。

后续文章中会分析关于Power Shell的远程调用,并且能实现事故当前状态下,自动化截图....自动Send Email......为DBA现场取证第一手材料...方便诊断问题...

效果图如下

以上只提供实现方式,如需要内容更新,自己灵活更新。

脚本下载地址http://files.cnblogs.com/zhijianliutang/DBALter.zip

SQL Server自动化运维系列——监控性能指标脚本(Power Shell)的更多相关文章

  1. SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在上一篇文章中已经分析了SQL SERVER中关于邮 ...

  2. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  3. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  4. SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  5. SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性 ...

  6. SQL Server自动化运维系列——关于数据收集(多服务器数据收集和性能监控)

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  7. SQL Server自动化运维系列 - 多服务器数据收集和性能监控

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  8. SQL Server 自动化运维系列 - 多服务器数据收集和性能监控

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  9. SQL Server自动化运维系列——批量执行SQL脚本(Power Shell)

    需求描述 一般在生产环境中,在投产的情况下,需要批量的来执行SQL脚本文件,来完成整个投产,如果投产文件比较多的情况下,无疑这是一个比较痛苦的过程,所以本篇通过PowerShell脚本来批量完成. 监 ...

随机推荐

  1. Equals和ReferenceEquals

    稍微分析下一下两个方法的区别: public static bool Equals(object objA, object objB); public static bool ReferenceEqu ...

  2. TCP的定时器

    TCP的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有四种定时器: 重传定时器 坚持定时器 保活定时器 2M ...

  3. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

  4. JavaScript中的匿名函数及函数的闭包

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  5. 基于STM32Cube的DAC数模转化

    1. STM32Cube配置 1.1 DAC配置   1.2 TIM6 配置 1.3 利用Cube产生工程程序,MDK打开软件       在主循环上添加语句:      HAL_TIM_Base_S ...

  6. overflow

    1. 隐藏x轴滚动条,垂直有滚动条: <body> <div style="width:100px;height:150px;overflow:scroll;overflo ...

  7. windows phone 水印TextBox

    原文来自:wp教程网 原理:在失去焦点和获取焦点的时候,判断Text值是否为空或者是否与水印值相同,然后修改TextBox中的Text和Foreground. 代码如下: /* =========== ...

  8. java 字符串操作和日期操作

    一.字符串操作 创建字符串 String s2 = new String("Hello World"); String s1 = "Hello World"; ...

  9. 深入.NET和C#的小型汽车租赁系统的框架

    前言:写这个小型系统之前呢,我们应该要猜测可能要用到哪些知识点. 那么对于这个小型系统:主要用到了如下的知识:  封装,集合(ArrayList和HashTable)和泛型和非泛型集合(泛型:List ...

  10. MVC中实现Area几种方法

    概述        ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块 ...