可以做女的游戏视频网站,浦城 建网站,北京网站建站系统平台,百度云网盘官网问题背景#xff1a; 一套Oracle11.2.0.4的RAC集群#xff0c;通过Dataguard switchover方式迁移到新机器之后#xff0c;运行第一天应用报障说应用性能慢#xff0c;需要进行性能问题排查 问题分析#xff1a; 首先#xff0c;登陆到服务器#xff0c;用TOP看一眼两个…问题背景 一套Oracle11.2.0.4的RAC集群通过Dataguard switchover方式迁移到新机器之后运行第一天应用报障说应用性能慢需要进行性能问题排查 问题分析 首先登陆到服务器用TOP看一眼两个节点数据库的服务器整体负载情况节点二的负载别节点一高但整体cpuio等待负载还是在正常的范围内查看数据库的等待事件也没有大量IO锁争用的等待事件初步判断数据库的整体负载正常可能是某些模块语句有问题再次跟应用确认应用是全部慢还是某个功能、语句慢得到应用回复说是部分涉及与其他系统交互的存储过程执行起来慢这与我们之前的初步判断基本一致那接下来我们的分析方向就锁定为这一类涉及与其他系统交互的存储过程 让应用提供了其中一个正在执行的存储过程XXX_APP_INTERFACE_PKG.GET_PRE_XXX_RESULTsql_id:6321wf6xz0at4,应用描述这个存储过程迁移之前的执行时间是在5分钟之内可以执行完现在的执行时间要超过10分钟以上最近一次30分钟还没执行完查看当前执行存储过程的会话等待事件为TCP Socket (KGAS)
注:KGAS是数据库服务层中处理TCP/IP套接字的组件KGAS接口不参与客户端/服务器通信而是当数据库服务上的会话使用PLSQL包如UTL_HTTPUTL_TCP进行TCP/IP调用时使用到在调用过程出现的等待为TCP Socket (KGAS) 用10046跟踪了该会话执行的sql情况并用tkprof格式化跟踪产生的trc文件
--跟踪会话
oradebug setmypid
oradebug unlimit 106903
oradebug event 10046 trace name context forever,level 12
oradebug tracefile_name
--关闭跟踪会话
oradebug event 10046 trace name context off
--格式化trc文件
tkprof trc文件 生成文件 从trc文件看执行的存储过程语句主要的等待为SQL*Net message from dblink等待从dblink的目标端返回数据没有发现涉及调用UTL_HTTPUTL_TCP的语句 先查看了调用的dblink语句语句只调用了dblink目标端的表没有与源端的表进行关联去掉dblink直接在目标端跑了一下发现语句的执行效率的确一般执行时间需要6-7秒主要消耗在于语句里面一张超过1G大小的表XXX_PARAM_LIST的全表扫描 查询语句结构不复杂where条件列组合的唯一值也较多过滤行不错可以直接通过创建一个组合索引快速优化这个语句创建索引优化了语句执行时间降为1秒以内 优化了高消耗的语句之后存储过程的执行速度还是没有任何改善还是要找到真正引发TCP Socket (KGAS)等待的代码直接去分析10046生成的trc文件之前是检查生成的tkprof文件格式完之后的文件可能会遗漏了一些存储过程执行的信息直接是trc里面搜等待事件TCP Socket (KGAS)的关键字发现了一些引发等待事件TCP Socket (KGAS)的输入值里面有个http开头的url地址 进一步查看了存储过程里面的代码发现里面调用了一个消息推送的存储过程该存储过程使用了UTL_HTTP包进行了外部url的请求 尝试使用curl工具从数据库的服务器去测试之前发现的url能否访问成功出现访问超时的报错Failed connect to xxxxx;connection timed out到这里终于抓到了问题的真凶存储过程里面通过UTL_HTTP包进行了外部url的消息推送而数据库服务器与请求的url存在网络通信不通问题导致存储过程一直出现TCP Socket (KGAS)的等待存储过程执行缓慢 进一步跟网络管理员确认迁移之后并没有完全开通新服务器到应用系统的网络策略而数据库迁移只是替换了scan ip主机的IP是发生了变化的所以数据库服务器跟一些外部的应用系统存在网络不通的问题最终导致数据库迁移到新环境之后那些存在系统交互的存储过程执行起来变慢 问题解决 网络重新开通了网络策略将新数据库服务器的主机IP加入到了旧的数据库组里面确保新数据库服务器与应用系统的网络相通存储过程的执行效率也恢复了正常平均执行时间从原来的2417秒降到了2.85秒