1. 前言
MSSQL 服务器在企业应用中广泛使用,性能稳定性和可靠性直接关系到企业的运营效能。常见的监控方式有,使用sql 语句监控服务器磁盘、cpu、内存等资源使用情况,或者使用各种监控工具。本文将介绍一种通过编写 powershell 脚本,以及 window scheduler 将这些监控能力集成为一个完整的方案,使得我们可以对 MSSQL 服务器运行状态进行全面的监控,及时预测问题并进行排查。
2. 脚本编写
编写 powershell 脚本可以通过SSMS工具中的"Script As"功能实现,本文不再过多讲解,代码如下:
##check MSSQL version
$SQLserver = "localhost"
$SQLName = "MSSQLSERVER1"
$Version = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$SQLName\Setup" -Name Version | Select-Object Version
write-host "MSSQL Server version : $Version"
##check MSSQL memory usage
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLserver; Database = 'master'; Trusted_Connection = True;"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select sum(pages_kb) * 1024 as bytes_used from sys.dm_os_memory_clerks"
$SqlCmd.Connection = $SqlConnection
$results = $SqlCmd.ExecuteReader()
$table = new-object “System.Data.DataTable”
$table.Load($results)
write-host "Sql Server memory usage : " $table.rows[0]['bytes_used'] / 1MB "MB"
$SqlConnection.Close()
2.1 check MSSQL version
使用 powershell 检查MSSQL版本,主要是因为不同的版本可能有一些使用限制,简单易用,我们可以封装成一个函数,在后续的开发中调用:
function Get-MSSQLVersion(){
$SQLserver = "localhost"
$SQLName = "MSSQLSERVER1"
$Version = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\$SQLName\Setup" -Name Version | Select-Object Version
write-host "MSSQL Server version : $Version"
}
2.2 check MSSQL memory usage
使用 powershell 检查 MSSQL 内存使用情况,我们也可以定义成一个函数:
function Get-MSSQLMemoryUsage(){
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLserver; Database = 'master'; Trusted_Connection = True;"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "Select sum(pages_kb) * 1024 as bytes_used from sys.dm_os_memory_clerks"
$SqlCmd.Connection = $SqlConnection
$results = $SqlCmd.ExecuteReader()
$table = new-object “System.Data.DataTable”
$table.Load($results)
write-host "Sql Server memory usage : " $table.rows[0]['bytes_used'] / 1MB "MB"
$SqlConnection.Close()
}
3. 配置 Window Scheduler
通过 Window Scheduler 可以定时的运行我们编写的 powershell 脚本。步骤如下:
3.1 创建 Task
在 Window Scheduler 创建 Task,指定 Task 运行时间,选择 Trigger,添加 Action,Action 选择 Start a program,选择运行的 powershell.exe 可执行文件,在Add Arguments 选项中指定我们写好的脚本文件路径。
3.2 选择 Trigger
我们指定 Trigger 为每 10分钟执行一次,如下图所示:
3.3 添加 Action
在 Action 选项中,我们可以设置监控日志输出的位置,方便后续排查问题,如下图所示:
4. 效果展示
通过以上配置,我们可以看到 window server 每隔 10 分钟就会自动执行我们编写的 powershell 脚本,输出日志信息,这时候我们就可以在任务日志中看到相应的输出了。
至此,我们已经完成了 MSSQL 服务器运行状态监控的全流程,实现了对MSSQL服务器运行状态的实时监控及预警,为企业生产的可靠性提供了一定的保障。
5. 总结
MSSQL 服务器作为企业应用中最常见的数据库之一,必须保证其可靠性和稳定性。本文介绍的是一种通过 powershell 脚本编写,配合 Window Scheduler 定时执行的监控方法,对 MSSQL 服务器的运行状态进行全面地监控。这种方式具有简单易用、可定制化、周期性、可追踪等优点,可以满足企业数据安全和业务开展需求。