当前位置: 代码网 > it编程>数据库>MsSqlserver > Sql Server查询卡顿的排查方法

Sql Server查询卡顿的排查方法

2024年07月31日 MsSqlserver 我要评论
前言本篇为理论知识的分析以及对症下药,前阵子发生过bug,后通过迁移服务器以及数据库最终才解决问题,但是细想当时可能是因为碎片或者缓存的概率比较高1. 问题所示针对的sql为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查询卡顿内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com