SQL Server 可观测最佳实践

news2024/11/6 5:27:13

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: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-SQLsqlserver_performancebatch_requestsBatch requests/sec,数据库每秒的批量请求数,衡量数据库引擎每秒接收的批处理请求数量count
sqlserver_performancesql_compilationsSQL compilations/sec,每秒 SQL 编译数,记录 SQL Server 每秒编译的批处理数量,理想情况下应尽量减少编译次数count
sqlserver_performancesql_re_compilationsSQL recompilations/sec,每秒 SQL 重新编译数,衡量重新编译的频率,频繁的重新编译可能影响性能count
缓冲缓存sqlserver_performancebuffer_cache_hit_ratio缓存命中率,衡量缓冲管理器从缓冲缓存中拉取页面的频率,较高的命中率表示更有效的内存使用percent
sqlserver_performancepage_life_expectancy页面寿命预期,页面在缓冲缓存中预期停留的时间,较高的值表明数据库可以有效地在内存中处理读写操作s(秒)
sqlserver_performancecheckpoint_pages检查点页面数量,在检查点期间从缓冲缓存写入磁盘的页面数量,帮助优化缓冲管理器count
锁指标sqlserver_performancelock_waitsLock waits/sec,每秒锁等待数,每秒导致调用事务等待锁的请求数count
sqlserver_performanceprocesses_blockedProcesses blocked,被阻塞的进程数,帮助识别潜在的死锁问题count
索引sqlserver_performancepage_splitsPage splits/sec,每秒页面拆分数,过多的页面拆分可能影响查询性能count
连接sqlserver_performanceUser connections用户连接数量,当前活动的用户连接数量count
内存sqlservercommitted_memory已提交给内存管理器的内存量Bytes
target_memory内存管理器可以使用的内存量。当此值大于已提交的内存时,内存管理器将尝试获取更多内存;当此值小于已提交的内存时,内存管理器将尝试减少已提交的内存量。Bytes
数据库读写sqlserver_database_ioreads数据读取数量,file_type 分为 Rows(数据库) 和 Log(日志)count
sqlserver_database_ioreads_bytes数据读取大小,file_type 同上Bytes
sqlserver_database_iowrites数据写入数量,file_type 同上count
sqlserver_database_iowrite_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 的高效运行和稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2230738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyEcharts | 认识图形--饼图和玫瑰图

饼图和玫瑰图 饼图玫瑰图rosetype 参数 饼图 from pyecharts.charts import Pie import pyecharts.options as optsfrom pyecharts.globals import CurrentConfig,NotebookType CurrentConfig.NOTEBOOK_TYPE NotebookType.JUPYTER_LAB CurrentConfig.ONLINE_HOST OnlineHos…

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的,通过某个中转包,获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…

这几款AI搜索产品,你用过几个?

AI搜索产品逐步走进普通大众的视野,当然也会有更多的产品进入市场供大家选择。 以下是一些常见的 AI 搜索产品: 综合型 AI 搜索平台: Perplexity:海外较受欢迎的 AI 搜索引擎,拥有百万用户。它利用 GPT、Claude、Llam…

[代码随想录打卡 Day3] 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

(ง •_•)ง今天出去玩了,只刷完了视频,做了部分题,就是具体整理明天整理。希望坚持下去。啊啊啊啊啊啊啊啊啊啊啊 链表理论基础 基础的就是单链表。 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成&#xff0…

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务

论文标题:How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者:Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊:CVPR 2023 DOI…

产品思维笔记(一):打造用户喜爱的产品by Marty Cagan

全文摘要 《启示录:打造用户喜爱的产品》是由美国著名产品经理Marty Cagan所著,他曾经是eBay最出色的产品经理之一,也是Google X实验室的创始人之一。在这本书中,他分享了自己的经验和教训,帮助读者更好地理解如何打造…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中,TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别,以通俗易懂的方式进行解释: 1. 模型层数 OSI 模型:有 7 层&#…

Unity humanoid 模型头发动画失效问题

在上一篇【Unity实战笔记】第二十二 提到humanoid 模型会使原先的头发动画失效,如下图所示: 头发摆动的是generic模型和动画,不动的是humanoid模型和动画 一开始我是尝试过在模型Optimize Game objects手动添加缺失的头发骨骼的,奈…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中,性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化,如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…

Rust 力扣 - 189. 轮转数组

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们观察数组的性质,可以通过翻转原数组,然后在翻转前k个元素,最后翻转k个之后的元素,最终就转换成了原数组的轮转数组 题解代码 impl Solution {pub fn rotate(…

Kubernetes中的cm存储

华子目录 1.configmap1.1configmap功能1.2configmap应用场景1.3configmap的使用场景1.4configmap创建方式1.4.1键值对创建1.4.2通过文件创建1.4.3通过目录创建1.4.4通过yaml文件创建 1.5configmap的应用示例1.5.1使用cm填充环境变量1.5.2通过数据卷使用configmap1.5.3利用confi…

tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法

取消默认的菜单项:清除tauri默认的菜单项,让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单,让菜单不显示,但是这个引发的问题就是复制黏贴撤销等功能也就没有了,解决办法: 新增加编辑下的子菜单&…

【SpringCloud详细教程】-01-一文了解微服务

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

Redis数据结构:List类型全面解析

文章目录 一、List数据类型1.1 简介1.2 应用场景1.3 底层结构 二、数据结构2.1 压缩列表ZipList2.2 双向链表LinkedList(后续已废弃)2.3 快速链表QuickList 三、List常见命令 一、List数据类型 1.1 简介 详细介绍:Redis五种数据类型、Strin…

kafka相关面试题

文章目录 什么是消息中间件?kafka 是什么?有什么作用?kafka 的架构是怎么样的?Kafka Replicas是怎么管理的?如何确定当前能读到哪一条消息?生产者发送消息有哪些模式?发送消息的分区策略有哪些&…

异步回调之Join

join:异步阻塞之闷葫芦 阻塞模式实现泡茶实例首先从基础的多线程join合并实验入手.join操作的原理是阻塞当前线程,直到待合并的目标线程执行完成. 线程的合并流程 Java中线程的合并流程是:假设线程A调用线程B的join()方法去合并B线程,那么线程A进入阻塞状态,直到线程B执行完…

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件,它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用,并探讨其在各种应用中不断扩展…

“揭开Ajax:实现无缝客户端与服务器通信的秘密”

一、概述 (一)概念: 1.概念: Ajax是一种web应用技术,可以借助客户端脚本与服务器端应用进行异步通讯,获取服务器数据以后,进行局部刷新进而提高数据响应和渲染速度。 2.开发基础&#xff1a…