本章节介绍了如何快速使用弹性并行查询。
注意事项
只读节点和主节点都支持并行查询功能。主节点上并行查询默认关闭。
开启并行查询
在控制台基本信息的集群地址区域,单击编辑配置,打开编辑地址配置页面,设置并行度参数及并行引擎,开启并行查询。具体操作请参见配置数据库代理的并行查询说明。
并行查询推荐设置以及相关说明如下:
多机并行引擎可以根据查询代价以及集群实时负载情况自适应弹性调度,建议开启多机并行以获得更优的加速效果。
并行度参数从低到高逐渐增加,建议不要超过CPU核数的四分之一 。例如,刚开始使用并行查询时,设置并行度参数为2,试运行一天后,如果CPU压力不大,可以持续上调;如遇到CPU压力较大,停止上调。
并行度为单个查询在单计算节点内最大允许同时运行的worker线程数,如果选择多机并行,单个查询最大允许同时运行的线程数=并行度×节点个数。
打开并行查询功能时, 需要设置innodb_adaptive_hash_index参数为OFF,innodb_adaptive_hash_index参数开启会影响并行查询的性能。
如果控制台页面未开启并行查询,但系统参数max_parallel_degree被设置为大于0时,相当于默认开启了单机并行。
如果控制台和系统参数max_parallel_degree均有设置,则以控制台参数配置为准,故建议使用控制台开启并行查询。
关闭并行查询
在控制台基本信息的集群地址区域,单击编辑配置,打开编辑地址配置页面,可关闭并行查询,具体操作请参见配置数据库代理。
控制台关闭并行查询后,需要确认系统参数max_parallel_degree同时为0,确保并行查询被完全关闭。
通过Hint来控制并行查询
使用Hint语法可以对单个语句进行控制,例如系统默认关闭并行查询情况下,但需要对某个高频的慢SQL查询进行加速,此时就可以使用Hint对特定SQL进行加速。详情内容请参见并行查询Hint语法。
设置阈值控制优化器是否选择并行执行
PolarDB提供了两个阈值来控制优化器是否选择并行执行,SQL语句只要满足其中任意一个条件,优化器就会考虑并行执行。
records_threshold_for_parallelism
若优化器估算出语句中存在扫描记录数超过该阈值的表,优化器会考虑选择并行执行计划。默认值为10000。若您的业务量较小或复杂查询业务并发较低,您可以选择将该阈值设置为2000或以上。
说明上文提到的扫描记录数是根据对应表的统计信息进行估算得出的值,可能存在一定的误差。
cost_threshold_for_parallelism
若优化器估算查询的串行执行代价超过该阈值,优化器会考虑选择并行执行计划。默认值为50000。
设置阈值控制多机并行引擎的自适应弹性调度
PolarDB提供了两个阈值来控制是否选择多机并行,SQL语句只要满足如下任意一个条件,并行查询会考虑弹性扩展为多机并行。
records_threshold_for_mpp
若查询语句中存在扫描记录超过该阈值的表,优化器会考虑将单机并行弹性扩展为多机并行,将并行任务调度到多个节点上同时完成计算。默认值为records_threshold_for_parallelism的N倍,N值为当前集群地址内的节点个数。
cost_threshold_for_mpp
若查询语句的串行执行代价超过该阈值,优化器会考虑弹性扩展为多机并行。默认值为cost_threshold_for_parallelism的N倍,N值为当前集群地址内的节点个数。