1. SQLServer监控的重要性
对于一个企业级应用来说,数据库扮演着非常重要的角色。SQLServer作为商业级数据库中的一员,被广泛应用于企业的数据存储、数据处理、数据分析等重要场景中。因此,对SQLServer的监控是必不可少的。监控可以帮助管理员了解SQLServer的运行情况,及时发现问题,并进行排查,保障数据的安全性、可用性和稳定性。
2. 监控要关注哪些方面
2.1 CPU使用率
CPU使用率是SQLServer运行情况的一个重要指标。当CPU使用率达到100%时,说明SQLServer超负荷运行,该问题需要尽快解决。可以通过以下SQL脚本来查看SQLServer的CPU使用率:
SELECT TOP 1
total_worker_time/execution_count/1000 AS [CPU(ms)/execution]
FROM
sys.dm_exec_query_stats
CROSS APPLY
(SELECT CONVERT(money, value) FROM sys.dm_exec_plan_attributes(plan_handle, 'set_options') WHERE attribute = 'set_options') AS SETS(options)
WHERE
execution_count > 0
AND LEN(SETs.options) < 30
ORDER BY
total_worker_time/execution_count DESC;
2.2 内存使用情况
SQLServer使用内存缓存数据库的数据来提高数据库查询的性能。我们需要监控SQLServer的内存使用情况,防止SQLServer占用过多的内存,影响系统的稳定性。我们可以通过以下SQL脚本来查看SQLServer的内存使用情况:
SELECT
total_physical_memory_kb /1024 AS [total_physical_memory_MB],
available_physical_memory_kb /1024 AS [available_memory_MB],
system_memory_state_desc,
cpu_count,
hyperthread_ratio,
committed_kb /1024 AS [Committed_MB],
committed_target_kb /1024 AS [CommittedTarget_MB],
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_sys_memory;
根据查看到的内存使用情况来调整SQLServer进程使用内存的上限,并且定时检查内存使用情况,判断是否需要调整内存使用上限。
2.3 磁盘IO统计信息
SQLServer的数据和日志文件通常存储于硬盘上,因此需要关注SQLServer对磁盘的IO操作。I/O瓶颈是影响SQLServer响应速度的主要因素之一。通过以下SQL脚本来查看SQLServer的磁盘IO统计信息:
SELECT
[Drive],
num_of_reads,
CAST(num_of_bytes_read/1048576.0 AS DECIMAL(10, 2))AS num_of_bytes_read_MB,
num_of_writes,
CAST(num_of_bytes_written/1048576.0 AS DECIMAL(10, 2))AS num_of_bytes_written_MB,
io_stall,
CAST(io_stall_read_ms/(1.0 + num_of_reads) AS DECIMAL(10, 2)) AS avg_read_stall_ms,
CAST(io_stall_write_ms/(1.0 + num_of_writes) AS DECIMAL(10, 2)) AS avg_write_stall_ms
FROM sys.dm_io_virtual_file_stats(NULL, NULL) IOVirtualFileStats
CROSS APPLY (
SELECT SUBSTRING(mf.physical_name, 1, 2) [Drive] FROM sys.master_files mf WHERE IOVirtualFileStats.database_id = mf.database_id AND IOVirtualFileStats.file_id = mf.file_id
)FileNameMapped
ORDER BY io_stall DESC;
根据查看到的IO统计数据,监控I/O的使用情况,并定时进行IO性能的优化。
3. 链路监控的重要性
链路监控是指对网络连接进程自身及其所连接资源的健康性进行监控。在分布式系统中,链路监控可以帮助我们及时发现由于网络延迟、资源故障等因素导致的系统故障。
3.1 连接状态监控
SQLServer作为客户端需要连接远程服务器的场景比较常见,通过以下SQL脚本可以查看SQLServer的连接状态:
SELECT
session_id,
login_time,
[host_name],
[program_name],
[login_name],
[status],
[cpu_time],
[memory_usage],
[total_scheduled_time],
[total_elapsed_time]
FROM
sys.dm_exec_sessions;
通过查看SQLServer的连接状态,及时发现连接错误、连接延迟等问题,以提高系统的健壮性。
3.2 SQL Server Profiler 监控SQL语句
SQL Server Profiler 是用来监视SQL Server 的用户和系统活动的强大工具。通过SQL Server Profiler可以帮助我们监控SQL Server运行的所有语句,可以用以下SQL语句来启动SQL Server Profiler:
EXEC sp_trace_create @traceid OUTPUT, @options;
GO
-- Add a filter to the trace:
DECLARE @on bit;
SET @on = 1;
EXEC sp_trace_setevent @traceid, 10, 1, @on;
EXEC sp_trace_setevent @traceid, 10, 9, @on;
EXEC sp_trace_setevent @traceid, 10, 6, @on;
EXEC sp_trace_setevent @traceid, 10, 10, @on;
EXEC sp_trace_setevent @traceid, 10, 14, @on;
EXEC sp_trace_setevent @traceid, 10, 11, @on;
EXEC sp_trace_setevent @traceid, 10, 12, @on;
-- Set the filters
DECLARE @intfilter INT;
DECLARE @bigintfilter BIGINT;
EXEC sp_trace_setfilter @traceid, 1, 0, 7, @bigintfilter;
EXEC sp_trace_setfilter @traceid, 10, 0, 6, N'SQLServerProfiler';
-- Start the trace
EXEC sp_trace_setstatus @traceid, 1;
GO
启动后可以查看SQL Server的所有语句,并从中分析SQL Server运行情况。
4. 总结
监控对于保障企业级应用的稳定性和可用性来说是非常重要的。本文介绍了从SQLServer角度看待链路监控,在监控应用时需要关注的几个方面,并且给出了一些SQL脚本供参考。希望本文能对读者们有所启发!