故障简述
XXX第八人民医院HIS数据库7月13日11点左右从原先老服务器切换至新服务器,切换完成之后,数据库版本主机操作系统版本都保持不变。运行20天左右,从8月4日开始,前台操作人员反应业务程序响应出现延迟,此后延迟逐渐增大。8月5日科技工程师远程经过仔细诊断后发现存在大量磁盘读,采取增大SGA数据库内存的方式来减少磁盘读。但调整之后即第二天8月6日上午应用几乎瘫痪无法操作,后台数据库却很空闲。重启数据库业务程序卡顿消失,但过了十几二十分钟之后现象又产生,排除了网络和业务程序自身的故障后,考虑到事故的紧急性采取重启数据库临时解决问题。8月6日下午工程师到达现场仔细排查之后确认是由于连接方式所导致的故障,调整部分参数之后恢复正常,增大SGA后业务程序响应速度明显加快,部分报表查询甚至提升了十几倍。
相关知识点
前端应用连接数据库的方式分为两种:独占模式和共享模式。
独占模式又称专有模式,一个客户端连接对应一个服务器进程,一对一的处理方式。而共享模式则是多个客户端进程对应一个服务器进程,服务器端存在一个进程调度器来管理。
下面具体对共享模式的工作原理做简要分析:
共享模式主要分为6个步骤(如图1-1):
1.用户发起连接请求
2.监听监测到请求返回调度进程地址,此时用户进程与空闲调度进程直接连接
3.用户发起操作请求(如dml),调度进程负责把请求放入请求队列中
4.空闲的共享服务进程从请求队列中接过请求,后台处理
5.共享服务进程处理完请求,把结果放入相应队列中
6.对应的调度进程从相应队列中把结果返回给前端用户
图:1-1
问题详细诊断分析过程
本次故障中有两个现象很奇怪:
第一 在后台服务器和数据库很空闲的情况下,前台业务系统却很卡甚至瘫痪
第二 每次重启数据库的十几分钟之内是很正常的,但那之后又很卡
从中我们可以判断,在业务程序正常连接的情况下,问题可能出现在业务程序发出的请求没有及时被后台服务进程处理,而XXX第八人民医院前端业务程序正是采取了共享的连接模式(多个客户端进程对应一个服务器进程)。进一步查看his数据库共享模式下相关参数配置:
his数据库配置了初始化5个共享服务进程(最大15个)和15个调度进程,由于数据库已重启具体进程的繁忙程度已经无法确认,我们只能通过dBA_HIST_RESOURCE_LIMIT来查询相关线索。
以上的查询结果我们可以看出max_shared_servers已经达到阈值
从以上的查询结果和awr报告中我们可以大致确定是由于共享服务进程无法及时处理请求队列中的用户请求。这也很好解释了每当数据库重启后,少量请求的情况下共享服务进程还是比较及时的处理用户的请求,随着请求数的最多和大事务的处理(比如报表),导致共享服务进程达到阈值,无法及时响应,最终导致前台业务卡死。
故障处理:
方法一
调整max_shared_servers 和shared_servers 的值,增加共享服务器的数量
方法二
客户端连接方式改为独占模式
解决办法:
由于C/S架构调整客户端连接方式工作量巨大,所以采取调大max_shared_servers 和shared_servers的值,分别从原来的15和5增大到64和25。
1. 后续观察:
经过8月7日上午高峰期的观察,前端业务程序的响应速度都在正常范围内,部分报表的响应速度甚至提升了10几倍,后续数据库高峰期部分指标如下:
以从高峰期的返回结果来看,服务进程比较空闲的,一直处于空闲等待请求的状态,进程数也一直维持在初始化25,没有上升的趋势。
故障总结
从本次故障分析来看,随着业务量的增大及高峰期报表的执行,默认共享模式下的服务进程数量无法满足当前的需求,共享模式主要针对高并发小事务的OLTP系统而言,在如今内存充足的情况下推荐采用独占模式的连接方式。主要建议如下:
1.报表客户端连接方式改为独占模式
2.调大共享模式服务进程数量
3.优化部分SQL减少单个服务检查的处理时间
分享到:
相关推荐
"Oracle-自动备份及拷贝到FTP或者共享"是一个关键的操作流程,它确保了数据的安全性和可恢复性。以下将详细讲解这一过程涉及的知识点。 首先,Oracle数据库的自动备份是一个预防性的策略,用于防止数据丢失或系统...
2. **锁定模式不一致**:例如,一个事务使用共享锁(S Lock),而另一个事务尝试获取排他锁(X Lock)在同一资源上,可能导致死锁。 3. **锁定顺序不一致**:如果两个事务以不同的顺序锁定相同的资源,也可能引发...
在专用服务器模式下,每个用户进程都有自己的服务器进程,而在共享服务器模式下,多个用户共享一组服务器进程。无论是哪种连接方式,Oracle都保证了事务处理的ACID属性,为用户提供了一个可靠和一致的数据库操作环境...
在使用共享服务器模式(MTS)时,一部分PGA(即UGA)会被放入大型池(Large Pool)中。 ##### 2.2 内存参数的差异性 冯春培指出,在查询`v$parameter`、`v$sgastat`、`v$sga`等视图时,会发现它们之间存在差异。这些...
本文将以Oracle数据库为例,通过对其架构分析和故障机理的深入研究,总结出数据库故障原因分类体系,并提出实用的性能监控、故障处理和运维操作方法,旨在为信息系统运维人员提供数据库运维工作的系统方法论和参考...
- 在共享服务器模式下,多个会话共享一个服务器进程池,通过调度程序完成任务调度。 2. **Background Process** - **PMON (Process Monitor)**:监控进程,当检测到异常时,它会进行恢复或撤销工作,并释放资源。 ...
Oracle数据库是一种广泛使用的大型关系型数据库管理系统,其运行原理涉及多个层面,包括会话的建立、事务的执行、数据缓存、重做日志和还原机制等。理解这些原理对于Oracle数据库的运维至关重要。 首先,当一个应用...
专用服务器模式为每个连接的用户进程启动一个单独的服务进程,而共享服务器模式下,监听器会分配一个负载较轻的调度进程来处理用户请求,以提高资源利用率。 后台进程在Oracle数据库中起着至关重要的作用,如数据库...
4. **连接(Session)**:Oracle支持多个用户同时连接,每个用户连接称为一个会话(session),可以执行查询、更新等多种数据库操作。 5. **事务(Transaction)**:事务是一组数据库操作的集合,例如INSERT、...
为了实现高性能和处理海量数据的目的,对外部过程进行了扩展,但直接在外部共享库中进行数据缓存是不可行的,因为外部例程被加载和卸载,且在会话中间有可能重新加载。 具体地,外部过程的调用流程是这样的:一个PL...
我们可以看到Oracle 11g在逻辑存储、物理存储、内存管理、进程管理、并行处理、分区技术、安全性和高可用性等方面的深度设计和创新,这使得Oracle 11g成为了业界领先的数据库管理系统之一。对于IT专业人员来说,深入...
- **Instance Failure**: 当一个实例故障时,其上的会话和事务会自动转移到其他实例,保证服务不间断。 - **Locking and Concurrency**: GCS和GES确保多实例下的并发控制,避免数据冲突。 - **Parallel Execution**:...
- **Oracle Restart**:一个自动化工具,用于简化数据库和相关组件的启动、关闭以及故障恢复过程。 #### 三、实现可恢复性 - **备份和恢复功能**:Oracle 11g 提供了强大的备份和恢复机制,包括在线备份、归档模式...
Oracle提供了一系列工具,如AWR(自动工作负载仓库)、ASH(活动会话历史)和GCS(全局缓存服务)报告,帮助DBA进行故障诊断。 此外,Oracle的高级特性,如ASM(自动存储管理)、RAC(实时应用集群)和GoldenGate,...
另一部分重要的内存区域是Program Global Area (PGA),它是非共享的,每个用户进程都有自己的PGA,用于存储私有数据,如会话信息、排序区等。 后台进程是Oracle实例的另一关键组件,它们负责数据库的后台操作,如...
此外,Oracle服务器还会创建一组后台进程,用于处理实例运行过程中涉及的大量后台任务,例如数据读写、故障恢复等。 ##### 3.4 Oracle实例管理 Oracle数据库服务器由Oracle数据库和Oracle实例组成。Oracle实例包括...
毕业设计或源码项目中,可能会涉及到使用Oracle数据库存储和处理数据,例如,设计数据库架构、编写存储过程或触发器,以及构建高效的查询语句。 总的来说,Oracle数据库体系结构是复杂而精细的,理解和掌握其核心...