linux

如何在Linux上监控SQL Server性能

小樊
40
2025-12-29 15:50:51
栏目: 云计算

Linux上监控 SQL Server 性能的可落地方案

一 快速排障的 Linux 与 SQL 组合

二 长期监控与可视化

三 常用 SQL 查询模板

SELECT TOP 5
    r.session_id,
    r.status,
    r.cpu_time,
    r.total_elapsed_time,
    t.text AS query_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
ORDER BY r.total_elapsed_time DESC;
SELECT
    (1.0 - CAST(SUM(CAST(1.0 * cntr_value AS FLOAT)) / SUM(CAST(1.0 * base.cntr_value AS FLOAT))) * 100.0 AS BufferCacheHitRatio
FROM sys.dm_os_performance_counters c
CROSS JOIN (
    SELECT cntr_value
    FROM sys.dm_os_performance_counters
    WHERE object_name LIKE '%Buffer Manager%'
      AND counter_name = 'Buffer cache hit ratio base'
) base
WHERE c.object_name LIKE '%Buffer Manager%'
  AND c.counter_name = 'Buffer cache hit ratio';
DBCC SQLPERF(LOGSPACE);
SELECT
    s.session_id,
    s.login_name,
    s.status,
    r.wait_type,
    r.wait_time,
    r.blocking_session_id,
    t.text
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t
ORDER BY r.wait_time DESC;

四 告警与自动化

#!/usr/bin/env bash
THRESHOLD=80
EMAIL="admin@example.com"
NOW=$(date '+%F %T')
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
  echo "$NOW - CPU 使用率超过阈值($THRESHOLD%),当前:$CPU_USAGE%" | mail -s "SQL Server CPU 告警" "$EMAIL"
fi

五 实践建议与注意事项

0
看了该问题的人还看了