enq: TM - contention等待事件引起的数据库卡顿分析

news2024/10/7 10:15:53

用户的数据库系统在2022年5月31日下午17:25至17:45出现严重的锁等待,导致对应的应用程序出现卡顿等情况,业务系统的正常使用受到影响,无法正常办理业务;在此情况下需要排查出锁问题的深层原因,从而从根本上解决问题。

  • 问题分析
    1. 问题时间段的AWR性能数据分析

通过对数据库两个节点的DB TIME指标及后续的等待事件等分析,可以发现卡顿问题时主要为。本文档中的分析主要以数据库节点1的数据为基准。

      1. 数据库等待事件数据

问题时间点,数据库主要为enq: TM - contention等待事件;

节点1:

 

节点2:

 

      1. TOP SQL语句的分析

数据库有一条SQL执行时间长,经沟通确认为OGG中添加表附加日志的操作产生的:BEGIN DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"AA"."BB"', supplemental_logging => 'none'); END;

 

    1. ASH报告中异常发生的时间段

从ASH性能报告中,可以看到enq: TM - contention等待事件发生在17:20-17:45分左右:

 

    1. 等待事件对应的对象信息

查看ASH报告,可以发现异常的TM等待对应的表是:CBS.NEXF_APPROPRIATE

对应的SQL语句是:INSERT INTO AAAAA VALUES(:id, :fiscal_date, :request_id, :respond_id, :tran_date, :tran_code, :channel_id, :teller_id)

AA.BBB表与 tran_AAA表存在主外键关联关系。

    1. 阻塞问题的进一步分析
      1. enq: TM - contention阻塞原理的分析

通过前面分析,可以发现从ASH报告中找出的TOP SQL对象之间存在主外键约束关系,具体为:

  • AA用户的NEXF_APP表的REGL列,使用外键约束,对应的是tran表的主键ID列。
  • 外键约束列上未创建索引。

      1. DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION与TM等待的关系

OGG执行的操作,在数据库中对应的SQL是BEGIN DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"AA"."BBBB"', supplemental_logging => 'none'); END;

ORACLE官方文档中(High 'enq: TM - contention' Wait Event Causing Session Hangs in an Oracle Streams Environment (Doc ID 740728.1)),对于OGG附加日志时执行的语句:BEGIN DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"AAA"."NBBB"', supplemental_logging => 'none'); END; 的说明,此语句语句本身会引起TM锁;

  • 总结与后续处理建议
    1. 问题分析总结

通过对数据库性能数据的分析,可以发现问题时段数据库出现严重的enq: TM - contention锁等待;结合ASH性能报告中可以对应找出出现异常等待事件的时对象为AA.BBIATE表与 tran_jrnl 表,这两张表存在主外键关联关系;

因此结合ORACLE官方文档中(High 'enq: TM - contention' Wait Event Causing Session Hangs in an Oracle Streams Environment (Doc ID 740728.1)),对于OGG附加日志时执行的语句:BEGIN DBMS_CAPTURE_ADM.PREPARE_TABLE_INSTANTIATION(table_name => '"AA"."BB"', supplemental_logging => 'none'); END; 的说明,此语句语句本身会引起TM锁;同时NEXF表与 tran表存在主外键关联关系且外建列上无索引,tran表做为业务流水表会存在较多的INSERT操作,加剧了问题发生时的TM锁争用。

    1. 后续优化建议
  1. 对AA.NEXF表上的两个有外建约束的列创建索引,避免后续此类问题的发生。创建索引时需要注意查看表空间使用情况、使用ONLINE在线模式创建索引及关注归档日志产生量是否过大等。

对表添加附加日志等涉及数据库的操作时,建议在业务较少时、数据库系统空闲时进行,尽可能减少和规避对业务使用

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

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

相关文章

【Python psycopg2】零基础也能轻松掌握的学习路线与参考资料

Python psycopg2是一个Python库,在Python中提供了一个连接PostgreSQL数据库的接口。它可以让Python应用程序和PostgreSQL数据库之间进行通信和数据传输。学习Python psycopg2的路线和教程可以在查阅资料和实践中快速入门。 一、学习前置知识 学习Python psycopg2需…

23 memset 的调试

前言 同样是一个 很常用的 glibc 库函数 不管是 用户业务代码 还是 很多类库的代码, 基本上都会用到 内存数据的设置 不过 我们这里是从 具体的实现 来看一下 它的实现 主要是使用 汇编 来进行实现的, 因此 理解需要一定的基础 测试用例 就是简单的使用了一下 memcpy,…

去面试测试开发工程师要做哪些准备?大厂真实面试题汇总

目录 1.黑盒测试和白盒测试的区别特点和方法。 2.单元测试、集成测试、系统测试、验收测试、回归测试 3.集成测试和系统测试的区别和应用场景 4.α测试、β测试,以及它们的区别 5.给你一个字符串,你怎么判断是不是ip地址?手写这段代码&…

大数据之RDD的算子分类

文章目录 前言一、RDD的算子分类二、Transformation转换算子三、Action动作算子总结 前言 #博学谷IT学习技术支持# 上一篇文章主要讲述了两种RDD的创建方式,本篇文章接着讲RDD的算子及其分类。 一、RDD的算子分类 RDD的算子主要有两种类型,一种是Tran…

docker面试题:docker容器虚拟化与传统虚拟机比较

容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件在任何环境中都能够始终如一地运行。容器赋予了软件独…

什么是强化学习?强化学习有哪些框架、算法、应用?

什么是强化学习? 强化学习是人工智能领域中的一种学习方式,其核心思想是通过一系列的试错过程,让智能体逐步学习如何在一个复杂的环境中进行最优的决策。这种学习方式的特点在于,智能体需要通过与环境的交互来获取奖励信号&#…

JAVA常用API - 正则表达式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一,正则表达式是什么? 二,正则表达式符号 三,常用正则表达式组合 四,正则表达…

利用MySQL的binlog恢复误删的数据库

1 查看当前数据库内容并备份数据库 查看数据库信息: 备份数据库: [rootlocalhost ~]# mysqldump -u root -p t > /mnt/t.sql Enter password: [rootlocalhost ~]# ll /mnt/t.sql -rw-r--r-- 1 root root 1771 Aug 25 11:56 /mnt/t.sql2 开启bin…

java-----web项目部署到新服务器以及服务器的部署

目录 一、服务器安装jdk1.8 二、安装mysql5.7 2.1下载mysql 2.2修改root账号密码 2.3设置远程登录 三、项目的部署 3.1导入数据库 3.2将项目打成jar包 3.3项目上传 服务器部署项目的方式,本次以打成jar包的形式讲解(以springboot项目为例&#xf…

2023年贵工程团体程序设计赛--部分题解

作者:杨书瑶 单位:贵州工程应用技术学院 本次比赛由大学生程序设计协会(cpa)举办,共计17道题,295分。其中5分题三道,10分题三道,15分题两道,20分题三道,25分题两道,30分题两道…

chatgpt赋能Python-pythonbus

PythonBus: 为Python 开发者量身打造的社区 对于所有Python 开发者而言,PythonBus 是一个非常值得加入的社区平台。该平台汇聚了全球最顶尖的Python 开发者,同时也是一站式排除各种问题并交流经验的平台。在PythonBus,无论你是初学者还是专家…

【模电实验】基本放大电路的研究实验

实验四 基本放大电路的研究实验(2小时) —、实验目的 (1)充分认识分压式偏置放大电路的电压放大作用,了解其静态工作点的调节、测量,认识截止失真和饱和失真现象,了解消除截止失真和饱和失真…

华为OD机试真题 Java 实现【计算网络信号】【2023Q2 200分】

一、题目描述 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。 注意: 网络信号可以绕过阻隔物array[m][n]的二维数组代表网格地图,array[i][j]0代表i行j列是空旷位置&#xff…

DAY 64 mysql主从复制与读写分离

概念 什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) ,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要读写分离呢? 因为数据库的…

【Linux系列P2】Linux基本指令知识(带图演示,精炼)

前言 大家好,这里是YY的Linux系列part2;本章主要内容面向能使用Linux的老铁,主要内容含【设置普通用户】【Linux基本知识】【基本指令大全】 在下一章节【Linux系列part3】中,YY将手把手讲述Linux的权限知识,欢迎订阅YY的Linux专栏…

MyBatis 是什么?与 Hibernate 的区别是什么?

MyBatis 是一种基于 Java 的持久化框架,它可以将 SQL 语句和 Java 代码进行映射,使得开发人员可以使用面向对象的方式来操作数据库。MyBatis 通过提供 XML 配置文件或注解方式来配置映射关系,使得数据库操作变得更加简单和灵活。 与 Hiberna…

VS Code 配置 C/C++ 开发环境

一、软件下载 需要下载的软件如下: VS Code编译工具:MinGW 或 MSYS2 或 VS2022 VS Code 下载地址:链接 MinGW 下载地址:链接 或者 链接 MSYS2 下载地址:链接 VS2022 下载地址:链接 上述软件下载完成以后…

入门JavaScript编程:上手实践四个常见操作和一个轮播图案例

部分数据来源:ChatGPT 简介 JavaScript是一门广泛应用于Web开发的脚本语言,它主要用于实现动态效果和客户端交互。下面我们将介绍几个例子,涵盖了JavaScript中一些常见的操作,包括:字符串、数组、对象、事件等。 例子…

Java【TCP 协议2】好多人都错了! 保证可靠传输的不是三次握手和四次挥手! 而是...

文章目录 前言一、确认应答1, 什么是确认应答2, 序列号和确认应答号 二、超时重传1, 什么是超时重传 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系…

蓝牙RFCOMM 协议

蓝牙RFCOMM 1.RFCOMM1.1 服务定义模型1.2 字节排序 2 RFCOMM数据帧2.1 选项和模式2.2 帧类型2.3 帧格式2.3.1 Address2.3.2 Control(帧类型)2.3.3 Length2.3.4 InfoData2.3.5 FCS 2.4 多路复用控制命令(DLCI 0)2.4.1 DLC paramete…