并行操作

Ganos支持利用多个CPU提升查询或计算性能,这种特性被称为并行操作。Ganos支持并行执行SQL语句和并行操作raster对象。

并行执行SQL语句

  • 原理

    PostgreSQL支持利用多个CPU生成并行的查询计划,并将执行任务分配到多个CPU上以提升性能。

  • 适用场景

    SQL语句并行执行非常适合在大量的raster对象中过滤出符合空间范围要求或属性要求的raster对象,能够极大地降低查询时间。

  • 适用范围

    所有Ganos Raster的只读函数(例如属性查询)都支持并行查询。

并行操作Raster对象

使用前准备工作

  • 设置Prepared状态最大事务数

    通过参数max_prepared_transactions设置Prepared状态最大事务数。该参数默认值为0,建议设置为与max_connections参数一样,确保每个连接都有一个Prepared事务可以处理。

    说明

    修改本参数后需要重启实例。

  • 设置并行度

    如果支持并行操作的函数未指定并行度或指定并行度为0,则使用GUC(Grand Unified Configuration)参数ganos.parallel.degree的值作为默认的并行度。ganos.parallel.degree参数默认值为1, 表示不支持并行执行。

    您也可以在支持并行操作的函数中指定并行度参数为一个正整数,可以将raster对象的计算任务拆分为并行任务执行。示例如下:

    select ST_ImportFrom('chunk_table','OSS://<akxxxx>:<ak_secretxxxx>@oss-cn-beijing-internal.aliyuncs.com/mybucket/data/image.nc:hcc', '{}', '{"parallel": 4}');
  • 设置事务一致性

    GUC参数ganos.parallel.transaction用于指定并行事务级别,取值如下:

    • transaction_commit(默认值):支持并行事务根据主事务进行提交或回滚。

    • fast_commit:不支持并行事务回滚。

说明
  • 您可以使用ST_CreateChunkTable函数预先创建块表以达到最佳性能。

  • 如果并行函数结果不支持匿名临时块表,请预先创建块表并在存储选项中的chunktable参数中指定该块表。