Trafodion CQD控制查询执行

来源:互联网 发布:图片显示软件下载 编辑:程序博客网 时间:2024/05/16 14:20

绝大多数的关系型数据库如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+0002    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 7SQL>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+0001    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.


1 0
原创粉丝点击