MSSQL 服务器运行状态监控实践

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 服务器的运行状态进行全面地监控。这种方式具有简单易用、可定制化、周期性、可追踪等优点,可以满足企业数据安全和业务开展需求。

数据库标签