SQL Server 可观测最佳实践
SQL Server 简介
SQL Server 是微软公司开发的一款关系数据库管理系统,支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台,而无论是物理还是虚拟形式,自建部署环境还是在云环境中,运行的操作系统是 Windows 还是 Linux,我们都需要关注 SQL Server 的重点指标。
本文主要讲解如何监控自建的 SQL Server。监控云上的 RDS SQL Server 服务,可以参考这些文章:阿里云 RDS SQLServer - 观测云文档
监控 SQL Server 可以帮助我们及时识别数据库性能瓶颈和活动,确保数据库的健康和安全。通过及时预警和资源优化,提升整体性能和数据完整性,甚至可以为企业的业务决策提供有力支持。
观测云介绍
观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全巡检,智能监控等等。
操作步骤
下面是在 Windows 主机中,部署 DataKit 并开通 SQL Server 采集器的示例。DataKit 自身提供 SQL Server 指标和日志的采集,安装好 DataKit 之后,开通 SQL Server 采集器,即可采集 SQL Server 指标和日志到观测云。
部署 DataKit
登录观测云控制台,点击「集成」 -「DataKit」 - 「Windows」,复制 PowerShell 安装命令,在主机中可以一键安装。

创建 SQLServer 帐号
创建一个用户,用于采集指标数据。
USE master;
GO
CREATE LOGIN [guance] WITH PASSWORD = N'yourpassword';
GO
GRANT VIEW SERVER STATE TO [guance];
GO
GRANT VIEW ANY DEFINITION TO [guance];
GO
开启 SQLServer 采集器(指标)
进入 DataKit 安装目录下的 conf.d/db 目录,复制 sqlserver.conf.sample 并命名为 sqlserver.conf 。示例如下:
[[inputs.sqlserver]]## your sqlserver host ,example ip:porthost = ""## your sqlserver user,passworduser = ""password = ""## Instance name. If not specified, a connection to the default instance is made.instance_name = ""## Database name to query. Default is master.database = "master"## by default, support TLS 1.2 and above.## set to true if server side uses TLS 1.0 or TLS 1.1allow_tls10 = false## connection timeout default: 30sconnect_timeout = "30s"## parameters to be added to the connection string## Examples:## "encrypt=disable"## "certificate=/path/to/cert.pem"## reference: https://github.com/microsoft/go-mssqldb?tab=readme-ov-file#connection-parameters-and-dsn ## connection_parameters = "encrypt=disable"## (optional) collection interval, default is 10sinterval = "10s"## Set true to enable electionelection = true## configure db_filter to filter out metrics from certain databases according to their database_name tag.## If leave blank, no metric from any database is filtered out.# db_filter = ["some_db_instance_name", "other_db_instance_name"]## Run a custom SQL query and collect corresponding metrics.## [[inputs.sqlserver.custom_queries]]# sql = '''# select counter_name,cntr_type,cntr_value# from sys.dm_os_performance_counters# '''# metric = "sqlserver_custom_stat"# tags = ["counter_name","cntr_type"]# fields = ["cntr_value"]# [inputs.sqlserver.log]# files = []# #grok pipeline script path# pipeline = "sqlserver.p"[inputs.sqlserver.tags]# some_tag = "some_value"# more_tag = "some_other_value"
开启 SQLServer 采集器(日志)
如需采集 SQL Server 的日志,可在 sqlserver.conf 中 将 files 打开,并写入 SQL Server 日志文件的绝对路径。比如:
[[inputs.sqlserver]]...[inputs.sqlserver.log]files = ["C:/Program Files/Microsoft SQL Server/MSSQL13.MSSQLSERVER/MSSQL/Log/ERRORLOG"]
开启日志采集以后,默认会产生日志来源(source)为 sqlserver 的日志。
重启 DataKit
以管理员身份运行 PowerShell,执行以下命令:
datakit service -R
关键指标
监控 SQL Server 时,主要需要从以下维度进行,通过综合监控这些维度,可以确保 SQL Server 的高效运行和稳定性:
- 系统的运行情况:包括 CPU 内存磁盘以及网络相关信息,这些在主机或者容器层面的监控中包含,本文不再赘述
- T-SQL 查询:即 Transact-SQL,是 SQL Server 的查询和编程语言。监控 T-SQL 查询的性能,包括批处理请求的频率和执行计划的效率,以优化数据库的响应时间并减少查询延迟。
- 缓冲缓存:跟踪缓冲缓存的命中率和页面寿命,确保数据访问主要在内存中完成,减少对磁盘操作的依赖。
- 锁:监控锁等待和进程阻塞情况,识别并解决数据库并发操作中的问题,保持事务处理的流畅性。
- 索引:监控索引的使用情况和性能,包括索引的碎片化和页面分裂,以维持查询效率和数据访问速度。
- 连接:监控数据库的连接数量和连接稳定性,确保应用程序和服务的持续可用性和性能。
- 资源使用情况:监控内存使用情况、磁盘空间使用以及数据库和日志的读写量,评估数据存储的效率和进行容量规划。
| 分类 | 指标集 | 指标 | 描述 | 单位 |
|---|---|---|---|---|
| T-SQL | sqlserver_performance | batch_requests | Batch requests/sec,数据库每秒的批量请求数,衡量数据库引擎每秒接收的批处理请求数量 | count |
| sqlserver_performance | sql_compilations | SQL compilations/sec,每秒 SQL 编译数,记录 SQL Server 每秒编译的批处理数量,理想情况下应尽量减少编译次数 | count | |
| sqlserver_performance | sql_re_compilations | SQL recompilations/sec,每秒 SQL 重新编译数,衡量重新编译的频率,频繁的重新编译可能影响性能 | count | |
| 缓冲缓存 | sqlserver_performance | buffer_cache_hit_ratio | 缓存命中率,衡量缓冲管理器从缓冲缓存中拉取页面的频率,较高的命中率表示更有效的内存使用 | percent |
| sqlserver_performance | page_life_expectancy | 页面寿命预期,页面在缓冲缓存中预期停留的时间,较高的值表明数据库可以有效地在内存中处理读写操作 | s(秒) | |
| sqlserver_performance | checkpoint_pages | 检查点页面数量,在检查点期间从缓冲缓存写入磁盘的页面数量,帮助优化缓冲管理器 | count | |
| 锁指标 | sqlserver_performance | lock_waits | Lock waits/sec,每秒锁等待数,每秒导致调用事务等待锁的请求数 | count |
| sqlserver_performance | processes_blocked | Processes blocked,被阻塞的进程数,帮助识别潜在的死锁问题 | count | |
| 索引 | sqlserver_performance | page_splits | Page splits/sec,每秒页面拆分数,过多的页面拆分可能影响查询性能 | count |
| 连接 | sqlserver_performance | User connections | 用户连接数量,当前活动的用户连接数量 | count |
| 内存 | sqlserver | committed_memory | 已提交给内存管理器的内存量 | Bytes |
| target_memory | 内存管理器可以使用的内存量。当此值大于已提交的内存时,内存管理器将尝试获取更多内存;当此值小于已提交的内存时,内存管理器将尝试减少已提交的内存量。 | Bytes | ||
| 数据库读写 | sqlserver_database_io | reads | 数据读取数量,file_type 分为 Rows(数据库) 和 Log(日志) | count |
| sqlserver_database_io | reads_bytes | 数据读取大小,file_type 同上 | Bytes | |
| sqlserver_database_io | writes | 数据写入数量,file_type 同上 | count | |
| sqlserver_database_io | write_bytes | 数据读取大小,file_type 同上 | Bytes |
重点指标说明:
- Batch requests/sec 每秒批量请求数:记录了服务器每秒接收的 T-SQL 命令批处理的数量。一个批处理可以包含单个或多个 SQL 语句,并且当整个批处理执行完毕后才返回结果。这个指标可以帮助数据库管理员(DBA)了解服务器的负载情况以及可能存在的瓶颈,一般来说,需要结合其他性能指标如 CPU 使用率、I/O 性能等一起分析:如果这个指标的值异常高,可能意味着服务器正在处理大量的请求,这可能会影响服务器的其他性能指标;相反,如果这个指标的值很低,也不一定是好事,它可能意味着系统存在瓶颈,导致 SQL Server 无法充分利用其全部潜力。
- Buffer cache hit ratio 缓存命中率:衡量的是从 SQL Server 的缓冲区高速缓存中直接找到数据页的次数与所有尝试查找数据页的次数的比例。这个比例显示了 SQL Server 如何有效地使用其缓冲区高速缓存。对于需要更高性能的系统,一般希望命中率是在 95% 以上;如果这个值较低,则可能表明存在内存问题,可能需要增加内存或者优化数据库和查询以减少对内存的需求。
- Page life expectancy 页面寿命预期:衡量的是一个数据页在缓冲池中保持不被引用的时间长度(以秒为单位)。这个指标反映了内存中页面的稳定性,如果一个页面在缓冲池中停留的时间越长,说明它被重用的可能性越大,这样就减少了对磁盘的访问次数,提高了数据库的查询性能、一般来说,PLE的值如果低于 300 秒,可能表明 SQL Server 的缓冲池内存不足,需要更多的物理内存或可能需要优化查询和索引以减少内存需求;相反,如果PLE的值很高,这通常意味着内存充足,数据页可以长时间保留在缓冲池中,从而提高数据库的读取性能。
- Lock Waits/sec 每秒锁等待数:衡量的是数据库引擎锁定管理器每秒需要调用者等待的锁请求的次数。这个指标用于衡量锁请求的等待频率,可以帮助数据库管理员了解数据库中的并发情况以及可能存在的锁争用问题。如果值很高,这可能表明数据库中的许多操作因为锁而不得不等待。这并不一定意味着有性能问题,但可能表明存在大量的并发事务,或者某些事务持有锁的时间过长,导致其他事务等待。
监控视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “SQL Server”, 选择“SQL Server 监控视图”,点击“确定”。





监控器
- SQL Server - 有数据库处于离线状态


- SQL Server - 缓存命中率较低


总结
通过监控 SQL Server 数据库特定的指标,比如 T-SQL 查询性能、缓冲缓存效率、锁和阻塞、索引健康和数据库连接状态等,能够帮助我们优化查询效率,并进行有效的容量规划。通过综合监控这些关键指标,可以及时发现并解决潜在的性能瓶颈,从而维护 SQL Server 的高效运行和稳定性。
相关文章:
SQL Server 可观测最佳实践
SQL Server 简介 SQL Server 是微软公司开发的一款关系数据库管理系统,支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台,而无论是物理还是虚拟形式,自建部署环境还是在云环境中,运行的操作系…...
青少年编程能力等级测评CPA Python编程(一级)
青少年编程能力等级测评CPA Python编程(一级) (考试时间90分钟,满分100分) 一、单项选择题(共20题,每题3.5分,共70分) 下列语句的输出结果是( )。 print(35*2) A&a…...
WebSocket 连接频繁断开的问题及解决方案
文章目录 WebSocket 连接频繁断开的问题及解决方案1. 引言2. 什么是 WebSocket?2.1 WebSocket 的优势2.2 WebSocket 的工作原理 3. WebSocket 连接频繁断开的常见原因3.1 服务器端问题3.1.1 服务器负载过高3.1.2 服务器配置不当3.1.3 超时设置 3.2 网络问题3.2.1 网…...
[CSP篇] CSP2024 游记(上)
Part.0 前言 在刚刚过去的 CSP-J2024 以及 CSP-S2024 中,不知大家十分用自己最好的状态参加了这次重要的测试,取得了令自己努力的成绩呢? 文章发布在 2024 年 11 月 1 日,距离出结果还有 3 − 5 3-5 3−5 天,如有需…...
Mac “屏幕保护程序启动或显示器关闭后需要密码“无效
屏幕保护程序启动或显示器关闭后需要密码只能选择“立即”的解决方法: 在 iPhone mirror中设置,每次询问权限。 参考:https://support.apple.com/en-us/120421...
架构师之路-学渣到学霸历程-35
Nginx的配置文件说明 nginx的学习,到了关键的部分,其实想要学好nginx就一定要了解配置文件;我们看看配置文件是怎么样的? 1、nginx的配置文件路径 不同的安装方式、nginx的配置文件路径也有所不同 源码安装配置文件路径&#…...
2024-10月的“冷饭热炒“--解读GUI Agent 之computer use?phone use?——多模态大语言模型的应用进阶之路
GUI Agent 之computer use?phone use?——多模态大语言模型的进阶之路 1.最新技术事件浅析三、思考和方案设计工具代码部分1.提示词2.工具类API定义,这里主要看computer tool就够了 总结 本文会总结概括这一应用的利弊,然后给出分析和工具代…...
sheng的学习笔记-AI基础-激活函数
ai目录:sheng的学习笔记-AI目录-CSDN博客 目录 Sigmoid Tanh 函数 ReLU(Rectified Linear Unit)函数 Leaky ReLU ELU(Exponential Linear Unit) SEIU Swish 激活函数的选择 激活函数(Activation F…...
重构代码之重复的观察数据
在代码重构中,重复的观察数据 是一种模式,指的是系统中存在多处对同一数据的观察或记录,使得数据需要在多处维护,导致了数据同步的困难和维护成本的增加。这种重复通常会引起以下几个问题: 数据不一致:由于…...
SpringBoot【实用篇】- 热部署
文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候,我们必须在代码修改完后再重启程序,程序才会同步你修改的信息。如果我们想快速查…...
C语言 核心语法2
时间:2024.11.1 一、学习内容 1、计算机的存储规则 1.1存储规则 视频是图片和声音的结合体。 在计算机中,任意数据都是以二进制的形式进行存储的。 在计算机中,二进制可以表示万事万物。 1.2十进制 1.3二进制的运算过程 1.4文本存储 …...
【论文阅读】Real-ESRGAN
学习资料 论文题目:Real-ESRGAN:使用纯合成数据训练真实世界的盲超分辨率(Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data)论文地址:IEEE Xplore 全文 PDF:代码&#…...
安达发|零部件APS车间排程系统销售预测的优点
2024制造业面临着前所未有的挑战与机遇。为了保持竞争力,企业必须确保其生产系统能够高效、灵活地运作。在这方面,采用高级计划与排程系统,特别是零部件APS车间排程系统的预测方法,已成为提升生产效率和响应能力的关键策略。这种系…...
Android 同花顺面经
Android 同花顺面经 文章目录 Android 同花顺面经一面 一面 Android组件化搭建使用接口层路由有什么缺点? 如果更改接口的话,其他的依赖的moudle都得改 说说kotlin和java的区别? Java是支持面向对象的编程,Kotlin是支持面向对象支…...
搜维尔科技:Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用
Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用 搜维尔科技:Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用...
网络:IP分片和组装
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…...
Oracle dblink创建使用
1、首先要有创建Database Link 的权限。可通过语句查看当前用户是否有权限: SELECT * FROM USER_SYS_PRIVS;如果没有权限,使用系统管理员用户登陆后给当前用户授权: GRANT CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK TO user;…...
Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification
Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification Neurips 24 推荐指数: #paper/⭐⭐⭐# 摘要 我们的研究结果表明,由于GNN中的超参数设置次优,之前报道的GT的优越性可能被夸大了。值得注意的是ÿ…...
Android 字节飞书面经
Android 字节飞书面经 文章目录 Android 字节飞书面经一面二面 一面 1. 线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 2. 根本区别:进程是操作系统资源分配的基本单位,…...
选择好友窗口(三)
选择好友窗口(三) 前言 在前两集我们就完成了整个左半部分的内容了,那么我们这一集开始就要完成我们的选择好友窗口的右侧部分。 需求分析 我们要做出的效果如下图 可以看到我们整个布局是一个网格的布局,当然也可以做成一个垂…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
