数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129)

数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129)

本周二凌晨,为了配合某国产数据库从Oracle数据库能够实时同步数据,在X9M那套一体机上做了开启附加日志的操作,也正是因为这个操作带来了一些小问题。

1 干了些啥?

其实很标准,在主库CDB里面开启附加日志:

ALTER  DATABASE  ADD SUPPLEMENTAL  LOG  DATA;

而这时候在EMCC监控中发现某个PDB开始出现了一些问题:
在这里插入图片描述
数据库两条查询语句出现了大量的latch: cache buffers chains等待,业务方反馈主要是查询几乎卡死,对应操作无法执行。而这两条语句平时执行效率贼高,理应不会出现这个问题,那么根据最近做了啥操作,判定肯定是因为开启附加日志引起的。好的一点是开启附加日志的操作大概在15分钟内完成了,为了快速恢复业务,所以将对应PDB进行了重启操作:

alter pluggable database pdb_xxx close immediate instances=all;
alter pluggable database pdb_xxx open instances=all;
srvctl start service -db xxdbaas -s xxxdb

2 为什么会这样?

首先这里发生的问题很奇怪,如果是开启附加日志引起的异常等待,那么应该是所有PDB都会受到影响,然而受影响的只有一个PDB,在网上和MOS查了一圈过后也没找到具体原因,只能开个SR问问,上传了标准3件套:AWR报表、ASH、tfactl收集的文件之后,后台也很快给了答复:

根据Alter Database Add Supplemental Log Data Hangs (Doc ID 406498.1),启用Supplemental Log ,这个会让所有cursor cache 里的cursor失效,这个应该是导致这些SQL再次执行时候等待latch: cache buffers chains 的原因,通常来讲, 这个等待应该不会很长时间并且这么多会话同时等待,除非sql 性能很差,这个目前在您的环境中看不出来,因为在同一sample 里,很多会话执行同一sql,并且blocker是不同的。这个应该是正常的, 只是在增加supplemental log data 过程中很大概率遇到的一个情况。

这个问题也是我第一次遇到,因为附加日志开启造成的大量等待,也算是吃一堑长一智,以后所有数据库操作还是申请一个高级别的割接操作,割接期间任何影响就有据可依。这里也可以看到,一体机会给一些性能不大好的SQL带来一些幻觉,因为跑的很快;另一方面即是强如Exadata也不能在稍有异常的情况下跑出非凡性能。最终还好业务侧把出问题时间的坑给填了,不说了,看语句优化去了。

3 你以为就完了?

数据库的性能问题确实是解决了,但是还得去PDB里面开全列附加日志,因为要从ADG备库拉取数据,而备库用于日志存储的磁盘组空间很小,因此该国产数据库技术人员提供了下面的语句来开启需要同步的对应表的全列统计信息:

DECLAREsqltest VARCHAR2(200;);
BEGINFOR t IN (SELECT table_name FROM all_tables WHERE owner ='XXXX'))LOOPSqltest := 'ALTER TABLE '||t.table_name||'ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS';EXECUTE IMMEDIATE sqltest;;DBMS_OUTPUT.PUT_LINE(sqltest;);END LOOP;;
END;;

这里吐槽以下几点:

  • loop,查一条拼接一条执行一条,这效率,有点低
  • 变量大小写问题,主要是看着烦
  • 作为DBA不干预业务用户账号密码,那我肯定得用高权限用户去执行,那么只不是缺了个schema拼接内容
  • ADD前面少了一个空格(尴尬症还是强迫症抑或都给整出来了)

总结

老规矩,知道写了些啥!

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

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

相关文章

mybatis参数输入 #{}和${}

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

深入Python元编程:了解声明与初始化定制元类

更多资料获取 📚 个人网站:ipengtao.com 简介 在Python中,元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一,允许您控制类的创建过程。元类是类的类,它控制类的实例化,允许您…

Web实现悬浮球-可点击拖拽禁止区域

这次要实现的是这种效果,能够在页面上推拽和点击的,拖拽的话,就跟随鼠标移动,点击的话,就触发新的行为,当然也有指定某些区域不能拖拽,接下来就一起来看看有什么难点吧~ 需要监听的鼠标事件 既…

【LeetCode刷题】--77.组合

77.组合 class Solution {public List<List<Integer>> combine(int n, int k) {List<List<Integer>> ans new ArrayList<>();if( k < 0 || n < k){return ans;}Deque<Integer> list new ArrayDeque<>();dfs(ans,list,n,k,1)…

接口中的大事务,该如何进行优化?

前言 作为后端开发的程序员&#xff0c;我们常常会的一些相对比较复杂的逻辑&#xff0c;比如我们需要给前端写一个调用的接口&#xff0c;这个接口需要进行相对比较复杂的业务逻辑操作&#xff0c;比如会进行&#xff0c;查询、远程接口或本地接口调用、更新、插入、计算等一…

MySQL主从复制架构

MySQL主从复制架构 一、MySQL集群概述 ##1、集群的主要类型 高可用集群&#xff08;High Available Cluster&#xff0c;HA Cluster&#xff09; 高可用集群是指通过特殊的软件把独立的服务器连接起来&#xff0c;组成一个能够提供故障切换&#xff08;Fail Over&#xff09…

java开发需要用到的软件,必备软件工具一览

java开发需要用到的软件&#xff0c;必备软件工具一览 如果你对Java编程感兴趣或已经是一名Java开发者&#xff0c;你需要一些必备的软件工具来提高你的生产力和简化开发过程。在本文中&#xff0c;我们将探讨Java开发所需的关键软件工具&#xff0c;并通过具体示例来解释它们的…

一个金融机构高效功能!不想加班的打工人有福了!

随着信息技术的飞速发展&#xff0c;现代企业对于数据中心和服务器的依赖程度越来越高。为了确保这些关键设备的可靠运行&#xff0c;不可中断电源&#xff08;UPS&#xff09;系统的作用愈发重要。 UPS系统不仅能够提供电力备份&#xff0c;还能保护设备免受电力波动和突发事件…

【element-plus使用】el-select自定义样式、下拉框选项过长等问题解决

1、自定义样式 <template><el-select v-model"value" style"width: 150px"><el-option label"选项一" value"option1"></el-option><el-option label"选项二" value"option2"><…

Findreport中框架图使用的注意事项

目录 简介 测试数据 闭环链路关系 解决办法&#xff1a; 根不唯一 解决办法&#xff1a; 简介 在框架图的应用中&#xff0c;一些表达上下游关系的数据非常适合用于做链路图相关的报表。可以展示成雪花图&#xff0c;普通架构图。但是在实际操作中有几点关于数据的注意事…

jenkins使用nexus插件

nexus介绍 Nexus 是一个强大的仓库管理工具&#xff0c;用于管理和分发 Maven、npm、Docker 等软件包。它提供了一个集中的存储库&#xff0c;用于存储和管理软件包&#xff0c;并提供了版本控制、访问控制、构建和部署等功能。 Nexus 可以帮助开发团队提高软件包管理的效率和…

mysql8报sql_mode=only_full_group_by(存储过程一直报)

1&#xff1a;修改数据库配置(重启失效) select global.sql_mode;会打印如下信息 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION里面包含 ONLY_FULL_GROUP_BY&#xff0c;那么就重新设置&#xff0c;在数据库中输入以下代码&#xff0c;去掉ONLY_FULL_GROU…