Sql Server查詢卡頓的排查方法
前言
本篇為理論知識(shí)的分析以及對(duì)癥下藥,前陣子發(fā)生過(guò)Bug,后通過(guò)遷移服務(wù)器以及數(shù)據(jù)庫(kù)最終才解決問(wèn)題,但是細(xì)想當(dāng)時(shí)可能是因?yàn)樗槠蛘呔彺娴母怕时容^高
1. 問(wèn)題所示
針對(duì)的SQL為SQL Server,其他的數(shù)據(jù)庫(kù)也同理
單查詢此條數(shù)據(jù)庫(kù)的時(shí)候應(yīng)用層代碼以及數(shù)據(jù)庫(kù)都報(bào)大量的錯(cuò)誤
select count(0) from [manong].[dbo].[yanjiuseng] where startTime > '2024-8-1 00:00:00' and endTime < '2024-8-1 23:59:59'
2. 原理分析
針對(duì)上述卡頓的情況,造成的原因有如下可能
2.1 缺乏索引
先查看此表有沒(méi)有該索引字段:EXEC sp_helpindex '[manong].[dbo].[yanjiuseng]';
沒(méi)有的話現(xiàn)加:(根據(jù)自身情況以及表格加入相應(yīng)的索引字段)
CREATE INDEX IX_YanJiuSeng_StartTime_EndTime ON [manong].[dbo].[yanjiuseng](startTime, endTime);
2.2 表碎片
如果表碎片存在過(guò)多,可能會(huì)造成即使有查詢也會(huì)很緩慢
DBCC ShowContig('[manong].[dbo].[yanjiuseng]')
類似如下信息,那么需要重建索引來(lái)減少碎片了
運(yùn)行索引重建或重組操作來(lái)減少碎片:
-- 重建索引 ALTER INDEX ALL ON [manong].[dbo].[yanjiuseng] REBUILD; -- 或者重組索引 ALTER INDEX ALL ON [manong].[dbo].[yanjiuseng] REORGANIZE;
2.3 查詢計(jì)劃緩存
通過(guò)計(jì)劃緩存查詢是否有使用不佳的查詢計(jì)劃
也可嘗試清除緩存來(lái)重新查詢:DBCC FREEPROCCACHE;
2.4 鎖和阻塞
表可能被其他事務(wù)鎖定,導(dǎo)致查詢等待
查詢是否有鎖的情況
SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;
3. 總結(jié)
上述情況為一個(gè)排查的方向
對(duì)于細(xì)節(jié)方向的把握,比如字段的不匹配,長(zhǎng)度的不滿足都會(huì)有影響
SELECT COUNT(0) FROM [manong].[dbo].[yanjiuseng] WHERE startTime > '2024-07-22T00:00:00' AND endTime < '2024-07-22T23:59:59';
還有服務(wù)器的負(fù)載,檢查是否服務(wù)器的性能有所干擾,定時(shí)任務(wù)或者其他資源都比較密集
還有一點(diǎn)如果數(shù)據(jù)量過(guò)大,需要對(duì)數(shù)據(jù)進(jìn)行更好的清洗
根據(jù)執(zhí)行計(jì)劃執(zhí)行語(yǔ)句的時(shí)候確保沒(méi)有使用全表查詢,深入分析查詢的瓶頸
到此這篇關(guān)于Sql Server查詢卡頓的排查方向的文章就介紹到這了,更多相關(guān)Sql Server查詢卡頓內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver數(shù)據(jù)庫(kù)如何修改實(shí)例名稱
這篇文章主要介紹了sqlserver修改實(shí)例名稱的實(shí)例代碼,代碼簡(jiǎn)單易懂,修改完重啟服務(wù)器就可以了,感興趣的朋友跟隨小編一起看看吧2024-06-06Sql Server Management Studio連接Mysql的實(shí)現(xiàn)步驟
本文主要介紹了Sql Server Management Studio連接Mysql的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SQL Server 數(shù)據(jù)庫(kù)中游標(biāo)(Cursor)的使用方法與完整實(shí)例
SQLServer游標(biāo)用于逐行處理結(jié)果集,DECLARE聲明游標(biāo),OPEN打開(kāi),FETCH獲取數(shù)據(jù),CLOSE關(guān)閉,DEALLOCATE釋放資源,避免大數(shù)據(jù)集時(shí)性能影響,操作結(jié)束后關(guān)閉釋放資源,本文介紹SQL Server 數(shù)據(jù)庫(kù)中游標(biāo)(Cursor)的使用方法與實(shí)例,感興趣的朋友一起看看吧2025-02-02sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)代碼
有時(shí)候我們需要將多行數(shù)據(jù)按照某一列進(jìn)行合并,以便更方便地進(jìn)行數(shù)據(jù)分析和處理,這篇文章主要給大家介紹了關(guān)于sql?server多行數(shù)據(jù)合并一行顯示簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2023-12-12SQLserver2014(ForAlwaysOn)安裝圖文教程
這篇文章主要介紹了SQLserver2014(ForAlwaysOn)安裝圖文教程的相關(guān)資料,需要的朋友可以參考下2016-04-04SQL事務(wù)用法begin tran,commit tran和rollback tran的用法
Sql Server 2005/2008中提供了begin tran,commit tran和rollback tran來(lái)使用事務(wù)。begin tran表示開(kāi)始事務(wù), commit tran表示提交事務(wù),rollback tran表示回滾事物2011-12-12SQL Server中數(shù)學(xué)函數(shù)的用法
這篇文章介紹了SQL Server中數(shù)學(xué)函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05SQL Server高級(jí)內(nèi)容之case語(yǔ)法函數(shù)概述及使用
本文將詳細(xì)介紹下Case函數(shù)的用法感興趣的你可以參考下,或許對(duì)你有所幫助2013-03-03