• 介绍一种使用poweshell 监控的方式


    本篇将使用PowerShell脚本对SQL Server 的关键指标进行监控.

    以下,用数据库空间容量为例,实现一下逻辑:

    一、建表

    为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名。

    CREATE TABLE table_name(
    [LOG_DATE] [varchar](20) NULL,
    [DB_NAME] [varchar](50) NULL,
    [TOTAL_SIZE_MB] [numeric](15, 2) NULL,
    [USE_SIZE_MB] [numeric](15, 2) NULL,
    [FREE_SIZE_MB] [numeric](15, 2) NULL,
    [DAILY_GROWTH_MB] [numeric](15, 2) NULL DEFAULT ((0))
    )



    二、数据收集


    要点:

    1. 主要利用sp_msforeachdb、sp_spaceused循环获取各数据库容量数据,简化代码

    2. today_use_size = total_szie - free_size

    3. growth_szie = today_use_size - yesterday_use_size

    4. chkservers.txt存放服务器名

    5. 创建作业,每天定时执行(如需调整为每周、月执行,修改$yesterday=$today.adddays(-1)及作业频率即可)


    $MonitorServer=''
    $servers=gc F:\DBA\chkservers.txt
    $today=Get-Date
    $log_date=$today.toString('yyyyMMdd')
    $yesterday=$today.adddays(-1)
    $compare_date=$yesterday.toString('yyyyMMdd')
    Foreach($server in $servers){
    if($server.length -gt 0){
    $results=invoke-sqlcmd "exec sp_msforeachdb 'if(db_id(''?'') not in(1,2,3,4)) begin exec [?]..sp_spaceused end'" -ServerInstance $server
    For($n=0;$n -lt $results.length;$n=$n+2){
    $db_name=$results[$n].database_name
    $db_total_size=$results[$n].database_size
    $db_free_size=$results[$n].'unallocated space'
    $total_size=$db_total_size.substring(0,$db_total_size.length-3)
    $free_size=$db_free_size.substring(0,$db_free_size.length-3)
    $today_use_size=$total_size-$free_size
    $count=invoke-sqlcmd "select count(1) as count from DBMonitor..$server where LOG_DATE='$compare_date' and DB_NAME='$db_name'" -ServerInstance $MonitorServer
    if($count.count -gt 0){
    $comp_results=invoke-sqlcmd "select MAX(USE_SIZE_MB) as USE_SIZE_MB from DBMonitor..$server where LOG_DATE='$compare_date' and DB_NAME='$db_name'" -ServerInstance $MonitorServer
    $yesterday_use_size=$comp_results.USE_SIZE_MB
    $growth_size=$today_use_size-$yesterday_use_size
    }
    else{
    $growth_size=0
    }
    invoke-sqlcmd "insert into DBMonitor..$server select '$log_date','$db_name',$total_size,$today_use_size,$free_size,$growth_size" -ServerInstance $MonitorServer
    }
    }
    }


  • 相关阅读:
    动词 + to do、动词 + doing
    图像直线检测——霍夫线变换
    x=min(x, y)
    x=min(x, y)
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
    分治法求解切割篱笆
    分治法求解切割篱笆
    GMM的EM算法实现
    秒杀多线程第二篇 多线程第一次亲热接触 CreateThread与_beginthreadex本质差别
  • 原文地址:https://www.cnblogs.com/wenBlog/p/16064143.html
Copyright © 2020-2023  润新知