`
itspace
  • 浏览: 960805 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

记一次Oracle会话共享模式故障处理过程

 
阅读更多
故障简述
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减少单个服务检查的处理时间
分享到:
评论

相关推荐

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    Oracle9i的init.ora参数中文说明

    并确保在同一事务处理种对相同数据的两次查询看到的是相同的值。 值范围: TRUE | FALSE 默认值: FALSE row_locking: 说明: 指定在表已更新或正在更新时是否获取行锁。如果设置为 ALWAYS, 只有在表被更新后才获取...

    Oracle Database 11g初学者指南--详细书签版

    在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席COLLABORATE、OraclecOpenWorld和区域性用户组会议.  Michael J.Corey是Ntirety...

    oracle 11g安装配置

    fs.aio-max-nr = 1048576 限制并发未完成的请求,应该设置避免I/O子系统故障 fs.file-max = 6815744 文件句柄设置代表linux系统中可以打开的文件的数量。 kernel.shmmni = 4096 共享内存的总页数 kernel.sem = 250 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    《Oracle Database 11g初学者指南》能使读者快捷地掌握Oracle Database 11g的基础知识。通过自我评估教程,介绍了核心数据库技术、管理员职责、高可用性以及大型数据库特性。《Oracle Database 11g初学者指南》带领...

    oracle10g课堂练习II(1)

    块损坏故障现象: ORA-01578 7-4 如何处理损坏 7-5 与损坏相关的功能 7-7 DBVERIFY 实用程序 7-8 解释 DBVERIFY 输出 7-9 ANALYZE 命令 7-11 实时验证块完整性: DB_BLOCK_CHECKING 7-12 实时验证块完整性: ...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    他创办了自己的咨询公司,作为一名独立的顾问,他围绕大量的Oracle技术设计并开发了软件和培训课程,内容涉及数据库、应用服务器和商业智能产品,拥有12年的IT从业经验。  Bob Bryla是Oracle 9i和10g的认证专家,他...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

    他创办了自己的咨询公司,作为一名独立的顾问,他围绕大量的Oracle技术设计并开发了软件和培训课程,内容涉及数据库、应用服务器和商业智能产品,拥有12年的IT从业经验。  Bob Bryla是Oracle 9i和10g的认证专家,他...

    citrix 中文管理操作手册

    共享会话和连接 108 限制应用程序实例 109 为已发布应用程序或桌面指定限制 110 记录连接拒绝事件 110 启用记录连接拒绝事件 111 使用终端服务配置控制连接 111 使用 TS 配置控制服务器上的连接 111 阻止用户在场...

    mysql数据库my.cnf配置文件

    适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。 myisam_sort_buffer_size = 1024M # MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX...

    网管教程 从入门到精通软件篇.txt

     bootcfg /rebuild 重复全部 Windows 安装过程并允许用户选择要添加的内容。  注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。  bootcfg /scan 扫描用于 Windows 安装的...

Global site tag (gtag.js) - Google Analytics