GaussDB-优化器GUC参数的Hint

70 阅读2分钟

GaussDB-优化器GUC参数的Hint

功能描述

设置本次查询执行内生效的查询优化相关GUC参数。hint的推荐使用场景可以参考各GUC参数的说明,此处不作赘述。

语法格式

| ``` set( [@queryblock] param value)

| ---------------------------------------- |

#### 参数说明

-   @queryblock请参见[指定Hint所处的查询块Queryblock](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0272.html#ZH-CN_TOPIC_0000001911585745)章节,可省略,表示在当前查询块生效,该hint只在指定为最外层的queryblock时才会生效。

-   param:表示参数名。

-   value:表示参数的取值。

-   目前支持使用hint设置生效的参数有:

    -   布尔类:

        []()[]()enable_bitmapscan、enable_hashagg、enable_hashjoin、enable_indexscan、enable_indexonlyscan、enable_gsiscan、enable_gsitablescan、enable_material、enable_mergejoin、enable_nestloop、enable_index_nestloop、enable_seqscan、enable_sort、enable_tidscan、enable_stream_operator、enable_stream_recursive、enable_broadcast、enable_fast_query_shipping、enable_trigger_shipping、enable_remotejoin、enable_remotegroup、enable_remotelimit、enable_remotesort、enable_inner_unique_opt、enable_invisible_indexes

    -   整型类:

        []()[]()best_agg_plan,query_dop

    -   浮点类:

        []()[]()cost_weight_index、default_limit_rows、seq_page_cost、random_page_cost、cpu_tuple_cost、cpu_index_tuple_cost、cpu_operator_cost、effective_cache_size

    -   字符串类:

        []()[]()node_name

        通过设置node_name可以指定当前的sql下发到node_name对应的DN上去执行。

        示例:

        ```
        select /*+ set(node_name datanode1) */ from table_name;
        ```

        其中,datanode1是从pgxc_node系统表里查询出的数据节点的名称(不用加引号),table_name是表名。该查询表示直接去datanode1上执行查询。

        ![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a8198964a542431e89078a57e112aa22~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771400531&x-signature=3zPXRCrTb30FH0mJff7mWXxMG8o%3D)NOTICE:

        -   node_name只支持在select语句里设置,如果在其他语句里设置将不生效。
        -   node_name只支持设置data node名字,不支持设置coodninator名字。
        -   node_name不支持通过SET语句进行修改,只能用在plan hint里。
        -   node_name不支持通过gs_guc进行修改。
        -   node_name仅支持简单查询语句,不支持带union,union all子查询,多表关联等复杂查询语句。
        -   支持普通用户执行。
        -   不支持与行级访问控制同时使用,同时使用会报错。

![](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9ee37c658b16421390e2dc94887dacda~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1771400531&x-signature=jglf7QGyxmP8y9SiLRTdQbL2tOg%3D)

-   设置不在白名单中的参数,参数取值不合法,或hint语法错误时,不会影响查询执行的正确性。使用explain(verbose on)执行可以看到hint解析错误的报错提示。
-   GUC参数的hint只在最外层查询生效,子查询内的GUC参数hint不生效。
-   视图定义内的GUC参数hint不生效。
-   CREATE TABLE ... AS ...查询最外层的GUC参数hint可以生效。

更多详情请参考GaussDB 文档中心:<https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html>