Trafodion CQD控制查询执行

本文介绍如何在Trafodion数据库中使用CQD语法控制SQL查询的执行计划,包括通过设置HASH_JOIN为关闭状态使查询从HASH JOIN变为MERGE JOIN的具体操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绝大多数的关系型数据库如Oracle、Postgresql等都提供一些方法用来控制SQL语句的执行。之所以要控制执行,是因为数据库的编译器依赖于表的统计信息去选择合适的执行计划。然而表的统计信息并不是每时每刻都准确的,在这种情况下,编译器可能会错误的选择执行计划,从而导致SQL语句执行效率降低。

举个例子,A表和B表关联,正常情况下应该执行HASH JOIN,但由于统计信息不准确或者其他未知原因,通过执行计划发现他们其实走了NESTED LOOP,从而大大增加了执行时间。

拿ORACLE举例,ORACLE中一般采用在查询语句中添加HINT的方式强制修改执行计划,如下,

select /*+ index(t t_ind) */ count(*) from t;
上面这句话表示强制使用索引扫描执行查询。

又比如Postgresql,一般使用SET命令去强制打开或关闭某个功能,如下,

set enable_nestloop off;
select ...
以上表示在执行查询之间关闭NESTLOOP,这样如果是多表关联的话则绝大部分不会采用NL的方式了。

当然,Trafodion数据库也一样,它也提供了一种可以控制查询执行的方法,在Trafodion中使用CQD语法去控制查询的执行。以下就介绍一下CQD的相关用法。


CONTROL QUERY DEFAULT --改变进程执行计划

  • 语法

{CONTROL QUERY DEFAULT | CQD} attribute {'attr-value' | RESET} 

  • 例子

CONTROL QUERY DEFAULT HBASE_MAX_COLUMN_NAME_LENGTH '200';
CONTROL QUERY DEFAULT HBASE_MAX_COLUMN_NAME_LENGTH RESET;

下面通过具体例子来说明,如何通过CQD让两个表关联从HASH_JOIN变为MERGE_JOIN的,

SQL>explain options 'f'
+>select test1.a, test1.b, test2.c
+>from test1 join test2
+>on test1.a = test2.a;

 
LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD   
---- ---- ---- --------------------  --------  --------------------  ---------
 
3    .    4    root                                                  2.00E+000
2    1    3    hybrid_hash_join      u                               2.00E+000
.    .    2    trafodion_scan                  TEST2                 3.00E+000
.    .    1    trafodion_scan                  TEST1                 2.00E+000

--- SQL operation complete.
SQL>cqd hash_joins 'off';
SQL>fc 7
SQL>explain options 'f'
....
SQL>select test1.a, test1.b, test2.c
....
SQL>from test1 join test2
....
SQL>on test1.a = test2.a;
....

 
LC   RC   OP   OPERATOR              OPT       DESCRIPTION           CARD   
---- ---- ---- --------------------  --------  --------------------  ---------
 
3    .    4    root                                                  2.00E+000
1    2    3    merge_join                                            2.00E+000
.    .    2    trafodion_scan                  TEST2                 3.00E+000
.    .    1    trafodion_scan                  TEST1                 2.00E+000

--- SQL operation complete.

SHOWCONTROL --显示设置的CQD

  • 语法

SHOWCONTROL {ALL | [QUERY] DEFAULT [attribute-name[, MATCH {FULL | PARTIAL}]]}
  • 例子

SQL>showcontrol default;


CONTROL QUERY DEFAULT
  HASH_JOINS                            OFF
  GENERATE_EXPLAIN                      ON

--- SQL operation complete.
SQL>showcontrol all;


No CONTROL QUERY SHAPE settings are in effect.

No CONTROL SESSION settings are in effect.

No CONTROL TABLE settings are in effect.

No CONTROL QUERY DEFAULT settings are in effect.

Current DEFAULTS
  AUTO_QUERY_RETRY_WARNINGS             OFF
  BLOCK_TO_PREVENT_HALLOWEEN            ON
  CACHE_HISTOGRAMS_REFRESH_INTERVAL     3600
  CATALOG                               TRAFODION
  COMPRESSION_TYPE                      NONE
  DEFAULT_DEGREE_OF_PARALLELISM         2
  DEF_MAX_HISTORY_ROWS                  1024
  DISPLAY_DIVISION_BY_COLUMNS           OFF
  EXE_MEMORY_LIMIT_PER_CPU              0
  EXPLAIN_DESCRIPTION_COLUMN_SIZE       -1
  HASH_JOINS                            ON
  HIST_AUTO_GENERATION_OF_SAMPLE        OFF
  HIST_MISSING_STATS_WARNING_LEVEL      4
  HIST_NO_STATS_REFRESH_INTERVAL        3600
  HIST_PREFETCH                         ON
  HIST_REMOVE_TRAILING_BLANKS           ON
  HIST_ROWCOUNT_REQUIRING_STATS         50000
  HIST_USE_SAMPLE_FOR_CARDINALITY_ESTIMATION    ON
  INSERT_VSBB                           SYSTEM
  ISOLATION_LEVEL                       READ_COMMITTED
  ISOLATION_LEVEL_FOR_UPDATES           NONE
  JOIN_ORDER_BY_USER                    OFF
  LAST0_MODE                            OFF
  MC_SKEW_SENSITIVITY_THRESHOLD         0.1
  MDAM_NO_STATS_POSITIONS_THRESHOLD     10
  MDAM_SCAN_METHOD                      ON
  MDAM_UNDER_NJ_PROBES_THRESHOLD        0
  MERGE_JOINS                           ON
  MULTI_COMMIT_SIZE                     10000
  MVGROUP_AUTOMATIC_CREATION            ON
  MVQR_REWRITE_ENABLED_OPTION           OFF
  MVQR_REWRITE_LEVEL                    0
  MVQR_REWRITE_SINGLE_TABLE_QUERIES     ON
  MV_AGE
  MV_ALLOW_SELECT_SYSTEM_ADDED_COLUMNS  OFF
  NESTED_JOINS                          ON
  NOT_ATOMIC_FAILURE_LIMIT              32000
  OPI_ERROR73_RETRIES                   10
  OPTIMIZATION_LEVEL                    3
  PARALLEL_NUM_ESPS                     SYSTEM
  POS_ABSOLUTE_MAX_TABLE_SIZE
  PUBLISHING_ROLES
  QUERY_CACHE                           16384
  QUERY_LIMIT_SQL_PROCESS_CPU           0
  RISK_PREMIUM_NJ                       1.0
  RISK_PREMIUM_SERIAL                   1.0
  RISK_PREMIUM_SERIAL_SCALEBACK_MAXCARD_THRESHOLD       10000
  ROBUST_QUERY_OPTIMIZATION             SYSTEM
  SAVE_DROPPED_TABLE_DDL                OFF
  SCHEMA                                SEABASE
  SKEW_EXPLAIN                          ON
  SKEW_ROWCOUNT_THRESHOLD               1000000
  SKEW_SENSITIVITY_THRESHOLD            0.1
  STREAM_TIMEOUT                        -1
  SUBQUERY_UNNESTING                    ON
  TABLELOCK                             SYSTEM
  TIMEOUT                               6000
  TRAF_TRANS_TYPE                       MVCC
  UDR_DEBUG_FLAGS                       0
  UDR_JVM_DEBUG_PORT                    0
  UDR_JVM_DEBUG_TIMEOUT                 0
  UPD_ORDERED                           ON
  USTAT_AUTO_CV_SAMPLE_SLOPE            0.5
  USTAT_AUTO_PRIORITY                   150
  USTAT_MAX_READ_AGE_IN_MIN             5760
  USTAT_MIN_ROWCOUNT_FOR_LOW_SAMPLE     1000000
  USTAT_MIN_ROWCOUNT_FOR_SAMPLE         10000
  USTAT_NECESSARY_SAMPLE_MAX            5000000
  USTAT_OBSOLETE_PERCENT_ROWCOUNT       15
  WMS_CHILD_QUERY_MONITORING            OFF
  WMS_QUERY_MONITORING                  OFF

--- SQL operation complete.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值