Oracle-数据库迁移之后性能变慢问题分析

问题背景:

        ​一套Oracle11.2.0.4的RAC集群,通过Dataguard switchover方式迁移到新机器之后,运行第一天应用报障说应用性能慢,需要进行性能问题排查

 

问题分析:

        首先,登陆到服务器,用TOP看一眼两个节点数据库的服务器整体负载情况,节点二的负载别节点一高,但整体cpu,io等待负载还是在正常的范围内,查看数据库的等待事件,也没有大量IO,锁争用的等待事件,初步判断数据库的整体负载正常,可能是某些模块语句有问题,再次跟应用确认应用是全部慢,还是某个功能、语句慢,得到应用回复说是部分涉及与其他系统交互的存储过程执行起来慢,这与我们之前的初步判断基本一致,那接下来我们的分析方向就锁定为这一类涉及与其他系统交互的存储过程

 

356a712619e99c6ded05007a13edcd1d.png

 

b1ac3ae620d1891f0cd941a3d9dd3735.png

        让应用提供了其中一个正在执行的存储过程XXX_APP_INTERFACE_PKG.GET_PRE_XXX_RESULT,sql_id:6321wf6xz0at4,应用描述这个存储过程迁移之前的执行时间是在5分钟之内可以执行完,现在的执行时间要超过10分钟以上,最近一次30分钟还没执行完,查看当前执行存储过程的会话,等待事件为TCP Socket (KGAS)

注:KGAS是数据库服务层中处理TCP/IP套接字的组件,KGAS接口不参与客户端/服务器通信,而是当数据库服务上的会话使用PLSQL包如UTL_HTTP,UTL_TCP进行TCP/IP调用时使用到,在调用过程出现的等待为TCP Socket (KGAS)

c4cdec46adc5858a0191c1d4fe8964ad.png

        用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_HTTP,UTL_TCP的语句

 

63fd32fe3416b908cdcbc20b5077feb2.png

        先查看了调用的dblink语句,语句只调用了dblink目标端的表,没有与源端的表进行关联,去掉dblink直接在目标端跑了一下,发现语句的执行效率的确一般,执行时间需要6-7秒,主要消耗在于语句里面一张超过1G大小的表XXX_PARAM_LIST的全表扫描

 

cac6b7f164380f090d969a34222e48a9.png

fc9a2dfc0dbdfd9582cea0ae5263526f.png

        查询语句结构不复杂,where条件列组合的唯一值也较多过滤行不错,可以直接通过创建一个组合索引快速优化这个语句,创建索引优化了语句,执行时间降为1秒以内

9062d8373b9f094b3f8337e3cb832717.png

        优化了高消耗的语句之后,存储过程的执行速度还是没有任何改善,还是要找到真正引发TCP Socket (KGAS)等待的代码,直接去分析10046生成的trc文件,之前是检查生成的tkprof文件,格式完之后的文件可能会遗漏了一些存储过程执行的信息,直接是trc里面搜等待事件TCP Socket (KGAS)的关键字,发现了一些引发等待事件TCP Socket (KGAS)的输入值,里面有个http开头的url地址

 

a10b34112e470178ae12597996674183.png

        进一步查看了存储过程里面的代码,发现里面调用了一个消息推送的存储过程,该存储过程使用了UTL_HTTP包进行了外部url的请求

 

649f870137c52a1d61db01e886a8dced.png

a9969385b35c4f84986f108d556e3ea8.png

        尝试使用curl工具从数据库的服务器去测试之前发现的url能否访问成功,出现访问超时的报错Failed connect to  xxxxx;connection timed out,到这里终于抓到了问题的真凶,存储过程里面通过UTL_HTTP包进行了外部url的消息推送,而数据库服务器与请求的url存在网络通信不通问题,导致存储过程一直出现TCP Socket (KGAS)的等待,存储过程执行缓慢

 

9a6e184d2bc9e933d0e8a65e4bbd887e.png

        进一步跟网络管理员确认,迁移之后并没有完全开通新服务器到应用系统的网络策略,而数据库迁移只是替换了scan ip,主机的IP是发生了变化的,所以数据库服务器跟一些外部的应用系统存在网络不通的问题,最终导致数据库迁移到新环境之后,那些存在系统交互的存储过程执行起来变慢

 

问题解决:

        网络重新开通了网络策略,将新数据库服务器的主机IP加入到了旧的数据库组里面,确保新数据库服务器与应用系统的网络相通,存储过程的执行效率也恢复了正常,平均执行时间从原来的2417秒降到了2.85秒

acffaeb45df01d694370b4c37dc9892e.png

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虾皮马来站点选品:在虾皮(Shopee)5个热门品类和市场特点

在虾皮(Shopee)马来西亚站点选择商品时,卖家应该考虑一些热门品类和市场特点,以确保他们的产品能够满足当地消费者的需求并取得良好的销售业绩。以下是在虾皮(Shopee)马来西亚站点销售商品时需要考虑的五个…

高德地图信息窗体设置

1. 添加默认信息窗体 //构建信息窗体中显示的内容var info [];info.push(<div style"height: 36px; line-height: 45px; padding: 0px 20px; white-space:nowrap;">位置&#xff1a;北京</div>);info.push(<div style"height: 36px; line-heig…

裂变新模式:分销市场的翘楚

在当今的商业世界&#xff0c;推荐机制已经成为一种重要的营销策略。通过用户推荐&#xff0c;企业不仅能够扩大品牌影响力&#xff0c;还能有效降低获客成本。然而&#xff0c;如何设计一个合理的推荐机制&#xff0c;使得用户有足够的动力去推荐新人&#xff0c;同时保持团队…

【Java】接口和抽象类有什么共同点和区别?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 【Java】接口和抽象类有什么共同点和区别&…

基于遗传算法的药品配送,遗传算法原理

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 完整代码下载: 基于遗传算法的药品配送 背影 基于遗传算法的药品配送,求解运算量大,一般都无法用直接求解,本文用遗传算法进行求解,遗传算法拥有更好的全局寻优能力, 遗传算法 …

SQL Server注入之攻防技战法

那天下着很大的雨&#xff0c;母亲从城里走回来的时候&#xff0c;浑身就是一个泥人&#xff0c;那一刻我就知道我没有别的选择了 1.Mssql报错注入 0.判断数据库类型 1.爆当前用户名 2.爆版本 3.爆服务器名 4.判断数据库个数 5.获取全部数据库 语句只适合>2005 爆当前数据…

DDD落地实践-架构师眼中的餐厅(转)

本文以餐厅场景为叙事主线&#xff0c;以领域驱动为核心思想&#xff0c;结合架构设计与功能设计方法论。是从领域分析到落地的全过程案例&#xff0c;内容偏重于落地&#xff0c;因此不乏一些探讨&#xff0c;欢迎指正。 文章较长、全程干货、耐心读完、必有收获。 本文不针…

算法训练第五十七天|647. 回文子串、516.最长回文子序列

647. 回文子串&#xff1a; 题目链接 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由…

【docker】如何编写dockerfile文件,构建docker镜像

如何编写dockerfile文件&#xff0c;构建docker镜像 一、docker 镜像与 dockerfile1.1 什么是Docker镜像1.2 Docker 镜像的结构 二、dockerfile 中常用的构建指令三、dockerfile 内容示例四、构建 docker 镜像 一、docker 镜像与 dockerfile 1.1 什么是Docker镜像 Docker镜像…

虾皮跨境电商物流:为卖家提供高效灵活的物流解决方案

虾皮&#xff08;Shopee&#xff09;作为一家知名的跨境电商平台&#xff0c;其物流服务是其成功的关键因素之一。虾皮跨境电商物流服务为卖家提供了一站式的物流解决方案&#xff0c;从订单处理到最终交付&#xff0c;为卖家提供高效、灵活、成本效益高的物流服务&#xff0c;…

【教学类-43-13】 20240103 (4宫格数独:错误版:768套) 不重复的基础模板数量:768套

作品展示&#xff1a;——4宫格 768套不重复模板&#xff08;64页*12套题&#xff09; 有错误&#xff0c;实际数量小于768套 背景需求&#xff1a; 测试4宫格数独基础模板有几种。 写个程序&#xff0c;验算是不是真的是乘阶法的288种。 代码展示&#xff1a; 768套4宫格题…

Python for与while循环的介绍和对应练习题的巩固

for循环 重复执行同一段代码就是循环 循环列表 for val in list_name: list_num [1,2,3,4,5,6,7,8,9] for i in list_num:print(i)代码执行顺序 从上往下依次执行 遍历 通过某种顺序把某种集合所有元素都访问一遍 list_food{"火锅","烧烤","张…

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析&#xff08;4&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全配置…

服务器硬件及RAID磁盘阵列详解

文章目录 一、服务器硬件服务器常见故障 二、RAID磁盘阵列详解1、RAID磁盘阵列概述2、RAID 0(条带化存储)3、RAID 1&#xff08;镜像存储&#xff09;4、RAID 55、RAID 66、RAID 10&#xff08;先做镜像&#xff0c;再做条带&#xff09;7、RAID 01&#xff08;先做条带&#x…

通配符证书免费获取

通配符证书是一种特殊的SSL/TLS证书&#xff0c;设计用于保护一个主域名及其无限数量的一级子域名。这种类型的数字证书通过使用一个星号&#xff08;*&#xff09;作为通配符来实现对多个子域的安全加密&#xff0c;使得所有与指定格式匹配的子域名都能在同一个证书下得到安全…

使用sensors获取LinuxCPU温度

标题使用sensors获取LinuxCPU温度 假设您的 sensors 命令输出类似于以下内容&#xff1a; Copy Codecoretemp-isa-0000 Adapter: ISA adapter Package id 0: 50.0C (high 80.0C, crit 90.0C) Core 0: 45.0C (high 80.0C, crit 90.0C) Core 1: 48.0C (h…

编程语言未来的发展方向

编程语言的未来&#xff1f; 编程语言发展到现在&#xff0c;已经是比较完善并且好用&#xff0c;但这仅仅是对于专业人士来说的。对于普通人来说还是遥不可及。未来编程语言会朝着更加简洁&#xff0c;更加易读的方向去发展&#xff0c;函数式编程和响应式编程会普及。编程语…

机器学习中的监督学习基本算法-逻辑回归简单介绍

逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;是一种用于解决二分类问题的统计学习方法&#xff0c;尽管名字中带有"回归"一词&#xff0c;但实际上它是一种分类算法。逻辑回归的主要目标是通过学习从输入特征到一个离散的输出&#xff08;通常是0…

为什么要对服务器进行维护

我们在日常使用服务器的过程中&#xff0c;经常会遇到死机&#xff0c;卡顿等等&#xff0c;那么该怎么做才能避免出现类似情况。 为了确保服务器的正常运行和企业的顺利运营&#xff0c;定期进行服务器维护是必要的。服务器日常维护可以提高性能、保障安全、保持稳定性、延长…

Java基础03-方法与数组

方法 方法的定义 在Java中&#xff0c;方法是一组执行特定任务的代码块。方法定义由以下几个部分组成&#xff1a; 修饰符 返回类型 方法名(参数列表) {// 方法体 }修饰符&#xff1a;指定方法的访问权限&#xff08;public、private等&#xff09;。返回类型&#xff1a;指…