状态异常MSSQL:调查上次运行的异常状态(mssql 上次运行)
MSSQL状态异常是非常常见的数据库运维问题,它会影响数据库的性能和安全,可能会导致数据的丢失或不可用。理解MSSQL状态异常并对其进行排查是数据库管理员的基本技能。
首先,应定期检查数据库是否存在状态异常。我们可以使用Sys.dm_os_wait_stats SQL脚本查看所有线程的等待状态,也可以使用资源监视器可视化地观察所以系统的CPU,内存,网络和I / O的使用情况,以发现是否存在状态异常:
SELECT * FROM sys.Dm_OS_WaIts_stats
检测出有状态异常后,我们需要进一步调查上次运行时出现的异常状态情况。为了查看每个连接到服务器上占用资源最多的查询,可以使用查询数据库缓冲区使用情况的SQL脚本:
SELECT
SUBSTRING(text,statement_start_offset+2,
((CASE
WHEN statement_end_offset =-1
THEN DATALENGTH(text)
ELSE statement_end_offset END)
– statement_start_offset -2) ) AS query_text,
execution_count, total_logical_reads
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
ORDER BY total_logical_reads DESC
;
另外,通过定期审核操作日志,以及使用启动跟踪跟踪MSSQL每次启动时的状态来排查状态异常是非常重要的。我们可以在操作系统的安全日志中查看事件ID,以跟踪MSSQL一次启动过程中发生的异常:
set nocount on
CREATE TABLE #events (
eventid int,
EventTypeName nvarchar (100),
EventType Nvarchar (10),
StartTime datetime,
EndTime datetime
)
INSERT INTO #events(eventid, EventTypeName, EventType, StartTime, EndTime)
SELECT
eventid, EventTypeName, EventType, StartTime, EndTime
FROM
Sys.fn_trace_getinfo(3)
WHERE
(EventTypeName like ‘%instance start%’ or EventTypeName like ‘%instance stop%’)
UPDATE #events
SET EventName = ‘Start’
WHERE EventType = 3
SELECT * FROM #events
通过审核每次启动停止实例的日志,我们就可以更加清晰地了解发生了什么状态异常,从而能够更加有效地进行排查和修复。
总之,通过定期检查数据库是否存在状态异常、审核数据库缓冲区使用情况、审核系统操作日志等,我们就可以有效的调查上次运行的异常状态。通过理解MSSQL状态异常并及时进行排查,数据库管理员可以保护数据库性能和安全,避免不必要的损失。