gpt4 book ai didi

performance - 谁能解释一下oracle "hash group"是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 09:02:25 24 4
gpt4 key购买 nike

我最近遇到了一个在 Oracle 中进行大型查询的功能,其中更改一件事导致原来需要 10 分钟的查询变成了 3 个小时。

简单总结一下,我在数据库中存储了很多坐标,每个坐标都有一个概率。然后,我想将这些坐标“分箱”到 50 米的箱中(基本上将坐标四舍五入到最近的 50 米)并对概率求和。

为此,查询的一部分是“select x,y,sum(probability) from .... group by x,y”

最初,我存储了大量概率为 0.1 的点,查询运行得相当不错,每个点大约需要 10 分钟。

然后我请求更改概率的计算方式以调整分布,因此它们不是全部为 0.1,而是不同的值(例如 0.03、0.06、0.12、0.3、0.12、0.06、0.03)。运行完全相同的查询导致查询时间约为 3 小时。

全部改回 0.1 会使查询时间恢复到 10 分钟。

查看系统的查询计划和性能,问题似乎出在旨在加速 Oracle 中分组速度的“哈希组”功能上。我猜测它是为每个唯一的 x,y, 概率值创建哈希条目,然后对每个唯一的 x,y 值的概率求和。

谁能更好地解释这种行为?

其他信息

感谢各位的解答。他们让我核实发生了什么事。我当前正在运行查询,v$sql_workarea_active 中的 tempseg_size 目前为 7502561280,并且正在快速增长。

鉴于我运行的开发服务器只有 8GB 内存,看起来查询需要使用临时表。

我现在已经设法通过更改查询类型并预先计算一些信息来解决此问题。

最佳答案

哈希组(和哈希连接,以及其他操作,例如排序等)可以使用最佳(即内存中)、单遍或多遍方法。最后两种方法使用 TEMP 存储,因此速度要慢得多。

通过增加可能的项目数量,您可能会超出为此类操作保留的内存中容纳的项目数量。

尝试在查询运行时查看 v$sql_workarea_active,看看是否是这种情况。或者查看 v$sql_workarea 以获取历史信息。它还会告诉您操作需要多少内存和/或临时空间。

如果事实证明是实际问题 - 如果可能,请尝试增加 pga_aggregate_target 初始化参数。可用于最佳散列/排序操作的内存量通常约为 pga_aggregate_target 的 5%。

请参阅Performance Tuning Guide了解更多详情。

关于performance - 谁能解释一下oracle "hash group"是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154722/

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