SQL server内存问题排查方案

前言

由于昨晚线上服务器数据库突然访问数据缓慢,任务管理里面SQL server进程爆满等等,重大事故的排查拟写解决方案。
在这里插入图片描述

整体思路

  1. 查询数据库请求连接:排查连接池是否占满
  2. 查询数据库请求量:排查数据是否存在反复查询
  3. 查询数据库阻塞语句以及执行语句:排查数据库是否存在历史SQL语句阻塞以及当前执行的SQL语句是否存在问题
  4. 查询数据库语句执行时间:排查数据库是否因为数据量过大导致的
  5. 定位到问题指定位置

查询数据库请求连接

SELECT DB_NAME(dbid) AS DatabaseName, COUNT(*) AS ConnectionCount 
FROM sys.sysprocesses
WHERE dbid > 0
GROUP BY dbid;

在这里插入图片描述
查看连接池比较正常,除了master主数据库存在大量连接,其他业务数据库正常,猜测应该是排查人员的连接池,不太确定具体原因,但是排除连接池超量的问题。

查询数据库请求量

SELECT client_net_address AS '客户端IP', COUNT(*) AS '请求次数'
FROM sys.dm_exec_connections
GROUP BY client_net_address
ORDER BY COUNT(*) DESC;

在这里插入图片描述
通过SQL语句排查是否存在大量重复数据请求量,显然并不是请求次数的问题,也就是说没有频繁的请求量,因此排除数据请求频繁的问题。

查询数据库阻塞语句以及执行语句

SELECT TOP 100 dest.[text] AS 'sql语句',session_id,status,start_time FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest ORDER BY [cpu_time] DESC

在这里插入图片描述
在这里插入图片描述
查询到数据库正在执行的SQL语句并不存在阻塞的SQL语句,发现当前在执行的SQL语句比较正常,单独执行这些SQL语句并不存在大量数据访问,最多六千条数据量,这个量很小,因此无法确定,但是可以确定数据库不存在问题,SQL语句也比较正常。

查询数据库语句执行时间

SELECT --TOP 20 
total_worker_time / 1000 AS [自编译以来执行所用的CPU时间总量(ms)],total_elapsed_time/1000 as [完成执行此计划所用的总时间],total_elapsed_time / execution_count/1000 as [平均完成执行此计划所用时间],execution_count  as [上次编译以来所执行的次数],   creation_time as [编译计划的时间],deqs.total_worker_time / deqs.execution_count / 1000 AS [平均使用CPU时间(ms)],last_execution_time AS [上次开始执行计划的时间],total_physical_reads [编译后在执行期间所执行的物理读取总次数],total_logical_reads/execution_count [平均逻辑读次数],min_worker_time /1000 AS [单次执行期间所用的最小CPU时间(ms)],max_worker_time / 1000 AS [单次执行期间所用的最大 CPU 时间(ms)],SUBSTRING(dest.text, deqs.statement_start_offset / 2 + 1,         (CASEWHEN deqs.statement_end_offset = -1 THENDATALENGTH(dest.text)         ELSE deqs.statement_end_offsetEND - deqs.statement_start_offset) / 2 + 1) AS [执行SQL],dest.text as [完整SQL],db_name(dest.dbid) as [数据库名称],object_name(dest.objectid, dest.dbid) as [对象名称],deqs.plan_handle [查询所属的已编译计划]FROM sys.dm_exec_query_stats deqs WITH(NOLOCK)CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE (max_worker_time / 1000)>100--完成执行此计划所用的总时间降序ORDER BY total_elapsed_time/1000 DESC

在这里插入图片描述
在这里插入图片描述
从SQL语句执行时间分析出(后补的图忽略第一个删除的操作),整体分析下来是 tb_SN 和 tb_SNs 两张表耗时严重,接下来只需使用查询语句查询两张表数量即可。

问题分析与定位

查询序列号表 tb_SN

SELECT COUNT(*) FROM tb_SN243779

排查不是序列号表的问题,那么就只有序列号流水表的问题啦

查询序列号流水表 tb_SNs

SELECT COUNT(*) FROM tb_SNs

使用该命令果然执行时间缓慢,因此可以判断是数据量太大导致的。

使用压缩存储快速查看数据量

点击 tb_SNs 流水表 【右键】【存储】【管理压缩】【下一步】
在这里插入图片描述
流水表五千万条数据,因此可以确定序列号流水表存在数据量过多导致的,整个和序列号流水相关的程序出现访问缓慢的问题。

竟然知道问题了,和相关领导咨询是否可以删除数据,并确定删除的时限范围,确定删除 2023 年以前的所有数据,释放数据量。
首先我们备份整个数据库防止误操作,然后复制并创建与 tb_SNs 的数据结构相同的表,接下来将 2023 年以前的所有数据拷贝到该表上,最后在删除 tb_SNs 的 2023 年以前的所有数据。
如此操作下,我们发现删除的数据量只有十万条,显然这是不对的,总共三年不到,不可能只有怎么点数据,因此判断是不是某个时间点插入大量数据,然后我们根据去年年份查询去年的数据量:

SELECT TOP 10 COUNT(*) FROM tb_SNs WHERE CreationDate < '2024-01-01'
571638

五十万条显然是今年数据量突然增加的,因此开始查询月时间节点产生的数据,发现三月以前都正常,数据出现在三月份,接下来开始查询每日的数据量,三月五号正常,三月六号出现五千万数据,因此问题出现在昨天的时候。

解析问题

接下来问题就好解决啦,首先根据主要数据查询事故发生节点,再通过事故发生节点咨询是否出现错误操作。

  1. 查询负责人该节点人员工作安排
  2. 根据业务确定程序是否存在逻辑判断插入问题
  3. 判断数据是否可以删除
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Hadoop大数据技术】——HDFS分布式文件系统(学习笔记)

&#x1f4d6; 前言&#xff1a;Hadoop的核心是HDFS&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;和MapReduce。其中&#xff0c;HDFS是解决海量大数据文件存储的问题&#xff0c;是目前应用最广泛的分布式文件系统。 目录 &#x…

C++复习笔记——泛型编程模板

01 模板 模板就是建立通用的模具&#xff0c;大大提高复用性&#xff1b; 02 函数模板 C另一种编程思想称为 泛型编程 &#xff0c;主要利用的技术就是模板 C 提供两种模板机制:函数模板和类模板 函数模板语法 函数模板作用&#xff1a; 建立一个通用函数&#xff0c;其函…

NextJs教程系列(一):介绍安装

什么是 Next.js Next.js 是一个用于构建全栈 Web 应用程序的 React 框架。您可以使用 React 组件来构建用户界面&#xff0c;并使用 Next.js 来构建其他功能和优化。 Next.js 的特点 构建全栈 Web 应用程序的 React 框架。为 React 提供了开箱即用的服务器端渲染。为 React …

基于java SSM的房屋租赁系统设计和实现

基于java SSM的房屋租赁系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

使用Jenkins CI/CD和Gitee webhooks发布前端自定义组件库到npm

通过之前的学习&#xff0c;沉淀出了一套自定义公共组件库&#xff0c;现在要实现将其通过Jenkins的CICD 推送代码到npm上 一、配置npm &#xff08;服务器命令行窗口上配置&#xff09; 1.设置官方网址 npm config set registry https://registry.npmjs.org/2.登录&#xf…

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…

四节点/八节点四边形单元悬臂梁Matlab有限元编程 | 平面单元 | Matlab源码 | 理论文本

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

微服务获取登录用户Id与单体服务下获取用户Id对比(黑马头条Day03)

前置声明 当前前后端分离开发项目中&#xff0c;后端某个请求向具体某个数据库中的多个表插入数据时&#xff0c;经常需要使用到当前登录用户的Id&#xff08;唯一标识&#xff09;。在当前用户线程下以实现变量共享&#xff0c;同时为了避免不同用户线程之间操作变量的影响&am…

期货开户如何查询最新的手续费明细?

一、如何查询最新的手续费明细和保证金明细&#xff1f; 1、手机或者电脑交易软件下单窗口&#xff0c;点击品种合约&#xff0c;一般会显示1手需要的保证金比例&#xff0c;比如手机博弈大师/同花顺期货通等。 2、电脑交易软件下单窗口&#xff0c;点合约&#xff0c;里面会…

在idea中如何开启项目的热部署

热部署&#xff1a;就是当我们IDEA的项目在运行期间&#xff0c;我们修改代码以后&#xff0c;不需要我们自己重启项目&#xff0c;IDEA就会自动的重启项目 在idea中开启项目热部署的步骤 第一步&#xff1a;引入热部署的依赖 <dependency><groupId>org.springfr…

重磅!云智慧推出轻量智能化服务管理平台轻帆云

近日&#xff0c;云智慧推出智能服务管理平台轻帆云&#xff0c;通过构建服务体系、规范服务流程、保障服务质量、提升服务效能&#xff0c;为企业提供安全可靠的一站式服务管理解决方案。SaaS轻量化部署方式&#xff0c;仅需通过简单操作&#xff0c;即可轻松完成搭建&#xf…

物体检测-系列教程22:YOLOV5 源码解析12 (BottleneckCSP层、Conv模块、Bottleneck模块)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 16、BottleneckCSP层 16.1 BottleneckCSP类 位置&#xff1a;yolov5/models/common.py/…