PostgreSQL的标志现代CPU模型具有大量的核心。多年来,一直在向数据库发送查询并行应用程序。哪里有报告查询,处理许多表行,查询使用多个cpu的能力可以帮助我们更快的执行。并行查询在PostgreSQL允许我们利用多个cpu完成报表查询速度。9.6实现的并行查询功能和帮助。从PostgreSQL 9.6报表查询可以使用多个cpu,完成得更快。

的初始实现并行查询执行了三年。并行支持需要更改代码在很多查询执行阶段。PostgreSQL 9.6代码创建了一个基础设施进一步改善。后来的版本扩展并行执行支持其他类型的查询。

限制

  • 不支持并行执行如果所有CPU核已经饱和。从其他查询并行执行偷了CPU时间,增加响应时间。
  • 最重要的是,并行处理显著增加内存使用量WORK_MEM高值,因为每个散列连接或排序操作WORK_MEM数量的内存。
  • 接下来,低延迟OLTP查询不能做出任何与并行执行速度。特别是,查询返回一行可以执行严重当启用并行执行。
  • 开发人员的泉水是tpc - h基准测试。检查如果你有类似的查询最好的并行执行。
  • 并行执行只支持SELECT查询谓词没有锁。
  • 适当的索引可能是一个更好的选择一个平行顺序表扫描。
  • 不支持游标或暂停查询。
  • 窗口的功能和有序集聚合函数非并行。
  • 没有好处的IO-bound工作量。
  • 没有并行排序算法。然而,查询类型仍然可以在某些方面是平行的。
  • 取代CTE(…)与子选择支持并行执行。
  • 目前国外数据包装不支持并行执行(但他们可能!)
  • 不支持全外连接。
  • 客户端设置max_rows禁用并行执行。
  • 如果一个查询使用一个函数,它没有标记为平行的安全,这将是单线程的。
  • SERIALIZABLE事务隔离级别禁用并行执行。

测试环境

PostgreSQL开发团队试图改善tpc - h基准测试查询的响应时间。你可以下载和基准<一个class="external-link" href="https://github.com/tvondra/pg_tpch" rel="nofollow">它适应PostgreSQL通过使用这些指令。这不是一个官方的方式使用tpc - h基准测试,所以你不应该使用它来比较不同的数据库或硬件。

  1. 下载TPC-H_Tools_v2.17.3。邮政编码(或更新版本)<一个href="http://www.tpc.org/tpc_documents_current_versions/current_specifications.asp">从TPC官方网站
  2. 重命名makefile。套件Makefile和按要求修改它<一个href="https://github.com/tvondra/pg_tpch">https://github.com/tvondra/pg_tpch。编译代码和命令
  3. 生成数据:。/ dbgen - s 10生成23 gb的数据库就足以看到不同的并行和非并行查询的性能。
  4. 资源描述文件转换为csv为+ sed
  5. 克隆pg_tpch库和csv文件复制到pg_tpch / dss /数据
  6. 生成与qgen查询命令
  7. 加载数据到数据库。/ tpch。sh命令。

平行顺序扫描

这可能不是因为并行读取更快,但由于散射数据跨多个CPU核心。现代操作系统提供了良好的PostgreSQL数据的缓存文件。预读允许得到一块从存储的不仅仅是要求PG守护进程。因此,查询性能并不局限由于磁盘IO。它消耗CPU周期:

  • 从表数据页面读取行一个接一个
  • 比较行值和条件

让我们试着执行简单的select查询: