SQL Server 可观测最佳实践
xsobi 2024-11-24 00:28 1 浏览
SQL Server 简介
SQL Server 是微软公司开发的一款关系数据库管理系统,支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台,而无论是物理还是虚拟形式,自建部署环境还是在云环境中,运行的操作系统是 Windows 还是 Linux,我们都需要关注 SQL Server 的重点指标。
本文主要讲解如何监控自建的 SQL Server。监控云上的 RDS SQL Server 服务,可以参考这些文章:https://docs.guance.com/integrations/aliyun_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:port
host = ""
## your sqlserver user,password
user = ""
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.1
allow_tls10 = false
## connection timeout default: 30s
connect_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 10s
interval = "10s"
## Set true to enable election
election = 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 的高效运行和稳定性。
- 上一篇:「干货」通俗易懂的Deno 入门教程
- 下一篇:现代编程语言那些让人激动的特性
相关推荐
- 好用的云函数!后端低代码接口开发,零基础编写API接口
-
前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...
- 快速上手:Windows 平台上 cURL 命令的使用方法
-
在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...
- 使用 Golang net/http 包:基础入门与实战
-
简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
-
你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...
- window使用curl命令的注意事项 curl命令用法
-
cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...
- Linux 系统curl命令使用详解 linuxctrl
-
curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...
- Tornado 入门:初学者指南 tornados
-
Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...
- PHP Curl的简单使用 php curl formdata
-
本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
-
本章涵盖使用Actix提供静态网页...
- 我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些
-
这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...
- linux文件下载、服务器交互(curl)
-
基础环境curl命令描述...
- curl简单使用 curl sh
-
1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...
- 常用linux命令:curl 常用linux命令大全
-
//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...
- 三十七,Web渗透提高班之hack the box在线靶场注册及入门知识
-
一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...
- 一周热门
- 最近发表
-
- 好用的云函数!后端低代码接口开发,零基础编写API接口
- 快速上手:Windows 平台上 cURL 命令的使用方法
- 使用 Golang net/http 包:基础入门与实战
- #小白接口# 使用云函数,人人都能编写和发布自己的API接口
- 极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关
- window使用curl命令的注意事项 curl命令用法
- Linux 系统curl命令使用详解 linuxctrl
- Tornado 入门:初学者指南 tornados
- PHP Curl的简单使用 php curl formdata
- Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)