【问题标题】:SQL insert and update high elapsed time happening only at certain time of the daySQL 插入和更新仅在一天中的特定时间发生的高运行时间
【发布时间】:2018-07-18 12:57:18
【问题描述】:

每天晚上 7 点左右,我注意到我的应用程序运行速度比平时慢。 在查看 AWR 报告时,我注意到 2 个常用 SQL 语句的运行时间很长(每次执行大约 1 秒)。

我比较了一天中较早时间上午 9 点的 AWR 报告,发现相同的 SQL 语句每次执行只需 0.01 秒。

这些语句的执行次数大致相同。可以肯定地说,与晚上 7 点相比,我的应用程序在上午 9 点的负载更高。

  • 这两个语句(1 个更新和 1 个插入)的目标相同 桌子。
  • 这张桌子很大。
  • 这些语句中的每一个都有一个固定的 SQL ID,所以我希望 每个语句的执行计划与 早上和晚上。
  • 该表全天频繁插入和更新。根据该正常和异常小时的 AWR 报告,大约有 100 000 次插入和 60 000 次更新。

有人能指出我如何解决这个问题的正确方向吗?

我不是 DBA。

非常感谢。

【问题讨论】:

    标签: sql database oracle oracle11g sql-execution-plan


    【解决方案1】:
    1. AWR 报告应该能够回答负载问题(上午 9 点对晚上 7 点)。
    2. 具有相同的 SQL ID 只是意味着 SQL 语句的文本是相同的;不是执行计划。您需要查看计划哈希值 (PHV) 以查看执行计划是否相同。如果它们不同,那么您需要查看实际的执行计划本身并了解为什么它们不同。
    3. 什么是“相当大”?是数字。

    【讨论】:

    • 您好 Bobc,感谢您的回复。 AWR 显示上午 9 点的执行次数高于下午 7 点的执行次数。但是,经过时间较长的是晚上 7 点的处决。我将按照您的建议检查计划哈希值。另外,对于您的第 3 点,我可以知道用什么计量单位来描述桌子的大小吗?它是按行数吗?列?字节?感谢您的耐心等待!
    • 表格大小以行数和大小(MB 或 GB 等)来衡量
    • 您好 Bobc,抱歉回复晚了。因为该表插入了许多行,所以该表的 SQL 统计信息变得陈旧。因此,我们每天为这个特定的表运行两次 DBMS 优化器来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多