查看有哪些应用或主机访问SQL Server

 二维码 17
发表时间:2024-05-22 22:29



最近碰到一件奇怪的问题,做发布订阅老是出现 死锁,查了相关资料:


并发访问是死锁产生的主要原因之一,当多个进程同时访问数据库时,如果每个进程需要获取相同的资源并且顺序不一致,那么就有可能导致死锁的发生。


个人理解:当发布的数据库某个表与别的应用在同一时间写入、读取时,同一个表只能被一个地方使用,另一个需要排队等候


即经常出现的   线程ID xxx在XXX上重试查询之前,将等待x秒


重试查询.jpg


那根据优先级设置,发布订阅优先级75.00   排在后面,就需要一直排队重试,如果别的地方一直频繁读取这个表,那这条合并代理就会一直重试最后死锁


通过执行下面的脚本,可以查出来哪些地方在读取SQL server   及一些重要的信息,比如对端设备的IP地址、计算机名称通过SQL哪个账号登录的应用名称


SELECT

    c.session_id,

    c.client_net_address AS ClientIPAddress,

    s.host_name AS ClientHostName,

    s.login_name AS LoginName,

    s.program_name AS ApplicationName

FROM

    sys.dm_exec_connections AS c

INNER JOIN

    sys.dm_exec_sessions AS s

ON

    c.session_id = s.session_id;


如下图标红处