本文为您介绍并行查询的使用限制以及与串行执行结果可能不兼容的地方,帮助您正确使用并行查询功能。

并行查询的使用限制

PolarDB会持续迭代并行查询的能力,目前以下情况暂时无法享受并行查询带来的性能提升:

  • 查询系统表、临时表或非Innodb表。
  • 使用全文索引的查询。
  • 存储过程Procedures。
  • Recursive CTE。
  • Windows Functions(函数本身不能并行计算,但整个查询可以并行)。
  • GIS (函数本身不能并行计算,但整个查询可以并行)。
  • Index Merge。
  • 串行化隔离级别事务内的查询语句。

与串行执行结果可能不兼容的地方

  • 错误提示次数可能会增多

    串行执行中出现错误提示的查询,在并行执行的情况下,可能每个工作线程都会提示错误,导致总体错误提示数增多。

  • 精度问题

    并行查询的执行过程中,可能会出现比串行执行多出中间结果的存储,如果中间结果是浮点型,可能会导致浮点部分精度差别,导致最终结果有细微的差别。

  • 结果集顺序差别

    因为是多线程扫描,返回的结果集可能与执行顺序不一致。例如使用了限制(LIMIT),并且不带ORDER BY的情况下,更容易出现与串行结果顺序不同的现象。

  • 网络包或者中间结果长度超出max_allowed_packet允许的最大长度

    并行查询的执行过程中,相比串行执行可能会多出中间结果。如果中间结果的长度超出了max_allowed_packet定义的最大长度,可能出现错误提示,可以通过增加max_allowed_packet参数的值来解决。如何修改参数请参见设置集群参数