我们做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#';
以上也是个人的经验之谈,可能有不妥之处,也请大家斧正,当然如果您有更佳的方案,也希望您不吝赐教。
分享到:
相关推荐
在运行此BBS系统时,需要注意的一点是,由于安全性和环境配置的原因,源码中的数据库连接参数(如用户名、密码和数据库名)可能需要根据实际环境进行调整。开发者需要找到相应的配置文件(如`config.properties`或`...
1.设计模式更抽象,J2EE 是具体的产品代码,我们可以接触到,而设计模式在对每个应用时才会产生具体代码。 2.设计模式是比 J2EE 等框架软件更小的体系结构,J2EE 中许多具体程序都是应用设计模式来完成的,当你深入...
- **J2EE应用框架**:在基于Java EE的应用开发中,可以使用构件图来描述各个模块之间的依赖关系;通过部署图来表示应用服务器、数据库等组件的部署情况;通过状态图来描述业务流程的状态转换。 - **Rose工具的使用**...
作者通过案例分析、系统设计等方法,对不同平台的技术实现细节进行了具体描述,并提出了在实际开发中应注意的技术要点和潜在问题,为技术开发者提供了切实可行的操作指南。 综上所述,方茜的论文《B2B电子商务系统...
### Java RMI 分布式编程心得详解 ...通过深入理解 RMI 的工作原理、架构设计以及实战经验,开发者可以更好地利用这项技术解决实际问题。希望本文能够为正在探索或已经涉足 Java RMI 领域的读者带来有用的启示。
### 乱码问题深度分析课题划分 ...综上所述,乱码问题的解决并非单一技术点的应对,而是需要从整体架构、开发流程、测试验证等多维度入手,构建一个健壮的字符编码管理体系,以保障系统的稳定性和用户的良好体验。