最近公司数据库同步机制常发生阻塞,时不时的导致PCB工程系统卡死现象,只有找到阻塞源头并处理掉,才以消除阻塞,但数据库中查看会话阻塞是通过二维表方式展示的父子会话进程ID的,是很难清楚的展示各会话进程ID的关系图的。

举例:这好比公路上的汽车我们开车前行,遇到前方塞车了,前方的车阻塞你,但后方又继续来车,你也成为后方的车阻塞者。

如果能以思维导图的方式展示那不完美了,我们可以通过此图可很快的找找到阻焊塞的源头,只要把源头打通,道路才能保持畅通。

 一.阻塞查询相关SQL语句

查询当前数据库阻塞:

select * from sys.sysprocesses where blocked<>0
查询阻塞的会话在执行的SQL以及运行状态:
select * from sys.sysprocesses where spid=197

查询阻塞会话执行所有DB库

select * from sys.sysdatabases WHERE dbid = 7
通过sql_handle句柄来查询正在跑的SQL的SQL_TEXT文本内容,即SQL内容:
SELECT * FROM ::FN_GET_SQL(0x0300FF7F587A2F063508ED005E9B000001000000)

删除进程会话ID

 KILL 197
 二.阻塞进程思维导图----展示效果

通过如图展示,非常清楚的知道阻塞进程源头来自哪个进程号了【源头:会话进程ID  536导致整个数据库阻塞】

 三.HTML实现代码

HTML实现代码:(用百度他们家的echar套用数据即可实现)

 
 
 四.阻塞进程数据源
       通过此SQL取出2部份数据
     1.EChart nodes 节点数据
     2.EChart links 关连关系数据
--查询当前数据库阻塞进程插入临时表
select * INTO #sysprocesses FROM sys.sysprocesses where blocked<>0 --获取进程节点【数据给到EChart nodes】
--将数据按3个等级分类,按实例图展示效果
SELECT
' {category:'+ (CASE WHEN PerentCount = 0 THEN '' WHEN ChildCount > 0 THEN '' ELSE '' END) +', name: '''+ CAST(spid AS VARCHAR(1000))
+''', value : '+ (CASE WHEN PerentCount = 0 THEN '' WHEN ChildCount > 0 THEN '' ELSE '' END) + '},'
FROM
(
SELECT
(SELECT COUNT(1) FROM #sysprocesses WHERE blocked = t.spid) ChildCount
,(SELECT COUNT(1) FROM #sysprocesses WHERE spid = t.spid) PerentCount
,spid
FROM
(
SELECT spid spid
FROM #sysprocesses
UNION ALL
SELECT blocked spid
FROM #sysprocesses
) t
GROUP BY spid
) t --获取节点之前的关连关系【数据给到EChart links】
SELECT '{source : '''+ CAST(spid AS VARCHAR(1000)) +''', target : '''+ CAST(blocked AS VARCHAR(1000))+''', weight : 1},'
FROM #sysprocesses drop table #sysprocesses
 

PCB SQL SERVER 数据库阻塞进程关系以思维导图方式呈现的实现方法的更多相关文章

  1. Python的进程与线程--思维导图

    Python的进程与线程--思维导图

  2. SQL Server数据库阻塞,死锁查询

    sql 查询卡顿数据库 SELECT SPID=p.spid, DBName = convert(CHAR(20),d.name), ProgramName = program_name, Login ...

  3. 快速定位MS Sql Server 数据库死锁进程

    最近在做一个大型项目,由于数据设计采用离散型数据库设计,以方便需求变更及用户自定义流程要素,因为要素用户自定义,数据完整性靠代码约束变得不太现实,只能依靠表间关系来约束,结果因此导致数据的操作经常产生 ...

  4. MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加

    微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...

  5. 转载 50种方法优化SQL Server数据库查询

    原文地址 http://www.cnblogs.com/zhycyq/articles/2636748.html 50种方法优化SQL Server数据库查询 查询速度慢的原因很多,常见如下几种: 1 ...

  6. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  7. 5、SQL Server数据库、T-SQL

    SQL Server数据库基础 一.安装SQL Server数据库 setup.exe->安装->全新SQL Server独立安装或向现有安装添加功能->输入序列号->下一步- ...

  8. 你所不知道的SQL Server数据库启动过程(用户数据库加载过程的疑难杂症)

    前言 本篇主要是上一篇文章的补充篇,上一篇我们介绍了SQL Server服务启动过程所遇到的一些问题和解决方法,可点击查看,我们此篇主要介绍的是SQL Server启动过程中关于用户数据库加载的流程, ...

  9. SQL Server 数据库中关于死锁的分析

    SQL Server数据库发生死锁时不会像Oracle那样自动生成一个跟踪文件.有时可以在[管理]->[当前活动] 里看到阻塞信息(有时SQL Server企业管理器会因为锁太多而没有响应). ...

随机推荐

  1. 【Windows10 IoT开发系列】开发人员模式设置

    原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/ ...

  2. python中时间相关问题,仅作为笔记

    1.获取当前时间的两种方法: import datetime,timenow = time.strftime("%Y-%m-%d %H:%M:%S")print nownow = ...

  3. DateTimeToGreenUnix

    @暗夜魔尊 { Unix date conversion support with time-zone detect } function DateTimeToGreenUnix(const AVal ...

  4. MySql 小内存优化

    MySql5.6启动内存近500M,如在小型机内存敏感的环境可能较大,下边配置会减少较多内存,至150M以下. performance_schema = OFF innodb_buffer_pool_ ...

  5. 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)

    当今世界上绝大多数游戏都是C++写的,为什么要说不呢? 要做什么?写游戏. 写游戏首先要考虑些什么?做什么样的游戏,图形.音效.游戏逻辑如何实现. 用C++要先考虑什么?定义跨平台数据类型抽象,实现常 ...

  6. qtextedit中的光标问题(通过调用repaint去掉Focus的阴影)

    [问题]两个textedit,取名为view0,view1.实现view0输入固定的字符个数后,用setFocus切换聚焦到view1,但是切换完了之后view0还会保留光标残影,出现两个文本框中都有 ...

  7. BFS提高效率的一点建议

    BFS有两种常见的形式: 形式1: 把初始点加入队列; while (队列非空) { 取出队头; 操作取出的点; 寻找周围符合条件的点加入队列; } 形式2: 操作初始点 把初始点加入队列; whil ...

  8. python 方法无法在线程中使用(附python获取网络流量)

    在python中,定义一个方法,直接调用可以,但是创建一个线程来调用就可能导致失败.这种现象多出现在使用com对象进行系统操作时,而且是以线程的形式调用. 异常提示如下:syntax error.WM ...

  9. 深度强化学习day01初探强化学习

    深度强化学习 基本概念 强化学习 强化学习(Reinforcement Learning)是机器学习的一个重要的分支,主要用来解决连续决策的问题.强化学习可以在复杂的.不确定的环境中学习如何实现我们设 ...

  10. rm、shutdown、磁盘挂载、vi使用方法

    1. 系统管理文件 1.1 rm 文件与目录有关命令 删除命令 (慎用)    --- 数据是否备份了 rm === remove rm /oldboy/oldboy.txt  --- 删除文件 rm ...