Ganos支持利用多个CPU提升查询或计算性能,这种特性被称为并行操作。Ganos支持并行执行SQL语句和并行操作raster对象。
并行执行SQL语句
原理
PostgreSQL支持利用多个CPU生成并行的查询计划,并将执行任务分配到多个CPU上以提升性能。
适用场景
SQL语句并行执行非常适合在大量的raster对象中过滤出符合空间范围要求或属性要求的raster对象,能够极大地降低查询时间。
适用范围
所有Ganos Raster的只读函数(例如属性查询)都支持并行查询。
并行操作Raster对象
原理
通常情况下raster对象并行操作技术可以应用于单个raster对象的操作过程,通过多个CPU并行计算raster对象中的子集内容,从而降低整个raster对象的操作时间。每个子集内容的计算均独立运行,当所有子集执行完成,整个raster对象并行操作过程也同时结束。
适用场景
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参数中指定该块表。