LLVM Application Scenarios and Restrictions

Application Scenarios

  • Expressions supporting LLVM

    The query statements that contain the following expressions support LLVM optimization:

    1. Case…when…
    2. IN
    3. Bool (AND/OR/NOT)
    4. BooleanTest (IS_NOT_KNOWN/IS_UNKNOWN/IS_TRUE/IS_NOT_TRUE/IS_FALSE/IS_NOT_FALSE)
    5. NullTest (IS_NOT_NULL/IS_NULL)
    6. Operator
    7. Function
    8. Nullif

    Supported data types for expression computing are bool, tinyint, smallint, int, bigint, float4, float8, numeric, date, time, timetz, timestamp, timestamptz, interval, bpchar, varchar, text, and oid.

    Consider using LLVM only if expressions are used in the following content in a vectorized executor: filter in the Scan node; complicate hash condition, hash join filter, and hash join target in the Hash Join node; filter and join filter in the Nested Loop node; merge join filter and merge join target in the Merge Join node; and filter in the Group node.

  • Operators supporting LLVM

    1. Join: HashJoin
    2. Agg: HashAgg
    3. Sort

    Where HashJoin supports only Hash Inner Join, and the corresponding hash cond supports comparisons between int4, bigint, and bpchar. HashAgg supports sum and avg operations of bigint and numeric data types. Group By statements supports int4, bigint, bpchar, text, varchar, timestamp, and count(*) aggregation operation. Sort supports only comparisons between int4, bigint, numeric, bpchar, text, and varchar data types. Except the preceding operations, LLVM cannot be used. You can use the explain performance tool to check whether LLVM can be used.

Non-applicable Scenarios

  • Tables that have small amount of data cannot be dynamically compiled.
  • Query jobs with a non-vectorized execution path cannot be generated.
Feedback
编组 3备份
    openGauss 2024-10-11 00:55:40
    cancel