什么相当于 Oracle 中的堆转储

What is the equivalent of a heap dump in Oracle

正在阅读有关 Oracle 数据库的一些资料,并且我正在学习共享池。

我用这个作为我的主要参考:https://docs.oracle.com/database/121/TGDBA/tune_shared_pool.htm#TGDBA558

读完这篇文章后,我仍然不清楚的是我们如何获得共享池的“转储”

例如,假设我有一个应用程序由于共享池压力过大而出现内存消耗问题/错误...我将如何找出正在消耗的存储过程、字符串变量内容等使用所有存储空间?

在 Java 中,我们将简单地进行堆转储。堆转储显示包,类,内存中的原始数据。

Oracle 中的堆转储相当于什么?

看看Oradebug

来自页面:

Oradebug is a command that can be executed from SQL*Plus (or Svrmgrl in Oracle 8i and lower releases) to display or dump diagnostics information.

关于转储的简要说明here and here

转储Oracle 的共享池时,您将得到一个数十GB 的文件。您将阻止整个数据库直到完成。 这是您通常不想在生产数据库上执行的操作。

Oracle 的诊断能力是JVM 无法提供的。

  • 要简要了解内存使用情况,您可以使用 V$SGASTATv$sga_resize_ops
  • 首先你也可以回顾过去,可以分析过去的问题。 google 用于 AWR、ASH、STATSPACK 报告。
  • 阻塞问题可以使用挂起分析工具
  • 对于数据一致性问题,您可以使用审计或 logminer
  • 要详细跟踪单个会话,您可以使用 tkprof、trca 甚至实时 sql 监控。或 v$active_session_history.

Oracle 有一个叫做 wait interface 的东西,所以每当数据库花费一些时间做某事时,一些计数器就会增加。有多种工具可以访问这些计数器。他们每个人都有特定的用途。

所以是的,您也可以转储 Oracle 的共享池,但这通常是最后的手段,如何诊断 Oracle 中的问题。