Sql Server查詢卡頓的排查方法
前言
本篇為理論知識的分析以及對癥下藥,前陣子發(fā)生過Bug,后通過遷移服務(wù)器以及數(shù)據(jù)庫最終才解決問題,但是細(xì)想當(dāng)時可能是因為碎片或者緩存的概率比較高
1. 問題所示
針對的SQL為SQL Server,其他的數(shù)據(jù)庫也同理
單查詢此條數(shù)據(jù)庫的時候應(yīng)用層代碼以及數(shù)據(jù)庫都報大量的錯誤
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]';
沒有的話現(xiàn)加:(根據(jù)自身情況以及表格加入相應(yīng)的索引字段)
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 鎖和阻塞
表可能被其他事務(wù)鎖定,導(dǎo)致查詢等待
查詢是否有鎖的情況
SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id <> 0;
3. 總結(jié)
上述情況為一個排查的方向
對于細(xì)節(jié)方向的把握,比如字段的不匹配,長度的不滿足都會有影響
SELECT COUNT(0) FROM [manong].[dbo].[yanjiuseng] WHERE startTime > '2024-07-22T00:00:00' AND endTime < '2024-07-22T23:59:59';
還有服務(wù)器的負(fù)載,檢查是否服務(wù)器的性能有所干擾,定時任務(wù)或者其他資源都比較密集
還有一點如果數(shù)據(jù)量過大,需要對數(shù)據(jù)進(jìn)行更好的清洗
根據(jù)執(zhí)行計劃執(zhí)行語句的時候確保沒有使用全表查詢,深入分析查詢的瓶頸
到此這篇關(guān)于Sql Server查詢卡頓的排查方向的文章就介紹到這了,更多相關(guān)Sql Server查詢卡頓內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Sql Server Management Studio連接Mysql的實現(xiàn)步驟
本文主要介紹了Sql Server Management Studio連接Mysql的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SQL Server 數(shù)據(jù)庫中游標(biāo)(Cursor)的使用方法與完整實例
SQLServer游標(biāo)用于逐行處理結(jié)果集,DECLARE聲明游標(biāo),OPEN打開,FETCH獲取數(shù)據(jù),CLOSE關(guān)閉,DEALLOCATE釋放資源,避免大數(shù)據(jù)集時性能影響,操作結(jié)束后關(guān)閉釋放資源,本文介紹SQL Server 數(shù)據(jù)庫中游標(biāo)(Cursor)的使用方法與實例,感興趣的朋友一起看看吧2025-02-02sql?server多行數(shù)據(jù)合并一行顯示簡單實現(xiàn)代碼
有時候我們需要將多行數(shù)據(jù)按照某一列進(jìn)行合并,以便更方便地進(jìn)行數(shù)據(jù)分析和處理,這篇文章主要給大家介紹了關(guān)于sql?server多行數(shù)據(jù)合并一行顯示簡單實現(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來使用事務(wù)。begin tran表示開始事務(wù), commit tran表示提交事務(wù),rollback tran表示回滾事物2011-12-12SQL Server中數(shù)學(xué)函數(shù)的用法
這篇文章介紹了SQL Server中數(shù)學(xué)函數(shù)的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05SQL Server高級內(nèi)容之case語法函數(shù)概述及使用
本文將詳細(xì)介紹下Case函數(shù)的用法感興趣的你可以參考下,或許對你有所幫助2013-03-03