SQL Server超时诊断
admin
2023-06-04 22:01:12
0

连接超时


对于连接超时,首先可以查看Connectivity Ring Buffer中的LoginTimers类型错误来分析,如果想获得更详尽的信息,再通过抓包工具network monitor。


具体方法和语句可参考以下文章:

https://blogs.msdn.microsoft.com/apgcdsd/2011/11/20/ring-buffersql-server-2008/

http://ultrasql.blog.51cto.com/9591438/1583446


查询超时


对于查询超时,针对SQL Server 2012以下的版本,使用Profiler的TSQL_Duration模板的基础上,添加“Errors and Warnings”下的“Attention”,根据捕获到的Attention结合上下文去查找相应的语句;对于SQL Server 2012及以上版本,直接使用扩展事件监控sqlserver.attention事件,直接输出sql_text。

 

以下为XE脚本:

use tempdb   
go    
if exists (select * from sys.objects where name = 'sqlws_xev_attention')    
    drop view sqlws_xev_attention    
go    
create view sqlws_xev_attention as    
with xevents (event_data)    
as    
(    
    select event.query('.') as event_data from     
        ((select cast (xest.target_data as xml) as target_data    
                from sys.dm_xe_sessions as xes    
                inner join sys.dm_xe_session_targets as xest on (xes.address = xest.event_session_address)    
                where xes.name = 'sqlws_xevents_attention' and xest.target_name = 'ring_buffer') as td    
            cross apply target_data.nodes ('//event[@name="attention"]') as x (event))    
)    
select event_data.value ('(event/@name)[1]', 'varchar(max)') as event_name,    
    event_data.value ('(event/@timestamp)[1]', 'datetime') as event_timestamp,    
    event_data.value ('(event/data[@name="duration"]/value)[1]', 'bigint') as [duration],    
    event_data.value ('(event/data[@name="request_id"]/value)[1]', 'int') as [request_id],    
    event_data.value ('(event/action[@name="client_app_name"]/value)[1]', 'nvarchar(max)') as action_client_app_name,    
    event_data.value ('(event/action[@name="client_hostname"]/value)[1]', 'nvarchar(max)') as action_client_hostname,    
    event_data.value ('(event/action[@name="database_name"]/value)[1]', 'nvarchar(max)') as action_database_name,    
    event_data.value ('(event/action[@name="nt_username"]/value)[1]', 'nvarchar(max)') as action_nt_username,    
    event_data.value ('(event/action[@name="session_id"]/value)[1]', 'int') as action_session_id,    
    event_data.value ('(event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') as action_sql_text    
    from xevents    
go    
if exists (select * from sys.server_event_sessions where name = 'sqlws_xevents_attention')    
    drop event session sqlws_xevents_attention on server    
go    
create event session sqlws_xevents_attention on server    
    add event sqlserver.attention (action (sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.database_name, sqlserver.nt_username, sqlserver.session_id, sqlserver.sql_text) where duration > 5000 )    
    add target package0.ring_buffer     
    with (event_retention_mode = ALLOW_SINGLE_EVENT_LOSS, memory_partition_mode = NONE)    
go    
/*    
alter event session sqlws_xevents_attention on server state = start    
go    
--Execute your workload    
with xevents (event_name)    
as    
(    
    select event.value ('(@name)[1]', 'varchar(max)') as event_name    
        from ((select cast (xest.target_data as xml) as target_data    
                from sys.dm_xe_sessions as xes    
                inner join sys.dm_xe_session_targets as xest on (xes.address = xest.event_session_address)    
                where xes.name = 'sqlws_xevents_attention' and xest.target_name = 'ring_buffer') as td    
            cross apply target_data.nodes ('//event[@name="attention"]') as x (event))    
)    
select event_name, count(*) from xevents    
    group by event_name    
go    
select * from sqlws_xev_attention    
go    
alter event session sqlws_xevents_attention on server state = stop    
go    
*/


调优建议


对于连接耗时,当然务必要找到具体原因,是网络问题还是验证问题;对于查询超时,多为语句性能问题导致,如阻塞、未使用合理的索引、输出数据量太大等原因。对于临时解决问题,可以在连接配置里、或在程序里的语句级参数属性调大配置值。当然应及时找出问题的根源并解决。


相关内容

热门资讯

伊朗军队:已做好准备,坚决回击... 当地时间23日,伊朗军队发表声明,强调将随时准备对敌人的任何侵犯做出坚决且全方位的回击。(总台记者 ...
燃油车,真的没人买了? “如今加满一箱油,费用较年初高出近百元。”燃油车主张先生坦言,用车成本大幅上涨,让新能源车型的性价比...
出境打工月入3万?警惕境外高薪... 不要求学历和工作经验,到了国外就能找到工作,“月薪三万”“零门槛”“包吃住”,看到这样的广告,相信很...
格力空调外机嗡嗡响一下风机就不... 原因可能是制冷系统管路内发生制冷剂的缓慢渗漏,导致压缩机的工作效率骤减,内机末端装置风机盘管温度降低...
抽油烟机响了一下就不工作了 1、也许是因为插座的地方没有电了,或者油烟机的线路断掉了,出现了短路,所以油烟机不能正常的进行工作。...
冰箱搬运了一下就不制冷了 1、主要是因为搬运过程中电源线出现了拉扯导致电源线内部的线发生了断裂,所以再次使用的时候不再启动制冷...
冰箱调了温度之后就不启动了 原因可能是没有达到启动温度,可以尝试将档位调到最大看是否能正常启动;原因可能是外界气温较低时,室温与...
飞利浦电视开机闪一下就黑屏怎么... 1、检查插座的电压,确定是由于电源不稳定导致的,则需要在家里准备一个稳压器,保证供给电视的电压是稳定...
缅北“四大家族”多人被执行死刑... 2026年5月19日至22日,福建省泉州市中级人民法院一审公开开庭审理了被告人魏怀仁、廖景芳、康敏诈...
法国禁止以色列国家安全部长入境 新华社巴黎5月23日电 法国外交部长巴罗23日在社交媒体发文说,自即日起,以色列国家安全部长本-格维...