• 避免资源死锁:识别已打开的事务


    死锁往往由于以下原因引起:
    1、程序错误,比如一个事务需要操作两个表,由于程序错误在有时是先操作a表后操作b表,有时是先操作b表后操作a表,就有机会互相等待而造成死锁。
    2、事务太大,大事务操作的表多,操作步骤也多,死锁的机会也多。
    3、性能问题,有些语句性能太差,长时间的加锁容易与其他事务形成死锁。

    因为打开的事务可能会死锁资源,引发性能的问题,所以了解在一个专用数据库中哪些事务是打开的是很有帮助的。被死锁的资源可能堵塞其他数据库的用户。

    为了找出这些已打开的事务就要查询master数据库中的sysprocesses表。sysprocesses表有一个open_tran的列,它表示已有命令是否是一个打开的事务。如果值大于0表示它是一个已经打开的事务。sysprocesses表还有一个spid的列,表示正在访问SQL Server的系统进程的id。你可以使用spid列作为DBCC INPUTBUFFER()系统函数的参数。只有SQL Server的sysadmins帐号才可以执行这个函数。这个函数的输出首先是spid对应的255字符的命令。你可以由此确定哪个命令是影响数据库性能的罪魁祸首,然后根据spid发出一个KILL命令。

    解决死典型方法:(来自微软http://support.microsoft.com/kb/832524/zh-cn)

    添加和删除索引。
    添加索引提示。
    修改应用程序来访问资源类似模式中。
    从事务像触发器删除活动。 默认情况下, 触发器是事务。
    保持事务尽可能地短。

  • 相关阅读:
    Java List集合
    Java 集合删除重复元素、删除指定元素
    进程和线程
    Java 线程的同步与死锁
    Java 线程的常用操作方法
    Java 多线程实现
    统计分析
    递归方法(回文)
    素数的输出
    动手动脑二
  • 原文地址:https://www.cnblogs.com/choi/p/629218.html
Copyright © 2020-2023  润新知