Oracle SQL 或 PLSQL 随负载扩展
Posted
技术标签:
【中文标题】Oracle SQL 或 PLSQL 随负载扩展【英文标题】:Oracle SQL or PLSQL scale with load 【发布时间】:2020-09-03 02:00:03 【问题描述】:假设我有查询(它在多个表上有连接)并假设它已经过调整和优化。此查询在具有 N 条记录和查询结果 R 条记录并花费时间 T 的目标数据库/表上运行。现在负载逐渐增加并说目标记录变为 N2,它给出的结果是 R2,所需时间为T2。假设我已经为 Oracle 分配了足够的内存,L2/L1 将接近 T2/T1。意味着负载的比例增加将导致执行时间的比例增加。对于这个问题,让我们说 L2 = 5L1,意味着负载已增加到 5 倍。那么这个查询完成的时间也将是 5 倍或更多,对吧?那么,为了减少时间的比例增长,我们在 Oracle 中是否有选项,比如并行提示等?在 Java 中,我们将作业拆分为多个线程,负载增加 2 倍,工作线程的 2 倍,我们几乎在同一时间完成。因此,随着负载的增加,我们增加了工作线程并相当好地实现了扩展问题。这种事情在 Oracle 中是否可行,或者 Oracle 是否会在后端处理这种事情并通过在内部将负载拆分为并行处理来进行扩展?在这里,我有多核处理器。我会试验一下,但如果有专家意见,它会有所帮助。
【问题讨论】:
【参考方案1】:没有。查询算法不一定是线性增长的。
您可能应该学习一些有关算法和复杂性的知识。但是数据中使用的许多算法都是超线性的。例如,对一组行进行排序的复杂度为 O(n log n),这意味着如果将数据大小加倍,排序所需的时间超过一倍。
索引查找和各种连接算法也是如此。
另一方面,如果您的查询使用 b 树索引查找几行,则复杂度为 O(log n) - 这是次线性的。因此,索引查找的增长速度比数据大小的增长速度要慢。
因此,一般情况下,您不能假设将数据大小增加 n
倍数会对时间产生线性影响。
【讨论】:
它回答了问题,但有一个后续讨论点。一个查询可以有 order by,因为它将是 O(n log n),那么这个查询的执行速度将慢于 O(n) 的比例增长。在这种情况下,我们是否可以选择更好地扩展它? @user3072859 。 . .有时索引可以帮助排序,但这取决于查询和键。以上是关于Oracle SQL 或 PLSQL 随负载扩展的主要内容,如果未能解决你的问题,请参考以下文章
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数