华为云用户手册

  • plan_mode_seed 参数说明:该参数为调测参数,目前仅支持OPTIMIZE_PLAN和RANDOM_PLAN两种。 参数类型:整型 参数单位:无 取值范围:-1 ~ 2147483647 0:表示OPTIMIZE_PLAN模式,即通过动态规划算法进行代价估算生成最优plan。 -1:表示RANDOM_PLAN模式,即随机生成plan,且用户不指定生成随机数的种子标识符seed值,由优化器随机生成[1, 2147483647]范围内的整数值,并根据随机数生成随机的执行计划。 [1, 2147483647]范围内的整数值:表示RANDOM_PLAN模式,即随机生成plan,且用户指定的生成随机数的种子标识符seed值,优化器根据seed值生成随机的执行计划。 默认值:0
  • costbased_rewrite_rule_max_iterations 参数说明:执行的SQL在计划生成阶段时,如果对同一规则中满足做代价评估的条件数超过该参数的取值,则对本次请求中超过阈值的条件关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。 参数类型:整型 参数单位:无 取值范围:0 ~ 1000 默认值:10 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。
  • enable_global_plancache 参数说明:设置是否对PBE查询和存储过程中语句的执行计划进行缓存共享,开启该功能可以节省高并发下CN和DN上的内存使用。 在打开enable_global_plancache的情况下,为保证GPC生效,默认local_syscache_threshold不小于16MB。即如果当前local_syscache_threshold小于16MB,则设置为16MB,如大于16MB,则不改变。 参数类型:布尔型 参数单位:无 取值范围: on:表示对PBE查询和存储过程中语句的执行计划进行缓存共享。 off:表示不共享。 默认值:off 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。该参数在CN和DN上必须保持一致。 设置不当的风险与影响:CN和DN上该参数设置不一致会使得CN下发给DN的报文不匹配,从而导致报错等问题。
  • enable_gpc_grayrelease_mode 参数说明:分布式集群下,开启GPC需要重启集群。如果需要在不重启集群的情况下开启GPC,需要用enable_gpc_grayrelease_mode控制滚动开启GPC或关闭GPC。 分布式集群上操作方式。 开启GPC: 在所有DN节点开启enable_gpc_grayrelease_mode。 在所有CN节点开启enable_gpc_grayrelease_mode。 开启GPC参数,由于GPC是POSTMASTER参数,需要先reload参数,之后轮询kill节点,使重新拉起的节点上GPC生效。 关闭GPC: 首先确定enable_gpc_grayrelease_mode是on的状态,reload关闭GPC参数,然后轮询kill节点,使重新拉起的节点上GPC生效。 在所有CN节点关闭enable_gpc_grayrelease_mode。 在所有DN节点关闭enable_gpc_grayrelease_mode。 参数类型:布尔型 参数单位:无 取值范围: on:滚动开启GPC。 off:关闭GPC。 默认值:off 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数打开会影响pbe报文收发逻辑,需严格按照参数说明指定顺序设置,避免不合理报错。
  • cost_param 参数说明:该参数用于控制在特定的客户场景中,使用不同的估算方法,使得代价模型估算更准确。通过将参数修改为不同的值,选择开启不同的方法。此参数可以同时控制多种方法,每一种方法由不同的数字编号控制,参数取值与方法对应的数字编号做“与”操作的结果不为0时,表示该方法开启。 当cost_param & 1不为0,表示对于求不等值连接选择率时选择一种改良机制,此方法在自连接(两个相同的表之间连接)的估算中更加准确。当前版本已弃用cost_param & 1不为0时的路径,默认选择更优的估算公式。 当cost_param & 2不为0,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。 当cost_param & 4不为0,表示在进行stream节点估算时,选用调试模型,该模型不推荐用户使用。 参数类型:整型 参数单位:无 取值范围:0 ~ 2147483647‬ 默认值:0 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:在明确需要调整选择率的场景后,设置对应参数值。 设置不当的风险与影响:设置不当可能会导致最终的代价估算不符合预期,建议在充分测试后确认应当设置的参数值。
  • costbased_rewrite_rule_timeout 参数说明:执行的SQL在计划生成阶段时,如果使用各规则做代价评估的整体时间超过该参数设置的超时时间,则对本次请求后续流程关闭基于代价的评估策略,转化为基于规则的改写策略。当查询改写阶段开启基于代价的评估策略后该参数生效。 参数类型:整型 参数单位:毫秒(ms) 取值范围:-1 ~ 300000 默认值:-1 该参数受GUC参数costbased_rewrite_rule影响,当costbased_rewrite_rule值不为none时,该参数生效。 如果设置该参数值为0,表示对当前SQL关闭基于代价的改写策略。 如果设置该参数值为-1,表示对当前SQL关闭超时时间控制。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:可根据实际业务需求评估调整,当该值设置过大或过小时都可能带来额外的性能开销,影响最终的查询性能。
  • gpc_clean_timeout 参数说明:本参数用于控制不使用的共享计划的保留时间。在开启enable_global_plancache的情况下,如果共享计划列表里的计划超过gpc_clean_timeout的时间没有被使用,则会被清理掉。 参数类型:整型 参数单位:秒(s) 取值范围:300 ~ 86400 默认值:1800(即30min) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。例如,设置为300,不带单位,表示300s;设置为30min,带单位,表示30min。取值如果要带单位,必须为s、min、h、d。 设置建议:推荐使用默认值。 设置不当的风险与影响:设置过大可能导致GPC占用内存过多,建议充分测试后设置合理值。
  • enable_partition_pseudo_predicate 参数说明:在指定分区查询场景下,是否使用伪谓词改写的方式计算指定分区查询的选择率。 参数类型:布尔型 参数单位:无 取值范围: on:表示使用伪谓词改写。 off:表示不使用伪谓词改写。 默认值:off 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • enable_pbe_optimization 参数说明:设置优化器是否对以PBE(Parse Bind Execute)形式执行的语句进行查询计划的优化,优化原理是使FQS选择gplan计划。 参数类型:布尔型 参数单位:无 取值范围: on:表示优化器将优化PBE语句的查询计划,在FQS下选择gplan。 off:表示不使用优化。 默认值:on 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值,在不希望FQS选择gplan时可设置为off。 设置不当的风险与影响:关闭可能会导致某些场景走cplan。
  • enable_light_proxy 参数说明:设置优化器是否对CN上简单查询的执行进行优化,应用端和内核端字符集不匹配时,该参数不生效,建议建库时将字符集设为UTF8。 参数类型:布尔型 参数单位:无 取值范围: on:表示优化器将优化CN上简单查询的执行。 off:表示不使用优化。 默认值:on 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭后可能会导致简单查询执行压力集中在CN上。
  • enable_stream_pbe 参数说明:设置优化器在数据节点上是否对STREAM分布式计划使用缓存执行计划的优化。 参数类型:布尔型 参数单位:无 取值范围: on:表示优化器在数据节点上对STREAM分布式计划使用缓存执行计划的优化。 off:表示不使用优化。 默认值:on 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:关闭后可能会增加生成计划的开销。
  • enable_partitionwise 参数说明:分区表连接操作是否选择智能算法。 参数类型:布尔型 参数单位:无 取值范围: on:表示选择智能算法。 off:表示不选择智能算法。 默认值:off 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:打开前确认是否开启SMP,否则可能影响非SMP场景下分区表Join操作的性能。
  • analysis_options 参数说明:通过开启对应选项使用相应的定位功能,包括数据校验,性能统计等,具体参见取值范围中的描述。 参数类型:字符串 参数单位:无 取值范围: 该参数每次设置将会通过集合操作的方式对当前值做修改: gaussdb=# show analysis_options; analysis_options ------------------------------------------------------------ ALL,on(),off(LLVM_COMPILE,HASH_CONFLICT,STREAM_DATA_CHECK) (1 row) gaussdb=# SET analysis_options = 'on(LLVM_COMPILE)'; SET gaussdb=# show analysis_options; analysis_options ----------------------------------------------------------- ALL,on(LLVM_COMPILE),off(HASH_CONFLICT,STREAM_DATA_CHECK) (1 row) gaussdb=# SET analysis_options = 'on(HASH_CONFLICT)'; SET gaussdb=# show analysis_options; analysis_options ----------------------------------------------------------- ALL,on(LLVM_COMPILE,HASH_CONFLICT),off(STREAM_DATA_CHECK) (1 row) gaussdb=# SET analysis_options = 'off(ALL)'; SET gaussdb=# show analysis_options; analysis_options ------------------------------------------------------------ ALL,on(),off(LLVM_COMPILE,HASH_CONFLICT,STREAM_DATA_CHECK) (1 row) LLVM_COMPILE:表示在explain performance显示界面中显示每个线程的codegen编译时间。 HASH_CONFLICT:表示在DN进程的gs_log目录的log日志中显示hash表的统计信息,包括hash表大小、hash链长、hash冲突情况。 STREAM_DATA_CHECK:表示对网络传输前后的数据进行CRC校验。 默认值:off(ALL),表示不开启任何定位功能。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如需手动设置,需要明确预期显示的结果是否符合需求。
  • enable_remotelimit 参数说明:控制是否允许将LIMIT子句执行计划下推到DN执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许将LIMIT子句执行计划下推到DN执行。 off:表示不允许将LIMIT子句执行计划下推到DN执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果查询涉及到对大数据量的快速裁剪,并且数据分布在多个节点上,关闭此参数可能会降低查询性能。
  • enable_remotesort 参数说明:控制是否允许将ORDER BY子句操作计划下推到DN执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许将ORDER BY子句操作计划下推到DN执行。 off:表示不允许将ORDER BY子句操作计划下推到DN执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果查询涉及到大量数据的排序,并且数据分布在多个数据节点上,关闭该参数可能会带来性能的下降。
  • enable_trigger_shipping 参数说明:控制触发器场景是否允许将触发器下推到DN执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许将触发器下推到DN执行。 off:表示不允许将触发器下推到DN执行,在CN执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:若关闭该参数,会将性能负载集中在CN节点,不能最大化利用集群性能,建议打开该参数。
  • enable_rep_table_strict_shipping 参数说明:进行复制表DML操作时,控制在复制表的下推充要条件判断失败时的行为。 参数类型:布尔型 参数单位:无 取值范围: on:表示进行复制表DML操作时,如果对复制表的下推充要条件判断失败,则禁止下推。 off:表示进行复制表DML操作时,如果对复制表的下推充要条件判断失败,不禁止下推,仅在日志中打印提示信息。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改,避免出现意料之外的结果。
  • enable_csqual_pushdown 参数说明:设置进行查询时,是否要将过滤条件下推,进行Rough Check。 参数类型:布尔型 参数单位:无 取值范围: on:表示进行查询时,将过滤条件下推,进行Rough Check。 off:表示进行查询时,不将过滤条件下推,进行Rough Check。 默认值:on 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果查询涉及大量数据的过滤,并且这些数据分布在不同的节点上,关闭过滤条件下推可能会带来性能的下降。
  • explain_perf_mode 参数说明:此参数用来指定explain的显示格式。 参数类型:枚举类型 参数单位:无 取值范围:normal、pretty、summary、run normal:代表使用默认的打印格式。 pretty:代表使用 GaussDB 改进后的新显示格式。新的格式层次清晰,计划包含了plan node id,性能分析简单直接。 summary:是在pretty的基础上增加了对打印信息的分析。 run:在summary的基础上,将统计的信息输出到csv格式的文件中,以便于进一步分析。 默认值:pretty pretty模式当前只支持包含stream算子的计划,不支持下发语句到DN节点的计划。因此显示格式会受enable_stream_operator参数影响,当enable_stream_operator设置为off时无法生成包含stream算子的计划。
  • enable_fast_query_shipping 参数说明:控制查询优化器是否使用分布式框架。 参数类型:布尔型 参数单位:无 取值范围: on:表示执行计划在CN和DN上各自生成。 off:表示使用分布式框架,即执行计划在CN上生成,然后发送到DN中执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:若关闭该参数,可能导致生成的计划不能更高效地利用分布式集群性能,建议打开该参数。
  • enable_remotejoin 参数说明:控制是否允许将连接操作计划下推到DN执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许将连接操作计划下推到DN执行。 off:表示不允许将连接操作计划下推到DN执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果参与JOIN的表数据量很大,这些数据已经根据JOIN条件分散在不同的数据节点上,并且数据节点具备足够的计算资源,可以在本地高效地完成JOIN操作,那么关闭该参数将可能会带来查询性能的下降。
  • enable_remotegroup 参数说明:控制是否允许将group by与aggregates执行计划下推到DN执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许将group by与aggregates执行计划下推到DN执行。 off:表示不允许将group by与aggregates执行计划下推到DN执行。 默认值:on 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:如果查询涉及到大量数据的分组,并且数据分布在多个数据节点上,关闭该参数可能会带来查询性能的下降。
  • cost_model_version 参数说明:此参数用来指定优化器代价模型的版本。可以视作一个保护参数,用来禁用最新的优化器代价模型,保持和旧版本计划一致。 参数类型:整型 参数单位:无 取值范围:0、1、2、3、4、5 0:表示使用最新的cost估算模型。当前版本等价于5。 1:表示使用原始的cost估算模型。 2:表示在1的基础上,使用增强的coalesce表达式估算、hash join代价估算、semi/anti join代价估算。 3:表示在2的基础上,使用边界矫正估计器估算NDV,indexscan的hint可以作用于indexonlyscan。 4:表示在3的基础上,使用分区级统计信息参与代价估算。 5:表示在4的基础上,增强outer join计算Filter的代价估算,使得基于代价的查询重写更加准确;增强计算选择率时对outer join外表的filter条件的计算优化,可用enable_poisson_outer_optimization参数单独控制。 默认值:0 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:数据库升级时,建议和升级前版本保持一致;新安装环境时,建议设置为默认值。 设置不当的风险与影响:改变此参数,可能会导致很多SQL计划的改变,因此修改前请谨慎评估。
  • 选择分区方案 当表中的数据量很大时,应当对表进行分区,一般需要遵循以下原则: 使用具有明显区间性的字段进行分区,比如日期、区域等字段上建立分区。 分区名称应当体现分区的数据特征。例如,关键字+区间特征。 将分区上边界的分区值定义为MAXVALUE,以防可能出现的数据溢出。 表2 表的分区方式及使用场景 分区方式 描述 Range 表数据通过范围进行分区。 List 表数据通过指定列按照具体值进行分区。 Hash 表数据通过Hash散列方式进行分区。 典型的分区表定义如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 --创建Range分区表。 CREATE TABLE staffS_p1 ( staff_ID NUMBER(6) not null, FIRST_NAME VARCHAR2(20), LAST_NAME VARCHAR2(25), EMAIL VARCHAR2(25), PHONE_NUMBER VARCHAR2(20), HIRE_DATE DATE, employment_ID VARCHAR2(10), SALARY NUMBER(8,2), COMMISSION_PCT NUMBER(4,2), MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) PARTITION BY RANGE (HIRE_DATE) ( PARTITION HIRE_19950501 VALUES LESS THAN ('1995-05-01 00:00:00'), PARTITION HIRE_19950502 VALUES LESS THAN ('1995-05-02 00:00:00'), PARTITION HIRE_maxvalue VALUES LESS THAN (MAXVALUE) ); --创建List分区表。 CREATE TABLE test_list (col1 int, col2 int) partition by list(col1) ( partition p1 values (2000), partition p2 values (3000), partition p3 values (4000), partition p4 values (5000) ); --创建Hash分区表。 CREATE TABLE test_hash (col1 int, col2 int) partition by hash(col1) ( partition p1, partition p2 ); 更多的表分区语法信息请参见CREATE TABLE PARTITION。
  • 选择分布方案 表的分布方式的选择如表2 表的分布方式及使用场景所示。 表1 表的分布方式及使用场景 分布方式 描述 适用场景 Hash 表数据通过Hash方式散列到集群中的所有DN上。 数据量较大的事实表。 Replication 集群中每一个DN都有一份全量表数据。 维度表、数据量较小的事实表。 Range 表数据对指定列按照范围进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 List 表数据对指定列按照具体值进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 典型的分布表定义如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 --定义一个表,表中每行存在所有DN中。 CREATE TABLE warehouse_d1 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY REPLICATION; --定义一个表,使用HASH分布。 CREATE TABLE warehouse_d2 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2), CONSTRAINT W_CONSTR_KEY3 UNIQUE(W_WAREHOUSE_SK) )DISTRIBUTE BY HASH(W_WAREHOUSE_SK); --定义一个表,使用RANGE分布。 CREATE TABLE warehouse_d3 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY RANGE(W_WAREHOUSE_ID) ( SLICE s1 VALUES LESS THAN (10) DATANODE dn1, SLICE s2 VALUES LESS THAN (20) DATANODE dn2, SLICE s3 VALUES LESS THAN (30) DATANODE dn3, SLICE s4 VALUES LESS THAN (MAXVALUE) DATANODE dn4 ); --定义一个表,使用LIST分布。 CREATE TABLE warehouse_d4 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )DISTRIBUTE BY LIST(W_COUNTRY) ( SLICE s1 VALUES ('USA') DATANODE dn1, SLICE s2 VALUES ('CANADA') DATANODE dn2, SLICE s3 VALUES ('UK') DATANODE dn3, SLICE s4 VALUES (DEFAULT) DATANODE dn4 );
  • 选择分布键 分布表的分布键选择至关重要,如果分布键选择不当,可能会导致数据倾斜,从而导致查询时,I/O负载集中在部分DN上,影响整体查询性能。因此,在确定分布表的分布策略之后,需要对表数据进行倾斜性检查,以确保数据的均匀分布。分布键的选择一般需要遵循以下原则: 选作分布键的字段取值应该比较离散,以便数据能在各个DN上均匀分布。当单个字段无法满足离散条件时,可以考虑使用多个字段一起作为分布键。一般情况下,可以考虑选择表的主键作为分布键。例如,在人员信息表中选择证件号码作为分布键。 在满足第一条原则的情况下,尽量不要选取在查询中存在常量过滤条件的字段作为分布键。例如,在表dwcjk相关的查询中,字段zqdh存在常量过滤条件“zqdh='000001'”,那么尽量不选择zqdh字段作为分布键。 在满足前两条原则的情况,尽量选择查询中的关联条件为分布键。当关联条件作为分布键时,join任务的相关数据都分布在DN本地,将极大减少DN之间的数据流动代价。
  • 存储过程 商业规则和业务逻辑可以通过程序存储在GaussDB中,这个程序就是存储过程。 存储过程是SQL、PL/SQL和Java语句的组合。存储过程使执行商业规则的代码可以从应用程序中移动到数据库。从而,代码存储一次能够被多个程序使用。 存储过程的创建及调用办法请参考CREATE PROCEDURE。 PL/SQL语言函数节所提到的PL/SQL语言创建的函数与存储过程的应用方法相通。下面各节中,除非特别声明,否则内容通用于存储过程和PL/SQL语言函数。 父主题: 存储过程
  • 规格约束 告警字符串长度上限为2048。如果告警信息超过这个长度(例如存在大量未收集统计信息的超长表名、列名等信息)则不告警,只上报warning: WARNING, "Planner issue report is truncated, the rest of planner issues will be skipped" 如果query存在limit节点(即查询语句中包含limit),则不会上报limit节点以下的Operator级别的告警。 对于“数据倾斜”和“估算不准”两种类型告警,在某一个plan树结构下,只上报下层节点的告警,上层节点不再重复告警。主要是因为这两种类型的告警可能是因为底层触发上层的。例如,如果在scan节点已经存在数据倾斜,那么在上层的hashagg等其他算子很可能也出现数据倾斜。
  • 告警场景 目前支持对以下7种导致性能问题的场景上报告警。 多列/单列统计信息未收集 如果存在单列或者多列统计信息未收集,则上报相关告警。 告警信息示例: 整表的统计信息未收集: Statistic Not Collect: schema_test.t1 单列统计信息未收集: Statistic Not Collect: schema_test.t2(c1,c2) 多列统计信息未收集: Statistic Not Collect: schema_test.t3((c1,c2)) 单列和多列统计信息未收集: Statistic Not Collect: schema_test.t4(c1,c2) schema_test.t4((c1,c2)) SQL不下推 对于不下推的SQL,尽可能详细上报导致不下推的原因。调优方法请参见语句下推调优。 对于函数导致的不下推,告警导致不下推的函数名信息; 对于不支持下推的语法,会告警对应语法不支持下推,例如:含有With Recursive、Distinct On、row表达式和返回值为record类型的,会告警相应语法不支持下推等。 告警信息示例: SQL is not plan-shipping, reason : "With Recursive" can not be shipped" SQL is not plan-shipping, reason : "Function now() can not be shipped" SQL is not plan-shipping, reason : "Function string_agg() can not be shipped" HashJoin中大表做内表 如果在表连接过程中使用了Hashjoin,且连接的内表行数是外表行数的10倍或以上,同时内表在每个DN上的平均行数大于10万行,且发生了下盘,则上报相关告警。调优方法请参见使用plan hint调优执行计划。 告警信息示例: PlanNode[7] Large Table is INNER in HashJoin “Vector Hash Aggregate” 大表等值连接使用Nestloop 如果在表连接过程中使用了nestloop,并且两个表中较大表的行数平均每个DN上的行数大于10万行,表的连接中存在等值连接,则上报相关告警。调优方法请参见使用plan hint调优执行计划。 告警信息示例: PlanNode[5] Large Table with Equal-Condition use Nestloop"Nested Loop" 大表Broadcast 如果在Broadcast算子中,平均每DN的行数大于10万行,则告警大表broadcast。调优方法请参见使用plan hint调优执行计划。 告警信息示例: PlanNode[5] Large Table in Broadcast "Streaming(type: BROADCAST dop: 1/2)" 数据倾斜 某表在各DN上的分布,存在某DN上的行数是另一DN上行数的10倍或以上,且有DN中的行数大于10万行,则上报相关告警。 告警信息示例: PlanNode[6] DataSkew:"Seq Scan", min_dn_tuples:0, max_dn_tuples:524288 估算不准 如果优化器的估算行数和实际行数中的较大值平均每DN行数大于10万行,并且估算行数和实际行数中较大值是较小值的10倍或以上,则上报相关告警。调优方法请参见使用plan hint调优执行计划。 告警信息示例: PlanNode[5] Inaccurate Estimation-Rows: "Hash Join" A-Rows:0, E-Rows:52488
  • 定时任务管理 创建测试表。 1 gaussdb=# CREATE TABLE test(id int, time date); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 创建自定义存储过程。 1 2 3 4 5 6 7 8 9 gaussdb=# CREATE OR REPLACE PROCEDURE PRC_JOB_1() AS N_NUM integer :=1; BEGIN FOR I IN 1..1000 LOOP INSERT INTO test VALUES(I,SYSDATE); END LOOP; END; / 当结果显示为如下信息,则表示创建成功。 1 CREATE PROCEDURE 创建任务。 新创建的任务(未指定job_id)表示每隔1分钟执行一次存储过程PRC_JOB_1。 1 2 3 4 5 gaussdb=# call dbe_task.submit('call public.prc_job_1(); ', sysdate, 'interval ''1 minute''', :a); id ----- 1 (1 row) 指定job_id创建任务,其中job_id可用范围为1~32767。 1 2 3 4 5 gaussdb=# call dbe_task.id_submit(1,'call public.prc_job_1(); ', sysdate, 'interval ''1 minute'''); id_submit ---------- (1 row) 通过视图查看当前用户已创建的任务信息。 1 2 3 4 5 gaussdb=# select job,dbname,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from my_jobs; job | dbname | start_date | last_date | this_date | next_date | broken | status | interval | failures | what -----+--------+---------------------+----------------------------+----------------------------+---------------------+--------+--------+---------------------+----------+--------------------------- 1 | testdb | 2017-07-18 11:38:03 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:53:03.607838 | 2017-07-18 13:54:03 | n | s | interval '1 minute' | 0 | call public.prc_job_1(); (1 row) 停止任务。 1 2 3 4 5 gaussdb=# call dbe_task.finish(1,true); finish -------- (1 row) 启动任务。 1 2 3 4 5 gaussdb=# call dbe_task.finish(1,false); finish -------- (1 row) 修改任务属性。 修改JOB的next_time参数信息。 1 2 3 4 5 6 --修改Job1的next_time为1小时以后开始执行。 gaussdb=# call dbe_task.next_time(1, sysdate+1.0/24); next_time ----------- (1 row) 修改JOB的Interval参数信息。 1 2 3 4 5 6 --修改Job1的Interval为每隔1小时执行一次。 gaussdb=# call dbe_task.interval(1,'sysdate + 1.0/24'); interval ---------- (1 row) 修改JOB的What参数信息。 1 2 3 4 5 6 --修改Job1的What为执行SQL语句“insert into public.test values(333, sysdate+5);”。 gaussdb=# call dbe_task.content(1,'insert into public.test values(333, sysdate+5);'); content ------ (1 row) 同时修改JOB的Next_date、Interval、What等多个参数信息。 1 2 3 4 5 gaussdb=# call dbe_task.update(1, 'call public.prc_job_1();', sysdate, 'interval ''1 minute'''); update -------- (1 row) 删除JOB。 1 2 3 4 5 gaussdb=# call dbe_task.cancel(1); cancel -------- (1 row) 查看JOB执行情况。 当JOB自动执行时,如果JOB执行失败(即job_status状态值为'f')时,请联系管理员查看gs_log的运行日志来查看JOB的失败信息。 日志信息如下所示,从失败信息(detail error msg)中可以查看失败的具体错误。 LOG : Execute Job Detail: job_id: 1 what: call public.test(); start_date: 2017-07-19 23:30:47.401818 job_status: failed detail error msg: relation "test" does not exist end_date: 2017-07-19 23:30:47.401818 next_run_date: 2017-07-19 23:30:56.855827 JOB的权限控制。 当创建一个JOB时,该JOB会和创建该JOB的数据库和用户绑定(即:pg_job系统表新增的JOB记录中的dbname和log_user)。 如果当前用户是DBA用户、系统管理员或该JOB的创建用户(即:pg_job中的log_user),那么该用户有权限通过高级包接口remove、change、next_data、what、interval删除或修改JOB的参数信息。否则,会提示当前用户没有权限操作该JOB。 如果当前数据库是该JOB创建所属的数据库(即:pg_job系统表中的dbname),那么连接到当前数据库上可以通过高级包接口cancel、update、next_data、content、interval删除或修改JOB的参数信息。 当删除JOB所属的数据库(即:pg_job系统表中的dbname)时,系统会关联删除该数据库从属的JOB记录。 当删除JOB所属的用户(即:pg_job系统表中的log_user)时,系统会关联删除该用户从属的JOB记录。 JOB的并发控制管理。 用户可以通过配置GUC参数job_queue_processes调整并发同时执行的JOB数目。 当job_queue_processes为0时,表示不启用定时任务功能,任何job都不会被执行。 当job_queue_processes为大于0时,表示启用定时任务功能且系统能够并发处理的最大任务数。 由于并行运行的任务数太多会消耗更多的系统资源,因此需要设置系统并发处理的任务数,当前并发的任务数达到job_queue_processes时,且此时又有任务到期,那么这些任务本次得不到执行而延期到下一轮询周期。因此,建议用户需要根据每个任务的执行时长合理的设置任务的时间间隔(即submit接口中的interval参数),来避免由于任务执行时间太长而导致下个轮询周期无法正常执行。 注:对于不使用JOB的集群中,用户可以通过在集群安装初始化完成后,通过设置job_queue_processes为0来关闭JOB功能,减少系统资源的消耗。
共100000条