【项目问题定位】近来几个数据库相关问题定位于知识点总结

本文主要是介绍【项目问题定位】近来几个数据库相关问题定位于知识点总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 数据库回收站积压导致异常
        • 现象与排查:
        • 知识点总结
          • 回收站与PURGE
          • Oracle回收站相关的基本操作:
      • 数据库事务重复创建未释放导致的链接泄露
        • 现象与排查
        • 知识点总结
          • 数据库事务未关闭导致的泄露
          • 链接泄露的临时恢复

数据库回收站积压导致异常

现象与排查:

😨数据库主机CPU异常、表查询僵死、前端查询超时
👉切双机、扩表空建都未解决
👉发现数据库回收站记录数量巨大
🤔怀疑大量删除表导致积压,purge失败,无法清理
👉回收站中表为查询业务创建的临时表
👉方案不合理,进行优化
👌停回收站临时解决

知识点总结
回收站与PURGE

      Oracle数据库的回收站(Recycle Bin)是从Oracle 10g开始引入的一个特性,它类似于操作系统中的回收站。当用户删除表或其他数据库对象时,这些对象并不会立即从数据库中永久删除,而是被放到回收站中。这允许用户在需要时恢复(即“闪回”)这些被删除的对象。

      回收站的主要优点是可以提供对意外删除操作的保护。如果用户不慎删除了重要数据,可以使用回收站中的内容来恢复这些数据,而不必从备份中恢复整个数据库,这样可以节省大量的时间和资源。

Oracle回收站相关的基本操作:
  1. 查看回收站内容:
    用户可以通过查询DBA_RECYCLEBIN或USER_RECYCLEBIN视图来查看回收站中的对象。
  2. 恢复对象:
    使用FLASHBACK TABLE命令可以恢复回收站中的表。例如:
FLASHBACK TABLE my_table TO BEFORE DROP;

这个命令会将名为my_table的表从回收站中恢复到它被删除前的状态。

  1. 彻底删除对象:
    如果用户确定不再需要回收站中的对象,可以使用PURGE命令来彻底删除它们。例如:
PURGE TABLE my_table;

或者清空整个回收站:

PURGE RECYCLEBIN;
  1. 关闭回收站功能:
    如果不想使用回收站功能,可以通过设置初始化参数RECYCLEBIN来关闭它。例如:
ALTER SYSTEM SET RECYCLEBIN=OFF;

      回收站只保存在数据库中被DROP操作影响的对象。如果数据库空间不足,或者执行了DROP … PURGE命令,对象将会被永久删除,这时回收站就无法恢复这些对象了。此外,一些对象类型,如索引,不会进入回收站

数据库事务重复创建未释放导致的链接泄露

现象与排查

😅进程挂死导致业务中断
😑有大量链接泄露
🤔重启进程,业务恢复
👉代码重复创建session且未释放
👌修改代码避免重复创建session且不释放

知识点总结
数据库事务未关闭导致的泄露

      数据库事务未关闭导致的泄露通常是指资源泄露,这种情况下,数据库连接或者事务没有被适当地结束或释放。这可能会导致多种问题:

  1. 连接泄露:每个数据库客户端和数据库服务器之间的连接都是有限的资源。如果事务结束后,连接没有被关闭,那么这些连接会保持打开状态,占用数据库服务器的资源。这种情况下,随着时间的推移,可用的数据库连接数会逐渐减少,最终可能耗尽,导致新的数据库请求无法建立连接,影响应用程序的功能。
  2. 内存泄露:事务处理过程中可能会在数据库服务器上分配内存。如果事务不被正确关闭,那么这些内存分配可能不会被释放,从而导致数据库服务器上的内存泄露。
  3. 锁泄露:在事务处理过程中,可能会对数据进行加锁以保证数据的一致性。如果事务未被正确关闭,这些锁可能不会被释放,导致其他事务无法访问这些被锁定的数据资源,从而引起死锁或性能下降。
  4. 数据不一致:事务是数据库操作的基本单位,它们保证了操作的原子性、一致性、隔离性和持久性(ACID属性)。一个未正确关闭的事务可能会导致数据处于不一致的状态,特别是如果它包含了未提交或未回滚的更改。
    为了避免这些问题,应用程序在使用数据库时应该遵循最佳实践:
    ● 确保每个数据库事务在使用完毕后都能够正确提交或回滚。
    ● 使用数据库连接池管理连接,并确保连接在事务完成后返回池中。
    ● 通过适当的异常处理机制来确保即使在发生错误时,事务和连接也能被正确关闭。
    ● 定期监控和审计数据库资源的使用情况,以便及时发现并解决潜在的资源泄露问题。
链接泄露的临时恢复

      关于数据库连接泄露,重启业务进程(即重启运行应用程序的服务器进程)通常能够恢复因为连接泄露导致的资源不足问题,因为重启进程会关闭所有当前活跃的连接,包括那些未被正确关闭的连接。这意味着连接池将会被清空,释放所有之前分配的连接,使得新的进程实例可以重新开始并建立新的连接。

      一些临时恢复措施:

  1. 清理连接池:
    ○ 如果使用的是连接池,可以尝试清理或刷新连接池而不重启整个应用程序。许多连接池管理工具和库支持这样的操作。
  2. 增加数据库连接数限制:
    ○ 临时增加数据库的最大连接数,可以缓解因连接泄露导致的资源不足问题,但这并不是根本的解决办法,长期这样可能会导致数据库服务器过载。
  3. 手动关闭未使用的连接:
    ○ 如果能够识别出未正确关闭的连接,可以手动将其关闭。这可能需要数据库管理工具的支持。
  4. 应用程序级别的连接管理:
    ○ 在应用程序中实现一些逻辑,比如定时检查和关闭长时间未使用的连接,或者在检测到连接泄露时自动重置连接。
  5. 使用数据库监控工具:
    ○ 使用监控工具来跟踪活跃的数据库连接,并在发现潜在的泄露时发送警告,这样管理员可以在问题成为严重故障之前介入。
  6. 设置连接超时:
    ○ 在数据库或连接池配置中设置连接超时,使得闲置连接在一段时间后自动关闭。
  7. 优化数据库事务管理:
    ○ 确保所有数据库事务都能够在使用后尽快提交或回滚,这样可以释放事务期间占用的连接。
  8. 应用级别的故障转移:
    ○ 实现应用程序级别的故障转移机制,当检测到连接泄露时,可以将流量切换到备份服务器或服务实例。

这篇关于【项目问题定位】近来几个数据库相关问题定位于知识点总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403995

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间