博客
关于我
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 15章 并行查询_15.2. 何时会用到并行查询?...
阅读量:795 次
发布时间:2023-03-03

本文共 1490 字,大约阅读时间需要 4 分钟。

何时会用到并行查询?

并行查询在数据库系统中是一项高级功能,通常用于处理大量并发请求或复杂查询以提高效率。以下是一些常见的场景:

  • 多用户同时访问数据库

    当有多个用户同时执行大量查询时,系统可能会采用并行查询来分散处理压力,避免长时间等待。

  • 处理大数据量

    对于包含大量数据的查询,特别是分布式系统,使用并行查询可以并行处理多个分片,显著减少响应时间。

  • 复杂查询优化

    对于复杂的事务处理或分析查询,采用并行查询可以提高吞吐量,减少瓶颈。

  • 高并发场景

    在高并发应用中,如电商、社交媒体等,实时处理大量请求时,合理利用并行查询可以提升系统性能。


  • 并行查询规划器的设置

    并行查询的效果很大程度上依赖于数据库的配置。以下是一些关键设置:

  • max_parallel_workers_per_gather

    这个设置限制了并行查询时可以使用的后台工作者数量。必须确保这个值设置为一个合理的数值,不能超过数据库可用的CPU核心数。

  • 内存共享设置

    某些数据库系统支持动态共享内存,这对于并行查询中的数据传递至关重要。确保内存共享功能正常工作。

  • 事务隔离级别

    并行查询通常要求使用高隔离级别,以防止数据不一致。现代数据库通常默认支持并行查询,但需要确认事务隔离级别是否设置为支持并行模式。


  • 并行查询的限制条件

    尽管并行查询可以带来显著的性能提升,但在某些情况下可能无法生成并行计划。以下是一些常见原因:

  • 包含数据修改操作

    如果查询中包含任何 ALTER、UPDATE 或 DELETE 等修改操作,当前数据库版本可能无法生成并行计划。这是由于并行查询难以保证数据一致性。

  • 循环结构或复杂逻辑

    使用像 FOR x IN ... LOOP 这样的循环结构或复杂的PL/pgSQL逻辑可能阻止并行查询的生成,因为并行环境难以验证循环的安全性。

  • 用户定义函数(UDF)的标记

    大多数系统函数会被标记为安全的,但用户自定义函数默认通常标记为“非安全并行”(PARALLEL UNSAFE)。如果使用用户定义函数,可能需要谨慎处理。

  • 已存在的并行查询

    如果一个查询被另一个并行查询调用,内部的查询可能无法生成并行计划。

  • 事务隔离级别为串行化

    某些数据库在串行化隔离级别下不支持并行查询,需要确保事务隔离级别设置为支持并行模式。


  • 并行查询执行中的问题

    即使生成了并行计划,在执行过程中也可能出现一些问题:

  • 后台工作者数量不足

    如果后台工作者的总数不能满足并行需求,系统将无法有效并行执行查询。

  • 客户端发送特殊执行消息

    如果客户端发送了包含执行消息且要求返回结果的查询,可能会影响并行执行。这种情况通常发生在不依赖 libpq 的客户端环境中。

  • 事务隔离级别临时更改

    如果在生成并行计划后,事务隔离级别临时更改为串行化,可能会导致执行失败。

  • 准备好的语句

    使用 CREATE TABLE ... AS EXECUTE 语句执行的动态 SQL 可能会破坏并行查询的效果,因为这类操作通常是只读的。

  • 事务隔离级别为串行化

    如果事务隔离级别在执行时临时变为串行化,可能会阻止并行执行。


  • 注意事项

    • 合理配置并行设置:确保 max_parallel_workers_per_gather 和相关参数设置为合理的数值,避免过多或过少的后台工作者。
    • 监控并行执行:在实际应用中,定期监控并行查询的性能表现,及时发现并处理可能的瓶颈。
    • 谨慎使用并行功能:并行查询虽然高效,但也可能带来复杂性和一致性问题,特别是在涉及事务和锁定的场景中。

    如果对并行查询的具体实现细节感兴趣,可以参考数据库文档或相关技术博客,了解更多优化技巧和潜在问题。

    转载地址:http://snxfk.baihongyu.com/

    你可能感兴趣的文章
    ping 命令的七种用法,看完瞬间成大神
    查看>>
    Pinia:$patch的使用场景
    查看>>
    Pinia:$subscribe()的使用场景
    查看>>
    Pinpoint对Kubernetes关键业务模块进行全链路监控
    查看>>
    Pinterest 大规模缓存集群的架构剖析
    查看>>
    pintos project (2) Project 1 Thread -Mission 1 Code
    查看>>
    PinYin4j库的使用
    查看>>
    PIP
    查看>>
    pip install goose-extractor // SyntaxError: Missing parentheses in call to 'print'
    查看>>
    pip install mysqlclient报错
    查看>>
    pip install 出现报asciii码错误的解决
    查看>>
    pip throws TypeError: parse() got an unexpected keyword argument ‘transport_encoding‘ 在尝试安装新软件包时
    查看>>
    pip 下载慢
    查看>>
    pip 升级报错AttributeError: ‘NoneType’ object has no attribute ‘bytes’
    查看>>
    pip 安装opencv-python卡死
    查看>>
    pip 安装出现异常
    查看>>
    Pip 安装失败:需要 SSL
    查看>>
    Pip 安装挂起
    查看>>
    pip 或 pip3 为 Python 3 安装包?
    查看>>
    pip 文件损坏导致 pip无法使用 报错 ImportError: cannot import name 'main' from 'pip._int
    查看>>