gpt4 book ai didi

c# - 减少 Oracle 中的解析调用

转载 作者:太空狗 更新时间:2023-10-29 20:31:52 25 4
gpt4 key购买 nike

我注意到 parse_calls 等于我们 Oracle 11g 数据库中的执行次数。

 select parse_calls, executions
from v$sql order by parse_calls desc;

运行上述查询会得到以下结果。

"PARSE_CALLS" "EXECUTIONS"
87480 87480
87475 87476
87044 87044
26662 26662
21870 21870
21870 21870

据我所知,这是一个主要的性能缺陷。所有这些 SQL 语句要么是存储过程,要么使用绑定(bind)变量。我还重用了从 C# 调用存储过程的命令对象。

如何减少其中的解析调用次数?

还有,有什么方法可以区分硬解析和软解析吗?

编辑:

正如@DCookie 提到的,我对数据库运行了以下查询。

SELECT s2.name, SUM(s1.value)
FROM v$sesstat s1 join v$statname s2 on s1.statistic# = s2.statistic#
WHERE s2.name LIKE '%parse count%'
GROUP BY s2.name
ORDER BY 1,2;

结果如下

"NAME"                         "SUM(S1.VALUE)"
"parse count (describe)" 0
"parse count (failures)" 29
"parse count (hard)" 258
"parse count (total)" 11471

所以硬解析的数量与解析的数量相比似乎很低。感谢大家的回复:)

最终更新:

解析的主要问题是因为我们在连接字符串中关闭了连接池。打开连接池后,我能够完全解决解析问题。

最佳答案

从这里开始:

SELECT name, SUM(value)
FROM v$sesstat s1 join v$statname s2 on s1.statistic# = s2.statistic#
WHERE s1.name LIKE '%parse count%'
GROUP BY name
ORDER BY 1,2;

这将为您提供硬解析数和总解析数。查询中的 parse_calls 值是硬解析和软解析的总和。

你的 SQL 是做什么的?游标处理不多,主要是单个语句?执行与解析的比率几乎为 1-1,如果它们是软解析,则意味着您没有进行太多游标处理。

编辑:

除非您可以修改您的代码以打开并卡在每个 SQL 语句的游标上,并在 session 中尽可能多地重用它们,否则我认为您无法避免解析。

关于c# - 减少 Oracle 中的解析调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com