我有一个查询(支持 Oracle Application Express 报告),我们的用户告诉我执行“缓慢”或速度不可接受(没有给出页面的实际加载时间,查询是唯一的这页纸)。
该查询涉及许多表,实际上引用了一个流水线函数,该函数识别当前登录到我们网站的用户,并根据我们拥有的自定义安全方案返回他们有权访问的自定义“表”记录。
我的主要问题是关于 Oracle 的查询缓存以及它们如何受到我们设置的影响。
当我从网页中取出查询并在 Sql Developer 中运行它(并手动指定用户 ID 以模拟登录到网站的用户)时,性能从 71 秒到 19 秒到 0.5 秒。显然,Oracle 正在利用其缓存机制来加快后续运行速度。
这是如何受到影响的?:
- 事实上,不同的用户将从管道函数中获得不同的表(所有相同的列,只是不同的行数和行中的值)。管道内衬是否会阻止缓存工作?我只看到缓存是因为我正在运行一个非常孤立的测试吗?
- 更进一步——缓存是否容易受到使用系统的人数的影响?我不确定可以缓存多少“多少”。因此,如果我们有 50 个并发用户正在访问网站的不同部分并整天加载不同的查询,那么 oracle 是否可能无法缓存其中的许多/任何一个,因为它不断地看到不同的请求查询?
抱歉,我的问题不是很技术性。
我是一名开发人员,被要求帮助解决这个看似 DBA 的问题。
此外,这很复杂,因为我无法真正确定实际加载时间是多少,因为我们的用户没有报告那个详细程度。
任何想法:
- 我如何确定这个查询是否真的很慢?
- 平均处理时间是多少?
- 如果出现问题,如何进行微调?
谢谢!