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