Sql Server查询卡顿的排查方法

 更新时间:2024年07月31日 10:42:43   作者:码农研究僧  
这篇文章主要介绍了Sql Server查询卡顿的排查方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

前言

本篇为理论知识的分析以及对症下药,前阵子发生过Bug,后通过迁移服务器以及数据库最终才解决问题,但是细想当时可能是因为碎片或者缓存的概率比较高

1. 问题所示

针对的SQL为SQL Server,其他的数据库也同理

单查询此条数据库的时候应用层代码以及数据库都报大量的错误

select count(0) from [manong].[dbo].[yanjiuseng] where startTime > '2024-8-1 00:00:00' and endTime < '2024-8-1 23:59:59'

2. 原理分析

针对上述卡顿的情况,造成的原因有如下可能

2.1 缺乏索引

先查看此表有没有该索引字段:EXEC sp_helpindex '[manong].[dbo].[yanjiuseng]';

没有的话现加:(根据自身情况以及表格加入相应的索引字段)

CREATE INDEX IX_YanJiuSeng_StartTime_EndTime ON [manong].[dbo].[yanjiuseng](startTime, endTime);

2.2 表碎片

如果表碎片存在过多,可能会造成即使有查询也会很缓慢

DBCC ShowContig('[manong].[dbo].[yanjiuseng]')

类似如下信息,那么需要重建索引来减少碎片了

运行索引重建或重组操作来减少碎片:

-- 重建索引
ALTER INDEX ALL ON [manong].[dbo].[yanjiuseng] REBUILD;
-- 或者重组索引
ALTER INDEX ALL ON [manong].[dbo].[yanjiuseng] REORGANIZE;

2.3 查询计划缓存

通过计划缓存查询是否有使用不佳的查询计划

也可尝试清除缓存来重新查询:DBCC FREEPROCCACHE;

2.4 锁和阻塞

表可能被其他事务锁定,导致查询等待

查询是否有锁的情况

SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;

3. 总结

上述情况为一个排查的方向

对于细节方向的把握,比如字段的不匹配,长度的不满足都会有影响

SELECT COUNT(0) 
FROM [manong].[dbo].[yanjiuseng] 
WHERE startTime > '2024-07-22T00:00:00' AND endTime < '2024-07-22T23:59:59';

还有服务器的负载,检查是否服务器的性能有所干扰,定时任务或者其他资源都比较密集

还有一点如果数据量过大,需要对数据进行更好的清洗

根据执行计划执行语句的时候确保没有使用全表查询,深入分析查询的瓶颈

到此这篇关于Sql Server查询卡顿的排查方向的文章就介绍到这了,更多相关Sql Server查询卡顿内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server在T-SQL语句中使用变量

    SQL Server在T-SQL语句中使用变量

    这篇文章介绍了SQL Server在T-SQL语句中使用变量的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • SQL数据库连接超时时间已到的问题

    SQL数据库连接超时时间已到的问题

    这篇文章主要介绍了SQL数据库连接超时时间已到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 去掉前面的0的sql语句(前导零,零前缀)

    去掉前面的0的sql语句(前导零,零前缀)

    一个列的格式是单引号后面跟着4位的数字,比如’0003,’0120,’4333,我要转换成3,120,4333这样的格式,就是去掉单引号和前导的0,用以下语句就可以。
    2011-08-08
  • 透明数据加密(TDE)库的备份和还原

    透明数据加密(TDE)库的备份和还原

    对于包含敏感数据的库,要实现备份加密。即备份文件别人拿到也不能还原和查看其中的数据
    2012-07-07
  • 分组后分组合计以及总计SQL语句(稍微整理了一下)

    分组后分组合计以及总计SQL语句(稍微整理了一下)

    这篇文章主要介绍了分组后分组合计以及总计SQL语句,需要的朋友可以参考下
    2017-02-02
  • StarRocks(SR)的基本概念、架构及基本使用详解

    StarRocks(SR)的基本概念、架构及基本使用详解

    StarRocks是一款高性能、实时、MPP架构的现代化分布式SQL数据库,适用于OLAP场景,支持标准SQL,具备亚秒级查询响应能力,适用于实时报表、多维分析、用户画像等场景,本文介绍StarRocks(SR)的基本概念、架构及基本使用介绍,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Mybatis中处理特殊SQL处理逻辑解析

    Mybatis中处理特殊SQL处理逻辑解析

    这篇文章主要介绍了Mybatis中处理特殊SQL处理逻辑,在MyBatis中可能会有一些特殊的SQL需要去执行,一般就是模糊查询、批量删除、动态设置表名、添加功能获取自增的主键这几种,现在分别来进行说明,需要的朋友可以参考下
    2023-06-06
  • MS sqlserver 2008数据库转换成2000版本的方法

    MS sqlserver 2008数据库转换成2000版本的方法

    这篇文章主要为大家详细介绍了MS sqlserver 2008数据库转换成2000版本的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • SQL按指定字符分割字符串的方法

    SQL按指定字符分割字符串的方法

    在SQL中分割字符串通常需要使用特定的函数,因为SQL本身并不像编程语言那样直接支持字符串分割,不同的数据库系统有不同的函数来处理字符串分割,下面给大家介绍SQL按指定字符分割字符串的方法,感兴趣的朋友一起看看吧
    2025-03-03
  • SQL Server数据库连接查询和子查询实战案例

    SQL Server数据库连接查询和子查询实战案例

    子查询(嵌套查询)子查询也称嵌套查询,是指一个SELECT查询语句可以嵌入另一个SELECT查询语句之中,下面这篇文章主要给大家介绍了关于SQL Server数据库连接查询和子查询的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04

最新评论