我们做j2ee系统时往往会遇到要进行用户的登录验证等问题,同样也要涉及到用户登录次数和登录时间等信息的记录和统计的问题,往往我们的做法是在用户表中增加两个字段,一个是登录次数(login_count),另一个是最后登录时间(last_login_time),然后在用户每次登录的时候去update用户的这条记录,登录次数+1,登录时间改为当前的时间。
在用户两很小且用户对系统的性能要求不是很高的时候,那么我们采用这种方式的处理是没有错的,但是遇到高并发用户量情况的时候怎么办呢?我们曾做过一个小小的压力测试,使用一组帐号(10个)不停的对上面的设计进行压力测试,结果发现,系统在压到200的时候就崩溃了,服务器硬件什么的都是没有问题的:机器是hp-unix(惠普服务器中比较高端的机型了),两台oracle10 db,共享一个数据盘阵,两台weblogic 9 服务器,4个server节点。
问题就出在数据库,而且还不是数据库本身的问题,是我们拙劣的程序设计和程序,在多个客户端在同时操作一条数据的时候,oracle性能再强大也无济于事,出现了死锁。
死锁的条件
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源
诊断系统中的锁
为了找出系统中那些用户锁住资源以及那些用户在等待相应的资源,可使用以下语句(其中的/*+ NO_MERGE(..) */千万不可省略, 否则会很慢):
-- looklock.sql
-- use the NO_MERGE hints can speed up the query
select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Wait' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where a.username is not null
and a.lockwait = b.kaddr
and c.hash_value =a.sql_hash_value
union
select /*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ 'Lock' "Status", a.username, a.machine, a.sid, a.serial#, a.last_call_et "Seconds", b.id1, c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where b.id1 in
(select /*+ NO_MERGE(d) NO_MERGE(e) */ distinct e.id1
from v$session d, v$lock e
where d.lockwait = e.kaddr)
and a.username is not null
and a.sid = b.sid
and b.request=0
and c.hash_value =a.sql_hash_value;
附:解除锁
alter system kill session 'sid, serial#';
以上也是个人的经验之谈,可能有不妥之处,也请大家斧正,当然如果您有更佳的方案,也希望您不吝赐教。
分享到:
相关推荐
J2EE 架构设计
在本文中,我们将深入探讨基于Java的企业级应用架构设计,特别是SSH(Struts、Spring、Hibernate)框架的典型结构解析。SSH是Java EE领域中广泛使用的开源框架组合,用于构建高效、灵活和可扩展的Web应用程序。 ...
作为一位J2EE架构师,你需要深入理解以下几个关键知识点: 1. **J2EE组件模型**:J2EE的核心在于其组件模型,包括EJB(Enterprise JavaBeans)、Servlet和JSP(JavaServer Pages)。EJB负责业务逻辑,Servlet处理...
J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图J2EE架构流程图
J2EE架构师需要掌握如何配置应用服务器以优化资源利用,如何设计高并发的系统,以及如何应对系统故障和负载均衡。 总之,《J2EE架构师手册》涵盖了J2EE开发和架构的全方位知识,无论是初入J2EE领域的工程师还是经验...
基于J2EE架构的信息系统设计模式研究及应用
标题:J2ee架构分析设计 描述:针对J2EE框架分析,在这资料里做了详尽的说明 本文旨在深入探讨J2EE架构的核心概念、关键技术和应用模型,以帮助IT专业人士更好地理解J2EE框架如何支持现代企业级应用的开发。J2EE,...
### 基于J2EE架构的生产管理系统设计 #### J2EE框架及技术选型 J2EE(Java 2 Platform, Enterprise Edition)是一种广泛应用于企业级应用开发的平台,它提供了丰富的API和服务,使得开发者能够构建高性能、可扩展...
**J2EE架构与应用课程设计** 在信息技术领域,Java企业版(Java 2 Platform, Enterprise Edition,简称J2EE)是一种广泛使用的多层应用程序框架,专为开发和部署分布式Web应用程序而设计。J2EE提供了丰富的服务和...
作为J2EE架构师,你需要理解以下关键知识点: 1. **Servlet与JSP**:这是J2EE中的基础组件,用于处理HTTP请求和生成动态网页内容。Servlet是服务器端的Java应用程序接口,JSP则提供了一种更方便的方式来创建动态...
3. 微服务架构:随着技术的发展,J2EE架构师需要了解和掌握微服务架构,将其与传统J2EE结合,提升系统的灵活性和可扩展性。 4. 容器和框架:对Tomcat、Glassfish、JBoss等应用服务器的配置和管理有深入理解,同时...
J2EE架构设计是企业级Java应用程序开发的关键,它涉及多个层次和组件的协同工作,以构建高性能、可扩展和易于维护的系统。本讲座通过实例深入解析了Web项目的总体结构和多层架构的优点。 首先,J2EE架构设计的核心...
作为J2EE架构师,你需要深入理解这些技术,并能根据项目需求进行合理选择和设计,以构建高效、稳定、可扩展的企业级应用。 《J2EE架构师手册》这本书可能详细阐述了这些技术的原理、实践方法以及最佳实践,对于想要...
### 在基于J2EE架构的网站中集成HTTP代理的设计与实现 #### 摘要 本文探讨了在基于Java 2 Platform, Enterprise Edition (J2EE)架构的网站中集成HTTP代理服务的方法。相较于传统的HTTP代理服务,这种方法无需在...
**J2EE程序设计与软件架构设计** J2EE(Java 2 Platform, Enterprise Edition)是一种由Oracle公司主导的开放标准,主要用于构建企业级的分布式应用程序。它为开发者提供了多种服务,包括安全性、事务处理、数据库...
在本书中,你会了解到J2EE架构设计的基本原则,包括分层架构、模块化设计、服务化思想等。分层架构通常包括表现层、业务逻辑层和数据访问层,每一层都有其特定的职责,以实现松耦合和高内聚。模块化设计则允许代码按...
《J2EE架构师认证指南》是一本针对Java企业级应用开发高级技术的教程,旨在帮助读者掌握J2EE架构设计的核心理念与实践技巧。在深入理解J2EE架构的同时,该指南也会涵盖相关的工具使用,例如在描述中提到的源码分析和...
在J2EE开发过程中,RUP被广泛采用,因为它能有效地适应J2EE的多层架构需求。以下是基于RUP的J2EE开发的八个关键活动: 1. 需求分析:这是项目开始时的重要步骤,包括了解系统的功能需求(如业务概念、领域术语、...