【问题标题】:What is the equivalent of a heap dump in Oracle什么相当于 Oracle 中的堆转储
【发布时间】:2016-05-11 15:04:18
【问题描述】:

阅读一些有关 Oracle 数据库的信息,我正在学习共享池。

我以此为主要参考:https://docs.oracle.com/database/121/TGDBA/tune_shared_pool.htm#TGDBA558

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

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

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

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

【问题讨论】:

    标签: database oracle performance database-performance


    【解决方案1】:

    看看Oradebug

    从页面:

    Oradebug 是一个可以从 SQL*Plus(或 Svrmgrl 在 Oracle 8i 和更低版本中)显示或转储诊断 信息。

    关于转储herehere 的简要说明。

    【讨论】:

    • 酷!谢谢。那么有没有来自 oracle 的内置工具可以做同样的事情呢?或者也许没有花里胡哨?
    • 根据第二个链接,“该工具主要由Oracle全球客户支持使用”。我实际上不确定您是否可以使用其他任何东西。
    【解决方案2】:

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

    Oracle 的诊断能力远远超出了 JVM 所能提供的。

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

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

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

    【讨论】:

    • 很好的答案。我想对你提出一些挑战——你说它比 Java heapdump 更强大。好的,我想挑战你回答一个问题——如何将特定解析的 varchar 内容转储到共享池中?这意味着我有一个解析正在这样做:2 + 50 * .50325 但我想要的是::initial + :fees * :factor 所以它可以重复使用。因此,我将进行修复以获取这些内容。我想在共享存储中搜索关键字“:initial +:fees”以确保我的替换有效。 java堆转储使这很容易。想法?
    • select * from v$sql where sql_text like = 'any text you want'。 Oracle 的概念不同。想象一下,JVM 可以为每个方法提供信息;它被调用了多少次,执行时间,如果被阻塞,那么被谁阻塞。
    猜你喜欢
    • 2011-11-01
    • 1970-01-01
    • 2019-05-02
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2020-04-26
    • 2019-09-12
    相关资源
    最近更新 更多