问题描述:
页面报错显示如下:
com.microsoft.sqlserver.jdbc.SQLServerException: 使用 DBComms.receive 方法期间发生异常。操作:socket closed。上下文:(377250) [Thread[http-80-Processor144,5,main], IO:65c79, Dbc:null]。PktNum:0。TotalReceived:0。PktSize:4,096。
java.lang.NullPointerException
select语句有返回结果,update insert 和 delete 语句全是以上的错误提示。
经过从网上的调查以及同学之间的分析,另外还请教了一位公司的技术指导,得出结论是数据库死锁的问题。
另外还有提示:
http://peter-kong.iteye.com/blog/44328中对这个问题是这样描述的:程序中的代码是非线程安全的, JDBC对象是不能被多个线程共用的. 产生这个异常的原因可能是一个线程中Connection正在关闭或Statement正在被重新执行的时候另一个线程正在使用.
也就是说两个访问数据库的线程形成了死锁,造成所有数据库更新的语句全都无法运行。导致的直接结果就是,客户能够登录系统,客户在系统中能够进行所有的查看操作,给客户造成了错觉,认为系统正常。结果是客户所有做过的修改和保存操作都没有效果。需要一提的是,为了从客户体验的角度出发,很多系统中的错误提示都在系统后台提出了,前台都没有告诉过客户现在系统运行不正常。
解决办法:
经过对数据库死锁资料的研究,我认为减少数据库死锁的发生概率没有特别直接的方法,只能是在项目测试阶段加强系统的负载测试,尽可能的将系统中所有数据库的操作放在事务去处理。(本系统中对数据库的操作五花八门,在连接池的基础上有批处理,有直连直接运行,还有存储过程,没有对此作出规范)
经过对数据库服务器的重启之后,以上的报错没有了,但是我们对于系统没有作出任何的改动,只能是静静等待下一次错误的发生了......
(如果各位大牛遇见了以上的问题,并且有比较好的解决办法,拜托拜托给我一点儿提示啦,先谢过了)
后续(2009年7月15日16:40:09):
问题昨天晚上又出现了,重启了远端服务器的tomcat暂时解决了这一问题,但是,昨晚一直没有在自己的电脑上模拟出该问题。
经过今天一天的处理,终于模拟出了这个错误,具体模拟步骤如下(以供参考):
将数据库操作范围最大的一个类中的方法,0.1秒的频率运行1000遍(多台机器同时访问),最终爆出了文章开头列出的错误。
目前解决方法,将该类的所有数据库语句尽可能的精简,然后放在事务中运行。这样就算再出现死锁,事务也会回滚,并且能够自动牺牲某个进程来延续服务器的正常运行。精简SQL语句之前,将原来复杂的SQL语句放在事务中运行也会出现死锁,但是都能够自动处理掉,不会像原来一样影响到服务器的正常运行(具体症状见文章开头)。
分享到:
相关推荐
数据库死锁监控,自动刷新,右键杀死进程,查看存储历史执行时间等信息。
数据库死锁分析是数据库设计、开发和运行维护中非常重要的一个问题,需要严格遵守《数据库设计规范》,使用行锁和控制事务的执行时间,避免死锁的产生,并定期检查数据库日志,自动解开死锁,避免死锁对数据库的影响...
Oracle数据库死锁问题研究.pdf
数据库实战-收集一些常见的 MySQL 死锁案例.zip 数据库实战-收集一些常见的 MySQL 死锁案例.zip 在工作过程中偶尔会遇到死锁问题,虽然这种问题遇到的概率不大,但每次遇到的时候要想彻底弄懂其原理并找到解决方案...
在SQL数据库管理中,死锁和阻塞是常见的问题,特别是在多用户环境下,它们可能导致系统性能下降甚至数据丢失。理解并有效地处理这些问题至关重要。本文将深入探讨“sql数据库死锁查询工具”及其在解决数据库死锁和...
SQL Server数据库封锁与死锁是数据库管理系统中重要的并发控制机制,用于保证数据的一致性和完整性。封锁是防止多个并发事务对同一数据进行不协调访问的一种手段,而死锁则是多个事务相互等待对方释放资源而形成的一...
本文将深入探讨DB2数据库中的死锁现象、死锁检测以及如何解除死锁。 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们都将无法继续执行。在DB2中,当多个事务互相等待...
SQLServer死锁查找.wpsSQLServer死锁查找.wpsSQLServer死锁查找.wps
数据库死锁是多用户共享资源环境下常见的问题,尤其在事务处理密集的应用场景中更为突出。死锁发生时,两个或更多的事务互相等待对方释放资源,从而导致所有事务都无法继续执行,形成僵局。针对这一问题,数据库管理...
在数据库管理中,死锁是一个常见的问题,尤其是在高并发的环境中。死锁指的是两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们将无法继续执行。本篇文章将详细讲解如何查看和...
SQLServer数据库死锁介绍,以及使用独立的事务模拟死锁的产生。
3. **死锁检测与解决**:数据库管理系统(DBMS)如SQL Server会定期检查是否存在死锁,并尝试通过回滚其中一个事务(称为死锁受害者)来解除死锁。在EF中,开发者可以设置事务超时,当超过这个时间限制还未完成时,...
一个经典的获取SQLSERVEr数据库死锁及引起锁定的进程的存储过程。执行时,必须具有数据库超级管理员权限。
7.Socket通信 8.GC垃圾回收 9.泛型 10.反射 11.死锁 12.内存泄漏 13.数据结构 二、设计方面: 1.面向对象基础 2.设计模式 3.EF 4.MVC 5.MVVM 6.IOC 三、架构框架: 1.框架 2.分布式 3.微服务 四、数据库: 1.SQL...
### ORACLE数据库死锁查杀方法详解 #### 一、引言 在Oracle数据库系统中,当两个或多个事务在等待对方释放资源时,就会出现死锁现象。死锁不仅会降低系统的整体性能,还可能导致某些重要事务长时间无法完成,严重...
SQL Server死锁总结.pdf
在SQL Server数据库管理系统中,死锁是一个常见的问题,它发生在两个或多个事务之间,每个事务都在等待对方释放资源,导致所有事务都无法继续执行。本文将深入探讨SQL Server死锁的概念、原因、诊断方法以及解决策略...
分布式课堂上分享讲的ppt,简要介绍了死锁检测的基本概念,以及分布式数据库几种常见的死锁检测算法。
数据库死锁,导致其他更新操作无法进行 此时需要查询出该死锁的进程,将其杀死
数据库是存储和管理数据的重要工具,它在信息系统中扮演着核心角色。本次考核重点在于对数据库的基本概念、设计原理、操作技巧以及优化策略的理解和应用。"数据库考核 1.0.zip" 包含了一个名为 "数据库考核 1.0.sql...