基线介绍

基线为历史数据统计而成的数据,具有参考价值,并利用基线数据与当前值的对比,通过一定的报警机制,形成实时监控架构。SQL Server计数器采用同比和环比两种方式。

SQL Server基线算法(同比和环比)

同比:可以计算未来一周的基线数据,取近八周同一天同一时刻的均值。

  1 /****************************** 功能描述:<同比基线算法>
  2 *   创建者:<HuangCH〉
  3 *   创建日期:<2014-11-05>
  4 *   备注说明:<每天执行一次>
  5 ##########
  6 Change Log
  7 ##########
  8 Date                 Changer             Description
  9 --------------------------------------------------
 10 <2014-11-05>        <HuangCH>            <新建>
 11 说明:
 12 1、同比算法取近八周数据可以统计一周后的数据
 13 2、考虑当天前一周0点之前的数据已经归档SQLPerfDataStat_Histroy.dbo.CounterData_OneMinute_Bak,因此要计算前一天之前的数据。
 14 
 15 2、计数器新建要超过一周才能开始计算
 16 
 17 3、开始时间当天0点与结束时间不能超过一周--CONVERT(VARCHAR(26),DATEADD(WEEK,1,@LastCBaseEnd),23)<=@LastOneMinute
 18 
 19 --------------------------------------------------
 20 ***************************/
 21 ALTER PROC [dbo].[spb_CBaseCounterData]
 22 AS
 23 SET NOCOUNT ON
 24 DECLARE @LastOneMinute DATETIME 
 25 DECLARE @LastCBaseEnd DATETIME --计算一周之后的数据
 26 DECLARE @RunCBaseEnd DATETIME 
 27 DECLARE @RunCBaseEtart DATETIME
 28 DECLARE @CounterID INT
 29 DECLARE @MachineName VARCHAR(128)
 30 
 31 --若时间未超过一周,则取当前时间
 32 UPDATE SQLPerfDataStat.dbo.CounterDetails_Dts
 33 SET LastCBaseEnd=DATEADD(D,-1,LastOneMinute)
 34 WHERE DATEADD(WEEK,-1,DATEADD(D,-1,LastOneMinute))<CreateTime
 35 
 36 DECLARE CBaseCur CURSOR FOR
 37 --计数器新建超过一周;
 38 --只能计算当天0点之前的数据:CONVERT(DATETIME,CONVERT(VARCHAR(16),LastOneMinute,23))
 39 --计算当前的时间的前天之前
 40 SELECT DISTINCT MachineName,DATEADD(D,-1,LastOneMinute) LastOneMinute,CONVERT(DATETIME,CONVERT(VARCHAR(16),LastCBaseEnd,120))  LastCBaseEnd
 41 FROM SQLPerfDataStat.dbo.CounterDetails_Dts WITH(NOLOCK)
 42 WHERE  DATEDIFF(MI,CONVERT(DATETIME,CONVERT(VARCHAR(16),LastCBaseEnd,120)),DATEADD(D,-1,LastOneMinute))>=1 and DATEADD(WEEK,-1,DATEADD(D,-1,LastOneMinute))>=CreateTime
 43 
 44 OPEN CBaseCur
 45 
 46 FETCH NEXT FROM CBaseCur INTO @MachineName,@LastOneMinute,@LastCBaseEnd
 47 
 48 WHILE @@FETCH_STATUS=0
 49 BEGIN
 50 
 51 IF CONVERT(VARCHAR(26),DATEADD(WEEK,1,@LastCBaseEnd),23)<=@LastOneMinute--超过一周未收集则时间为上次收集时间推迟一周
 52 BEGIN
 53   SET  @RunCBaseEnd=CONVERT(VARCHAR(26),DATEADD(WEEK,1,@LastCBaseEnd),23)
 54   SET  @RunCBaseEtart=@LastCBaseEnd
 55 END
 56 ELSE 
 57 BEGIN
 58   SET  @RunCBaseEnd=@LastOneMinute
 59   SET  @RunCBaseEtart=@LastCBaseEnd
 60 END
 61 
 62 UPDATE SQLPerfDataStat.dbo.CounterDetails_Dts
 63 SET LastCBaseEnd=@RunCBaseEnd
 64 WHERE MachineName=@MachineName
 65 
 66 BEGIN TRY
 67 
 68 INSERT INTO dbo.CBaseCounterData_OneMinute(CounterID, CounterDateTime, CounterValue,MaxCounterValue)
 69 SELECT CounterID 
 70         ,DATEADD(MI,-DATEDIFF(MI,CounterDateTime,Dateadd(week,1,@RunCBaseEnd))%(7*24*60),Dateadd(week,1,@RunCBaseEnd)) CounterDateTime
 71         ,AVG(CounterValue) CounterValue,MAX(CounterValue) MaxCounterValue
 72 FROM (
 73 SELECT CounterID,CounterDateTime,CounterValue
 74 FROM SQLPerfDataStat_Histroy.dbo.CounterData_OneMinute_Bak a (NOLOCK)
 75 WHERE 
 76 (
 77 (CounterDateTime>=Dateadd(week,-7,@RunCBaseEtart) 
 78 AND CounterDateTime<Dateadd(week,-7,@RunCBaseEnd))
 79 OR 
 80 (CounterDateTime>=Dateadd(week,-6,@RunCBaseEtart) 
 81 AND CounterDateTime<Dateadd(week,-6,@RunCBaseEnd))
 82 OR 
 83 (CounterDateTime>=Dateadd(week,-5,@RunCBaseEtart) 
 84 AND CounterDateTime<Dateadd(week,-5,@RunCBaseEnd))
 85 OR         
 86 (CounterDateTime>=Dateadd(week,-4,@RunCBaseEtart) 
 87 AND CounterDateTime<Dateadd(week,-4,@RunCBaseEnd))
 88 OR 
 89 (CounterDateTime>=Dateadd(week,-3,@RunCBaseEtart) --取近四周
 90 AND CounterDateTime<Dateadd(week,-3,@RunCBaseEnd))
 91 OR 
 92 (CounterDateTime>=Dateadd(week,-2,@RunCBaseEtart) 
 93 AND CounterDateTime<Dateadd(week,-2,@RunCBaseEnd))
 94 OR 
 95 (CounterDateTime>=Dateadd(week,-1,@RunCBaseEtart) 
 96 AND CounterDateTime<Dateadd(week,-1,@RunCBaseEnd))        
 97 ) AND  EXISTS (SELECT TOP 1 1 FROM CounterDetails_Collect WITH(NOLOCK) WHERE CounterID = a.CounterID AND MachineName=@MachineName)
 98 UNION ALL
 99 SELECT CounterID,CounterDateTime,CounterValue 
100 FROM dbo.CounterData_OneMinute a (NOLOCK)
101 WHERE (CounterDateTime>=@RunCBaseEtart 
102         AND CounterDateTime<@RunCBaseEnd) 
103 AND  EXISTS (SELECT TOP 1 1 FROM CounterDetails_Collect WITH(NOLOCK) WHERE CounterID = a.CounterID AND MachineName=@MachineName)
104 ) AA
105 GROUP BY CounterID,DATEADD(MI,-DATEDIFF(MI,CounterDateTime,Dateadd(week,1,@RunCBaseEnd))%(7*24*60),Dateadd(week,1,@RunCBaseEnd))
106 
107 END TRY
108 BEGIN CATCH
109   IF @@TRANCOUNT >0
110   BEGIN
111     Rollback;
112   END;
113   THROW 
114 END CATCH
115 
116 FETCH NEXT FROM CBaseCur INTO @MachineName,@LastOneMinute,@RunCBaseEnd
117 END
118 CLOSE CBaseCur
119 DEALLOCATE  CBaseCur
spb_CBaseCounterData

相关文章: