zoukankan      html  css  js  c++  java
  • 避免资源死锁:识别已打开的事务

    死锁往往由于以下原因引起:
    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)

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

  • 相关阅读:
    Nginx 容器教程
    Docker 微服务教程(搭建真正的网站)
    Docker 微服务教程
    Docker 入门教程
    MacOS Docker 安装
    Mac下Homebrew的安装与使用
    ElasticSearch实战
    使用mac自带终端修改hosts
    菜鸡的Java笔记
    菜鸡的Java笔记 comparator 比较器
  • 原文地址:https://www.cnblogs.com/choi/p/629218.html
Copyright © 2011-2022 走看看