一次hard parse处理过程

文章目录

  • 1.问题描叙
  • 2. AWR报告
    • 2.1 load profile
    • 2.2 Instance Efficiency Percentages(Target 100%)
    • 2.3 Time Model Statistics
    • 2.4 Instance Activity Stats
    • 2.5 Top 5 Timed Events
    • 2.6 查询hard parse
  • 3. 解决方案:
    • 3.1.修改程式,使用绑定变量
    • 3.2.使用cursor_sharing=force,强制相似sql使用绑定变量
  • 验证

1.问题描叙

记录一次hard parse引起enq: TX - row lock contention的处理过程

2. AWR报告

DB time:所有前台会话在数据库中花费的时间总和,不包括Oracle后台进程消耗的时间
Elapsed:采样事件周期
DB time远大于 Elapsed time,说明遭遇了严重的性能问题。
notice:在解释 AWR 报告时尽早弄清楚数据库负载极其重要。
在这里插入图片描述

2.1 load profile

Hard parses占到parses的37%权重
在这里插入图片描述

2.2 Instance Efficiency Percentages(Target 100%)

parse CPU to Parse Elapsed % 真正在cpu上做功时间只有整个分析时间48.07%,说明其他时间在等待什么
在这里插入图片描述

2.3 Time Model Statistics

Hard parse elapsed time占到db time的15%
在这里插入图片描述

2.4 Instance Activity Stats

parse count(hard)/parse count(total)=0.37,也说明了系统中存在严重的hard parse
在这里插入图片描述

2.5 Top 5 Timed Events

存在严重的enq: TX - row lock contention等待
在这里插入图片描述
继续深挖下去,enq: TX - row lock contention是被大量的latch:shared pool与latch:library cache阻塞

SELECT SESSION_ID,EVENT FROM dba_hist_active_sess_history  WHERE SESSION_ID IN 
(select BLOCKING_SESSION
from dba_hist_active_sess_history where  to_char(sample_time,'YYYY-MM-DD HH24') BETWEEN '2023-07-31 07' AND '2023-07-31 10' AND EVENT='enq: TX - row lock contention')

在这里插入图片描述
latch:shared pool,这个latch 用于保护free chunk链,
latch:library cache,这是一个hash bucket 链闩锁,当sql执行时,首先会被hash,然后获得对应bucket的latch:libary cache,于对应bucket中查找是否存在同样的hash value,如果存在,释放latch,重用sql及执行计划,否则进行hard parse,hard parse需要创建parent cursor与child cursor,这些都需要从share pool获取free chunk,这也是latch:shared pool出现的原因
所以,可以合理怀疑,enq: TX - row lock contention是由于大量的hard parse所牵累

2.6 查询hard parse

先使用简单的sql获取parse_calls=1 and executions=1的sql语句

SELECT sql_id,executions,version_count,SQL_FULLTEXT  FROM V$SQLAREA WHERE PARSE_CALLS=1 AND EXECUTIONS=1 

在这里插入图片描述
发现很多只执行1次使用常量的update语句,这也是为何enq: TX - row lock contention大量出现的原因,并且在繁忙的系统中由于update 语句没有绑定变量,导致hard parse出现,每次update时都要等待hard parse完成,而这个update 又阻塞了其他的update,最后形成恶性循环

3. 解决方案:

3.1.修改程式,使用绑定变量

3.2.使用cursor_sharing=force,强制相似sql使用绑定变量

这里有必要对cursor_sharing的值做简单介绍:
–EXACT - 这是默认值,sql字符完全匹配才能共享sql
–FORCE - 所有条件都转换为绑定变量(WONUM=‘1234’ 和 WONUM LIKE ‘123%’ 均被转换)。
–SIMILAR - 仅将等价条件转换为绑定变量(转换 WONUM=‘1234’,但不转换 WONUM LIKE ‘123%’)。
另外,引用外网的一段解释作参考
cursor_sharing=similar: “Causes statements that may differ in some literals, but are otherwise identical, to share a cursor, unless the literals affect either the meaning of the statement or the degree to which the plan is optimized.”

cursor_sharing=FORCE: “Forces statements that may differ in some literals, but are otherwise identical, to share a cursor, unless the literals affect the meaning of the statement.”
So basically it means that the SQL statement will be shared even though literals are different as long as it does not affect the execution plan of the statement. This is the case for SIMILAR setting.

The cursor_sharing=SIMILAR parameter has been deprecated in 11gR2 because it has been found that the use of this parameter could potentially have a lot of performance implications related to the number of child cursors created for the single parent.

In versions prior to 11g R2, the was a limit on the number of child cursors which can be associated with a single parent. It was 1024 and once this number was crossed the parent was marked obsolete and this invalidated it was well as all associated child cursors.

But not having this upper limit was being found to have caused a lot of CPU usage and waits on mutexes and library cache locks in 11gR2 caused by searching the library cache for matching cursors and it was felt that having many child cursors all associated with one parent cursor could perform much worse than having many parent cursors that would be seen with having the default setting of cursor_sharing = EXACT

基于上述原因,系统维护人员讨论后,决定先采用方案二

SQL> show parameter cursor_sharing;NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cursor_sharing                       string      EXACT
SQL> alter system set cursor_sharing=force scope=both;
System altered.

验证

再次查询v$sqlarea,executions已经由原来的1次,变成了上万次,说明sql已经获得公用

select sql_id,address,executions,SQL_FULLTEXT 
from v$sqlarea where SQL_FULLTEXT like 'UPDATE MK_TMP_EM_DAYWK ED  SET WORK_LV58%'

在这里插入图片描述
上图中的sql如下,注意红色部分,已经由原来的常量变成了绑定变量
UPDATE MK_TMP_EM_DAYWK ED SET WORK_LV58 = FUN_WH_ADJ(NVL(WORK_LV58,:“SYS_B_0”)+ CASE WHEN NVL(WORK_LV38,:“SYS_B_1”) BETWEEN :“SYS_B_2” AND :“SYS_B_3” THEN :“SYS_B_4” ELSE :“SYS_B_5” END ) WHERE FACT_NO = :“SYS_B_6” AND CARD_DATE = :“SYS_B_7” AND WK_TYPE = :“SYS_B_8”

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

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

相关文章

机器人远程控制软件设计

机器人远程控制软件设计 That’s all.

Vue3+Pinia+Koa+Three.js 全栈电商项目总结复盘

前言 前几天一个朋友去义乌旅游,带回来很多小商品,就是一整个物美价廉,但是为什么线下购物和网购有的时候差别这么大(网购经常要退换货啊😭😭😭),为此我萌生了一个想法&…

什么是确认测试报告?确认测试报告的用途和周期?

确认测试又称有效性测试,其任务是验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试需要提供的资料包括: 软件需求规格说明书:列出了软件的功能和性能要求,是确认测试的依据。 确认测试计划:制定了确认…

分布式微服务架构下网络通信的底层实现原理

在分布式架构中,网络通信是底层基础,没有网络,也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作,共同完成一件事情。 同样,在大规模的系统架构中,应用吞吐量上不去、网络存在通信延迟、我…

Java 四种访问控制权限

1.背景: 针对java的类成员访问控制权限理解 2.Java有四种访问控制权限: private,protected,public,default 他们的具体访问权限都是什么呢?用例子来分析一下: 这里要分几个情景:内…

IDEA中使用Docker插件构建镜像并推送至私服Harbor

一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…

TensorRT推理手写数字分类(三)

系列文章目录 (一)使用pytorch搭建模型并训练 (二)将pth格式转为onnx格式 (三)onxx格式转为engine序列化文件并进行推理 文章目录 系列文章目录前言一、TensorRT是什么?二、如何通过onnx生成en…

华为云CodeArts Snap 智能编程助手PyCharm实验手册. 插件安装与使用指南

作为一款自主创新的AI代码辅助编程工具,华为云智能编程助手CodeArts Snap目标打造现代化开发新范式。通过将自然语言转化为规范可阅读、无开源漏洞的安全编程语言,提升开发者编程效率,助力企业快速响应市场需求。华为云CodeArts Snap现进入邀…

Python Opencv实践 - 图像直方图均衡化

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像直方图计算 #cv.calcHist(images, channels, mask, histSize, ranges, hist, accumulate) #images&…

Android中使用JT808协议进行车载终端通信的实现和优化

JT808是一种在中国广泛应用的车载终端通信协议,用于车辆与监控中心之间的数据通信。下面是关于Android平台上使用JT808协议进行通信的一般步骤和注意事项: 协议了解:首先,您需要详细了解JT808协议的规范和定义。该协议包含了通信消…

高速道路监控:工业路由器助力高速监控远程管理与维护

工业路由器在物联网应用中扮演着重要的角色。物联网的发展使得大量设备和传感器能够互联互通,而工业路由器作为连接这些设备和网络的中间桥梁,承担着数据传输和安全管理的重要责任。 工业路由器能够为高速监控提供网络功能,实现户外无线网络部…

基于Java+SpringBoot+vue前后端分离高校办公室行政事务管理系统设计实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

selenium案例之RAM 用户登录 aliyun

文章目录 0x00 Selenium0x01 整体流程 思路1.1 打开浏览器并且访问 登录页面 url: https://signin.aliyun.com/login.htm#/main1.2 定位 "用户名" input 和 "下一步" button 点击下一步1.3 定位 "密码" input 和 "登录" button 点击登…

《Linux从练气到飞升》No.17 进程创建

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Stable Diffusion web UI 部署详细教程

前言 本文使用 AutoDL 平台进行 Stable Diffusion web UI 云端部署 AutoDL 官网:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL Stable Diffusion web UI 官网:AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com) 步…

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…

Cesium 使用 Entity 绘制点线面

文章目录 一、绘制点1. 第一种2. 第二种 二、绘制面三、绘制线四、移除 Entity <!--* Author: HuKang* Date: 2023-08-18 11:06:43* LastEditTime: 2023-08-25 09:16:59* LastEditors: HuKang* Description: program-c* FilePath: \global-data-display\src\views\program-c…

深度学习-实验1

一、Pytorch基本操作考察&#xff08;平台课专业课&#xff09; 使用&#x1d413;&#x1d41e;&#x1d427;&#x1d42c;&#x1d428;&#x1d42b;初始化一个 &#x1d7cf;&#x1d7d1;的矩阵 &#x1d474;和一个 &#x1d7d0;&#x1d7cf;的矩阵 &#x1d475;&am…

深度学习处理文本(NLP)

文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…

【数据结构练习】单链表OJ题(一)

目录 一、移除链表元素思路1&#xff1a;思路2&#xff1a; 二、反转链表三、链表的中间节点四、链表中倒数第k个节点五、回文结构六、合并两个有序链表 一、移除链表元素 题目&#xff1a; 思路1&#xff1a; 在原来的链表上进行修改&#xff0c;节点的数据是val的删除&am…