sqlserver监控体系

 


 
思路:定期运行监控脚本,发送到邮箱处理
要测试的事项有:
1,性能,top50cpu: 每周两次
2,job运行情况:多服务器mssql job运行监控 早上一次
3,sqlserverlog:sqlserver日志提醒 :每5分钟一次
4,复制分发log(表:MSrepl_errors):每5分钟一次
5,运行次数最多的存储过程,分析看是否能加入缓存。
6,数据库运行的用户级错误:sqlserver有用户级错误时记录
7,系统业务流程逻辑有误,比如异常数据产生监控。

 

以上多是监控程序错误,但关于漏洞或程序逻辑错误就无法监测,需要采用另一手段,定时的与业务人员举行会议,收集反馈意见,从操作角度去进行优化,这种反馈的问题一般也是使用者最关心的,也最能取得最大效果。

   –目标 前50没有基表,md,frm,perm

SELECT TOP (10) qt.objectid,
 qs.total_worker_time/qs.execution_count/1000. as [平均消耗CPU 时间(ms)],
 total_worker_time/1000 AS [总消耗CPU 时间(ms)],
 CONVERT(DECIMAL(18,0),execution_count) [运行次数],
  dbo.SQLSig(SUBSTRING(qt.text,qs.statement_start_offset/2+1, –利用sqlsig函数进行参数化,以屏蔽传来的参数,使之标准化
  (case when qs.statement_end_offset = -1
  then DATALENGTH(qt.text)
  else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1),4000)
 as [查询语句], qt.text [所在存储过程],
 qt.dbid, dbname=db_name(qt.dbid),
 qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
WHERE qs.last_execution_time >=CONVERT(VARCHAR(10),GETDATE(),120)
AND object_name(qt.objectid,qt.dbid) NOT LIKE  'sp_%' –复制分发存储过程
ORDER BY [运行次数] DESC

 

–预估运行次数

SELECT SUM(日平均运行次数)
FROM (SELECT  CONVERT(DECIMAL(18,0),execution_count /
(NULLIF((DATEDIFF(mi,creation_time,GETDATE())*1.0/(60*24)),0))) 日平均运行次数
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
–WHERE  object_name(qt.objectid,qt.dbid)  LIKE 'frmValidPage%' OR object_name(qt.objectid,qt.dbid)  LIKE 'frmMenu%'
)m

posted on 2016-07-23 14:31  低级程序人员  阅读(288)  评论(0编辑  收藏  举报

导航