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

2023-11-21 18:12

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

文章目录

      • 数据库回收站积压导致异常
        • 现象与排查:
        • 知识点总结
          • 回收站与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/404138

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot项目引入token设置方式

《SpringBoot项目引入token设置方式》本文详细介绍了JWT(JSONWebToken)的基本概念、结构、应用场景以及工作原理,通过动手实践,展示了如何在SpringBoot项目中实现JWT... 目录一. 先了解熟悉JWT(jsON Web Token)1. JSON Web Token是什么鬼