0

我们有一个总是遇到性能问题的大包。我们在一个月内平均收到 6 到 10 份针对此问题的票。有时程序会成功运行几分钟,有时它会运行几天只是因为出现无法解释的错误而出错。

我开始对此进行深入研究,发现性能问题的可能原因有很多,例如大量未调整的 SQL 和糟糕的编码习惯等。

今天让我印象深刻的一件事是在代码中,它在执行一些大操作(例如巨大的 Select 语句和许多 DML 语句)之前在多个地方多次调用 Gather Table Statistics。

该计划每天、每周和每月运行一次,具体取决于组织的实践。

不幸的是,我无法复制性能问题以了解更多信息,但我猜测多次将 Gather Table 统计信息运行到多个表,可能会导致程序出现重大性能问题。我找不到任何资源来支持这个想法。有人可以确认吗?

4

1 回答 1

1

是的,可以确认,已经看到花费 80% 的运行时收集统计信息的代码。鉴于您的限制,我会按以下顺序尝试:

  1. 我会查看这些DELETE语句以检查它们是否可以替换为TRUNCATE TABLE.
  2. 填满表格后收集统计信息,锁定其统计信息并注释掉任何其他gather_table_stats调用。假设每天或每周的数据不会有足够大的差异导致不同的查询计划。
  3. 如果这不起作用,我会尝试DBA_TAB_MODIFICATIONS至少检查表自上次统计数据收集以来是否已进行了足够的更改。
于 2021-04-06T09:48:54.603 回答