一种死锁定位的方法、死锁定位装置和数据系统的制作方法

文档序号:6466408阅读:132来源:国知局
专利名称:一种死锁定位的方法、死锁定位装置和数据系统的制作方法
技术领域
本发明涉及计算机技术领域,尤其是涉及一种死锁定位的方法、死锁定 位装置和数据系统。
背景技术
计算机各进程执行过程中,经常因争夺资源或者程序设计问题而造成一 种互相等待而无法继续执行的现象,称为死锁。在数据库也会经常发生死锁
现象。SQL (Structured Query Language,结构化查询语言)数据库对数据的 操作建立在一个或多个关系数据表上,通过对这些关系数据表的分类、合并、
连接或选取等运算来实现数据的管理;因此,SQL数据库经常发生死锁现象, 例如进程1锁住数据表A等待数据表B,而进程2锁住数据表B等待数据表 A;若无外力作用,涉及到的进程都将无法推进下去,此时系统则处于死锁 状态,而那些无法推进的进程称为死锁进程。
要解除死锁状态,就得确定死锁发生的位置。现有技术一般依赖于技术 人员对死锁信息和数据库提供的事务跟踪报告的观察分析,或者依赖于各数 据库厂家提供的死锁查找工具,人工分析大量的信息后,查找出造成死锁的 SQL语句,调用该SQL语句的应用程序代码,再确定死锁位置。查找出应 用程序代码的过程称为死锁定位。
在对现有技术的研究和实践过程中,本发明的发明人发现现有技术存在 以下问题
现有技术对数据库死锁定位的方案需要技术人员对整个数据库系统相当 熟悉,而且需要熟悉各数据库厂家提供的死锁查找相关工具,并且需要人工 分析大量的信息,另外对某些没有提供相关死锁查找工具的小型数据库无从 下手。综上,现有技术的死锁定位方法过分依赖于人工分析,处理信息量大, 效率低下。

发明内容
本发明实施例要解除的技术问题是提供一种死锁定位的方法、死锁定位 装置和数据系统,能够更简单实现死锁定位,并可以减少信息处理量,提高 效率。为解除上述技术问题,本发明所提供的实施例是通过以下技术方案实现

一种死锁定位的方法在数据库运行的进程发生死锁后,获取在死锁中 被牺牲的事务及与死锁的产生有关联的事务;将所述被牺牲的事务及与死锁 的产生有关联的事务所使用的数据表对应各自事务进行组合;提取相同的数 据表组合所对应的程序执行语句;根据提取的所述程序执行语句查看语句调 用栈,确定死锁的发生位置。
优选地,获取在死锁中被牺牲的事务及与死锁的产生有关联的事务具体 为根据Apusic应用服务器执行数据库事务跟踪的跟踪结果,获取在死锁中 被牺牲的事务及所述被牺牲事务的起止时间,并根据所述被牺牲的事务的起 止时间,获取所述起止时间内与死锁的产生有关联的事务。
优选地,根据Apusic应用服务器执行数据库事务跟踪的跟踪结果,获取 被牺牲的事务及所述被牺牲事务的起止时间具体为根据在Apusic应用服务 器上的数据库事务跟踪的跟踪结果中的死锁异常信息过滤出被牺牲的事务, 再根据所述被牺牲事务的跟踪日志和事务标识得到所述被牺牲事务的起止时 间。
优选地,将所述被牺牲的事务及与死锁的产生有关联的事务所使用的数 据表对应各自事务进行组合具体为在所述被牺牲的事务及与死锁的产生有 关联的事务里选取一个事务作为分析源,将所述分析源使用的数据表以程序 执行语句执行的时间先后顺序排列后进行组合,将所述分析源以外的其他每 一个事务使用的数据表以程序执行语句执行时间先后顺序的逆序排列后进行 组合。
源使用的数据表组合与分析源以外的其他每一个事务进行比较,得到相同组 合,提取相同组合所对应的程序执行语句。 优选地,进行组合为进行两两组合。
一种死锁定位装置,包括获取事务单元,用于在数据库运行的进程发 生死锁后,获取在死锁中被牺牲的事务及与死锁的产生有关联的事务;组合 单元,用于将获取事务单元获取的所述被牺牲的事务及与死锁的产生有关联的事务所使用的数据表对应各自事务进行组合;提取单元,用于提取相同的
数据表组合所对应的程序执行语句;定位单元,用于根据提取单元提取的所
述程序执行语句查看语句调用栈,确定死锁的发生位置。
优选地,组合单元包括获取时间单元,用于根据Apusic应用服务器执 行数据库事务跟踪的跟踪结果,获取在死锁中被牺牲的事务及所述被牺牲事
务的起止时间;获取事务单元,用于获取所述起止时间内与死锁的产生有关 联的事务;数据表组合单元,用于将所述被牺牲的事务及与死锁的产生有关 联的事务所使用的数据表对应各自事务进行组合。
优选地,数据表组合单元包括第一组合单元,用于在所述被牺牲的事 务及与死锁的产生有关联的事务里选取一个事务作为分析源,将所述分析源 使用的数据表以程序执行语句执行的时间先后顺序排列后进行组合;第二组 合单元,用于将所述分析源以外的其他每一个事务使用的数据表以程序执行 语句执行时间先后顺序的逆序排列后进行组合。
一种数据系统,包括Apusic应用服务器,用于执行数据库事务跟踪;死 锁定位装置,用于在所述数据库运行的进程发生死锁后,根据跟踪结果获取 在死锁中被牺牲的事务及与死锁的产生有关联的事务,并将所述被牺牲的事 务及与死锁的产生有关联的事务使用的数据表对应各自事务进行组合,根据 提取的相同的数据表组合对应的程序执行语句查看语句调用栈,确定死锁的 发生位置。
由上述技术方案可以看出,本发明实施例通过获取与死锁的产生有关联 的事务,将所述事务所使用的数据表对应各自事务进行组合,再根据提取的 相同的数据表组合对应的程序执行语句查看语句调用栈,确定死锁的发生位 置,使得定位死锁过程中需要人工分析的信息量大大减少,能够更简单实现 死锁定位,提高效率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图l是本发明实施例一的方法流程示意图; 图2是本发明实施例二的方法流程示意图; 图3是本发明实施例三的方法流程示意图; 图4是本发明实施例死锁定位装置的结构示意图; 图5是本发明实施例数据系统的结构示意图。
具体实施例方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行 清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而 不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作 出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例的实施环境为在Apusic应用服务器上新建数据库事务跟 踪,指定要跟踪的Apusic应用服务器上的数据源,数据源为数据库在Apusic 应用服务器上的一个代理以方便在死锁发生后,确定在死锁中被牺牲事务的 起止时间及事务标识ID等信息。根据这些信息可以确定与死锁的产生有关 联的事务,而后对与死锁的产生有关联的事务所使用的数据表的对应各个事 务的组合进行分析,提取相同的数据表组合所对应的程序执行语句后,查看 语句调用栈,则能确定死锁的发生位置。
因Apusic应用服务器屏蔽与不同数据库通信的差异化,为应用程序访问 数据库提供统一接口,则能支持通用数据库,所以本发明实施例能针对所有 类型数据库解决死锁定位问题。
实施例一、参见图l详细"i兑明,图1为本实施例一的方法流程示意图。
步骤101:数据库运行的进程发生死锁后,获取在死锁中被牺牲的事务 及与死锁的产生有关联的事务。
在所述数据库发生死锁后,有可能表现为访问失败、系统报警等,本发 明实施例确定在死锁中被牺牲的事务及与死锁的产生有关联的事务来排查死 锁源,显然,所述事务在使用Apusic应用服务器上的数据库资源时,能被 Apusic应用服务器上的数据库事务跟踪功能跟踪到。
与死锁的产生有关联的事务为在死锁中被牺牲的事务在执行过程中,同 步执行的其他事务,与死锁的产生密切相关。要获取与死锁的产生有关联的事务,需先根据Apusic应用服务器上的数据库事务跟踪的跟踪结果确定被牺 牲事务的起止时间,而后根据该起止时间确定哪些事务与被牺牲事务有关联。
该起止时间可以根据所述被牺牲事务的跟踪日志和事务ID属性得到。
步骤102:将在死锁中被牺牲的事务及与死锁的产生有关联的事务所使 用的数据表对应各自事务进行组合。
要将在死锁中被牺牲的事务及与死锁的产生有关联的事务所使用的数据 表对应各自事务进行组合,先在所述事务中选定一个事务作为分析源,将分 析源、与死锁的产生有关联的其他事务在程序执行过程中使用的数据表分别 对应各自事务进行组合。分析源可以是在死锁中被牺牲的事务。
步骤103:提取相同的数据表组合所对应的程序执行语句。
将分析源和与死锁的产生有关联的其他事务在执行过程中使用的数据表
的组合中的相同组合对应的程序执行语句提取出来,进一步确定资源争夺可
能与哪些程序执行语句的执行相关。
步骤104:根据所述提取的程序执行语句查看语句调用栈,确定死锁的
发生位置。
根据步骤103分析的结果,将死锁发生位置的范围缩小到不同事务所共 同使用的数据表,提取数据表对应的程序执行语句,并查看程序执行语句调 用栈,将死锁原因定位到具体的应用程序代码上。
定位之后可以予以调整该代码位置或撤销该代码的执行来解除死锁状

心0
本发明实施例根据提取的相同的数据表组合对应的程序执行语句查看语 句调用栈,使得定位死锁过程中需要人工分析的信息量大大减少,能够更简 单实现死锁定位,提高效率。
以下实施例二详细说明将引起与死锁的产生有关联的事务使用的数据表 对应各自事务进行组合的过程,程序执行语句以SQL语句为例。
实施例二、参见图2详细说明,图2为本实施例的流程示意图。
步骤201:数据库运行的程序发生死锁后,根据Apusic应用服务器执行 数据库事务跟踪的跟踪结果,获取在死锁中被牺牲的事务的起止时间。
在系统产生死锁现象后,如访问失败、系统报警等,本发明实施例定位装置根据数据库跟踪日志、事务ID属性等确定在死锁中被牺牲事务的起止
时间,该被牺牲事务在使用Apusic应用服务器上的数据源时,能被Apusic
应用服务器上数据库事务跟踪功能跟踪到起止时间。
步骤202:根据所述起止时间过滤出与死锁的产生有关联的事务。 一个事务的执行过程中,可能会与同一时间内并发执行的事务产生死锁,
获取到被牺牲事务的起止时间内并发执行的事务,有利于快速地查找到引起
死锁的SQLi吾句。
步骤203:在被牺牲事务及与死锁的产生有关联的事务中指定一个事务 作为分析源,提取分析源使用过的数据表的组合。
将提取到的分析源事务执行SQL语句的使用的所有数据表以SQL语句 执行的时间先后顺序排列,可以是两两组合,例如使用的数据表有A、 B、 C 三表,其两两组合的组合有A-B、 B-C、 A-C。
步骤204:提取所述被牺牲事务及与死锁的产生有关联的事务中的除分 析源以外的其他事务使用过的数据表的对应各自事务的组合。
将提取到的被牺牲事务及与死锁的产生有关联的事务中的除分析源以外 的其他事务执行SQL语句的使用的所有数据表以SQL语句执行的时间先后 顺序的逆序排列,对应各自事务的组合可以是两两组合,例如使用的数据表 B、 A、 C三表的逆序为C、 A、 B,其两两组合的组合有C-B、 C-A、 A-B。
步骤205:在分析源使用过的数据表的组合以及除分析源以外的其他事 务使用过的数据表组合里,提取相同的数据表组合对应的SQL语句。
当其他事务执行SQL语句的使用的数据表时间先后顺序与分析源事务 执行SQL语句使用的数据表先后顺序相反时,有可能造成资源争夺的沖突, 所以,其他事务执行SQL语句的使用的数据表先后顺序的逆序一般与分析源 事务使用的数据表先后顺序相同。
因此,在分析源事务执行SQL语句的所有数据表的组合和其他事务执行 SQL语句的所有数据表的组合里,将相同的数据表组合对应的SQL语句提 取出来,有利于快速确定死锁发生的位置。
例如分析源事务执行SQL语句的所有数据表的两两组合为A-B、 B-C、 A-C,其他事务执行SQL语句的所有数据表的两两组合为C-B、 C-A、 A-B,200810145707.6 其中A-B组合是相同的,则分析源事务与所述其他事务有可能在执行过程中 引起资源争夺而造成死锁,所以将该数据表组合提取出来。
步骤206:判断是否所有相关事务都已分析完毕,是则转入步骤207,否 则转入步骤203。
全面分析了所有与死锁的产生有关联的事务的情况后,转入步骤207; 否则转入步骤203。
步骤207:根据所述提取的数据表组合对应的SQL语句查看SQL语句调 用栈,确定死锁的发生位置。
SQL语句调用栈是代码执行的路径,比如在a函数内调用了 b函数,那 调用栈就是a》b,因此,从调用栈可以清楚看出哪些具体应用代码执行了所 述SQL"i吾句。
根据提取的相同的数据表组合,针对可能会引起死锁状态的数据表调用 情况,调出与该数据表组合对应的SQL执行语句,减少了人工分析的信息量; 再查看SQL语句调用栈,确定调用该SQL执行语句的具体应用程序代码,则 简单确定了死锁发生的位置,提高了死锁定位的效率。
定位之后可以予以调整该代码位置或撤销该代码的执行来解除死锁状态。
以下实施例三为实际应用环境中的 一个实例。
实施例三、参见图3,图3为本发明实施例的方法流程示意图。
步骤301:在Apusic应用服务器的数据源监控工具上新建跟踪。
Apusic服务器为应用程序访问数据库提供统一接口 ,能支持通用数据库。
步骤302:选中要跟踪的数据源,该数据源位于Apusic服务器上。
步骤303:在死锁发生后,查看跟踪结果。
跟踪结果显示的异常信息可找到哪些事务在死锁中被牺牲,即被终止执 行。例如从异常信息可直接找出事务ID为11的事务被终止执行。
步骤304:接收到死锁分析的指令,获取到被牺牲事务的事务ID。 当点击"死锁分析"按钮时,定位装置接收到开始死锁分析的指令;输 入被牺牲事务的事务ID,定位装置获取到被牺牲事务的事务ID。例如,从 跟踪结果中查找出被牺牲事务对应的事务ID为11,则点击"死锁分析"按4丑后输入11。
步骤305:显示与被牺牲事务产生沖突的事务。
定位装置在后台根据数据库跟踪日志、事务ID属性等确定被牺牲的事务 的起止时间,并根据所述起止时间过滤出与死锁发生相关联事务的事务ID。 例如,从分析结果中得到与被牺牲事务产生冲突事务的事务ID为16。
定位装置在后台提取事务ID为11的事务使用过的所有数据表的两两组 合,按以SQL语句执行的时间先后顺序排列;提取事务ID为16的事务使用 过的所有数据表的两两组合,以执行SQL语句的所有数据表以SQL语句执 行的时间先后顺序的逆序排列,提取相同的表组合对应的SQL语句,得到分 析结果。
例如,分析结果如下表所示:
SQL语句事务ID
UPDATE B SET name=,bb, WHERE id=' 1'11
UPDATE A SET name=,ba, WHERE id=, 1'11
UPDATE A SET name=,aa, WHERE id=, 1'16
UPDATE B SET name=W WHERE id=, 1'16
由上表得知,事务ID为11和16的事务可能因为在表A和表B的使用 上造成冲突而引起死锁。
步骤306:查看调用栈,确定死锁的发生位置。
查看步骤305分析结果列出的SQL语句对应的调用栈,可以定位到事务 ID为11和16的应用程序中的代码行,确定死锁发生的位置。比如根据调用 栈确定事务ID为11的事务在调用步骤305分析结果列出的SQL语句时具体 应 用 的 应 用 程 序 代 码 为 at com.apusic.test.statment.TestStatementBean.transB(TestStatementBean.Java:549) ,则确定了死锁发生的位置。
以上提供了 一种死锁定位的方法,本发明实施例还提供一种死锁定位装置。
一种死锁定位装置,参见图4,图4为本发明实施例数据库死锁定位装置 的结构示意图,包括获取事务单元401,用于在数据库运行的进程发生死锁后,获取被牺牲的
事务及与死锁的产生有关联的事务;
组合单元402,用于将获取事务单元401获取的所述被牺牲的事务及与死 锁的产生有关联的事务所使用的数据表对应各自事务进行组合;
提取单元403,用于提耳又相同的数据表组合所对应的程序执行语句;
定位单元404,用于根据提取单元403提取的所述程序执行语句查看程序 执行语句调用栈,确定死锁发生位置。
所述组合单元402包括子单元
获取时间单元4021,用于根据Apusic应用服务器执行数据库事务跟踪的 跟踪结果,获取被牺牲事务及所述被牺牲事务的起止时间;
获取事务单元4022,用于获取所述起止时间内与死锁的产生有关联的事
务;
数据表组合单元4023,用于将被牺牲的事务及与死锁的产生有关联的事 务所使用的数据表对应各自事务进行组合。 所述数据表组合单元4023包括子单元
第一组合单元4024,用于在所述与死锁的产生有关联的事务里选取一个 事务作为分析源,将所述分析源使用的数据表以程序执行语句执行的时间先 后顺序排列后进行组合
第二组合单元4025,用于将所述分析源以外的其他每一个事务使用的数
在所述数据库运行的进程发生死锁后,获取事务单元401获取被牺牲的 事务及与死锁的产生有关联的事务,组合单元402将获取事务单元获取的所 述被牺牲的事务及与死锁的产生有关联的事务所使用的数据表对应各自事务 进行组合,提取单元403提取出相同的数据表组合所对应的程序执行语句, 定位单元404根据提取单元403提取的所述程序执行语句查看程序执行语句 调用栈,确定死锁发生位置。
其中,组合单元402中的获取时间单元4021根据Apusic应用服务器执行 数据库事务跟踪的跟踪结果,获取被牺牲事务及所述被牺牲事务的起止时间, 获取事务单元4022获取所述起止时间内的与死锁的产生有关联的事务后,数据表组合单元4023将所述被牺牲的事务及与死锁的产生有关联的事务使用的
数据表对应各自事务进行组合。
进一步地,数据表组合单元4023中的第一组合单元4024在所述与死锁 的产生有关联的事务里选取一个事务作为分析源,将所述分析源使用的数据
4025则将所述分析源以外的其他每一个事务使用的数据表以程序执行语句执 行时间先后顺序的逆序排列后进行组合。
一种数据系统,参见图5,图5为本发明实施例数据系统的结构示意图, 系统包括
Apusic应用服务器501,用于执行数据库事务跟踪;
死锁定位装置502,用于在所述数据库运行的进程发生死锁后,根据跟踪 结果获取在死锁中被牺牲的事务及与死锁的产生有关联的事务,并将所述被 牺牲的事务及与死锁的产生有关联的事务使用的数据表对应各自事务进行组 合,根据提取的相同的数据表组合对应的程序执行语句查看语句调用栈,确 定死锁的发生位置。
所述死锁定位装置502可使用前述一种死锁定位装置的具体结构,不影 响本发明实施例的实现。
生有关联的事务使用的数据表对应各自事务进行组合,根据提取的相同的数 据表组合对应的程序执行语句查看语句调用栈,确定死锁的发生位置,使得 定位死锁需要人工分析的信息量大大减少,简单实现死锁定位,提高效率。
并且因Apusic应用服务器屏蔽与不同数据库通信的差异化,为应用程序 访问数据库提供统一接口,则能支持通用数据库,所以本发明实施例能针对 所有类型数据库解决死锁定位问题。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都 表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受 所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序 或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实 施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没 有详述的部分,可以参见其他实施例的相关描述。
本发明可以用于众多通用或专用的计算系统环境或配置中。例如个人
计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系
统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型
计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。此 外,本发明还可以在由计算机执行的计算机可执行指令的一般上下文中描述, 例如程序模块。 一般地,程序模块包括执行特定任务或实现特定抽象数据类 型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中 实践本发明,在这些分布式计算环境中,由通过通讯网络而被连接的远程处 理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备 在内的本地和远程计算机存储介质中。
以上对本发明实施例所提供的一种数据库死锁定位的方法、死锁定位装 置和数据系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实 施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其
核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体 实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解 为对本发明的限制。
权利要求
1、一种死锁定位的方法,其特征在于在数据库运行的进程发生死锁后,获取在死锁中被牺牲的事务及与死锁的产生有关联的事务;将所述被牺牲的事务及与死锁的产生有关联的事务所使用的数据表对应各自事务进行组合;提取相同的数据表组合所对应的程序执行语句;根据提取的所述程序执行语句查看语句调用栈,确定死锁的发生位置。
2、 根据权利要求1所述的数据库死锁定位的方法,其特征在于 所述获取在死锁中被牺牲的事务及与死锁的产生有关联的事务具体为 根据Apusic应用服务器执行数据库事务跟踪的跟踪结果,获取在死锁中被牺牲的事务及所述被牺牲事务的起止时间,并根据所述被牺牲的事务的起 止时间,获取所述起止时间内与死锁的产生有关联的事务。
3、 根据权利要求2所述的数据库死锁定位的方法,其特征在于 所述根据Apusic应用服务器执行数据库事务跟踪的跟踪结果,获取被牺牲的事务及所述被牺牲事务的起止时间具体为根据在Apusic应用服务器上的数据库事务跟踪的跟踪结果中的死锁异常 信息过滤出被牺牲的事务,再根据所述被牺牲事务的跟踪日志和事务标识得 到所述被牺牲事务的起止时间。
4、 根据权利要求1所述的数据库死锁定位的方法,其特征在于 所述将所述被牺牲的事务及与死锁的产生有关联的事务所使用的数据表对应各自事务进行组合具体为在所述被牺牲的事务及与死锁的产生有关联的事务里选取一个事务作为 分析源,将所述分析源使用的数据表以程序执行语句执行的时间先后顺序排 列后进行组合,将所述分析源以外的其他每一个事务使用的数据表以程序执
5、 根据权利要求4所述的数据库死锁定位的方法,其特征在于将分析源使用的数据表组合与分析源以外的其他每一个事务进行比较, 得到相同组合,提取相同组合所对应的程序执行语句。
6、 根据权利要求4或5所述的数据库死锁定位的方法,其特征在于所述进行组合为进行两两组合。
7、 一种死锁定位装置,其特征在于,包括获取事务单元,用于在数据库运行的进程发生死锁后,获取在死锁中被 牺牲的事务及与死锁的产生有关联的事务;组合单元,用于将获取事务单元获取的所述被牺牲的事务及与死锁的产 生有关联的事务所使用的数据表对应各自事务进行组合;提取单元,用于提取相同的数据表组合所对应的程序执行语句;定位单元,用于根据提取单元提取的所述程序执行语句查看语句调用栈, 确定死锁的发生位置。
8、 根据权利要求6所述的死锁定位装置,所述组合单元包括 获取时间单元,用于根据Apusic应用服务器执行数据库事务跟踪的跟踪结果,获取在死锁中被牺牲的事及所述被牺牲事务的起止时间;数据表组合单元,用于将所述被牺牲的事务及与死锁的产生有关联的事 务所使用的数据表对应各自事务进行组合。
9、 根据权利要求7所述的死锁定位装置,所述数据表组合单元包括 第一组合单元,用于在所述被牺牲的事务及与死锁的产生有关联的事务里选取一个事务作为分析源,将所述分析源使用的数据表以程序执行语句执 行的时间先后顺序排列后进行组合;第二组合单元,用于将所述分析源以外的其他每一个事务使用的数据表
10、 一种数据系统,其特征在于,包括 Apusic应用服务器,用于执行数据库事务跟踪;死锁定位装置,用于在所述数据库运行的进程发生死锁后,根据跟踪结 果获取在死锁中被牺牲的事务及与死锁的产生有关联的事务,并将所述被牺 牲的事务及与死锁的产生有关联的事务使用的数据表对应各自事务进行组 合,根据提取的相同的数据表组合对应的程序执行语句查看语句调用栈,确 定死锁的发生位置。
全文摘要
本发明实施例公开了一种死锁定位的方法、死锁定位装置和数据系统,所述方法为在数据库运行的进程发生死锁后,获取在死锁中被牺牲的事务及与死锁的产生有关联的事务;将所述事务所使用的数据表对应各自事务进行组合;提取相同的数据表组合所对应的程序执行语句;根据所述提取的程序执行语句查看语句调用栈,确定死锁的发生位置。本发明实施例提供的死锁定位的方法、定位装置和数据系统通过死锁发生后,将与死锁的产生有关联的事务使用的数据表进行组合,根据相同的数据表组合对应的程序执行语句查看程序执行语句调用栈,确定死锁的发生位置,使得定位死锁需要人工分析的信息量大大减少,简单实现死锁定位,提高了效率。
文档编号G06F9/46GK101425070SQ20081014570
公开日2009年5月6日 申请日期2008年8月11日 优先权日2008年8月11日
发明者成勇斌 申请人:深圳市金蝶中间件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1