华为云用户手册

  • 优化分析2 在以上查询中,supplier、lineitem、partsupp三表做hashjoin的条件为(lineitem.l_suppkey = supplier.s_suppkey) AND (lineitem.l_partkey = partsupp.ps_partkey),此hashjoin条件中存在两个过滤条件,这前一个过滤条件中的lineitem.l_suppkey和后一个过滤条件中的lineitem.l_partkey同为lineitem表的两列,这两列存在强相关的关联关系。在这种情况,估算hashjoin条件的选择率时,如果使用cost_param的bit1为0时,实际是将AND的两个过滤条件分别计算的2个选择率的值相乘来得到hashjoin条件的选择率,导致行数估算不准确,查询性能较差。所以需要将cost_param的bit1为1时,选择最小的选择率作为总的选择率估算行数比较准确,查询性能较好,优化后的计划如下图所示:
  • 现象描述2 当cost_param的bit1(set cost_param=2)为1时,表示求多个过滤条件(Filter)的选择率时,选择最小的作为总的选择率,而非两者乘积,此方法在过滤条件的列之间关联性较强时估算更加准确。下面查询的例子是cost_param的bit1为1时的优化场景。 表结构如下所示: 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 CREATE TABLE NATION ( N_NATIONKEY INT NOT NULL , N_NAME CHAR(25) NOT NULL , N_REGIONKEY INT NOT NULL , N_COMMENT VARCHAR(152) ) distribute by replication; CREATE TABLE SUPPLIER ( S_SUPPKEY BIGINT NOT NULL , S_NAME CHAR(25) NOT NULL , S_ADDRESS VARCHAR(40) NOT NULL , S_NATIONKEY INT NOT NULL , S_PHONE CHAR(15) NOT NULL , S_ACCTBAL DECIMAL(15,2) NOT NULL , S_COMMENT VARCHAR(101) NOT NULL ) distribute by hash(S_SUPPKEY); CREATE TABLE PARTSUPP ( PS_PARTKEY BIGINT NOT NULL , PS_SUPPKEY BIGINT NOT NULL , PS_AVAILQTY BIGINT NOT NULL , PS_SUPPLYCOST DECIMAL(15,2)NOT NULL , PS_COMMENT VARCHAR(199) NOT NULL )distribute by hash(PS_PARTKEY); 查询语句如下所示: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 set cost_param=2; explain verbose select nation, sum(amount) as sum_profit from ( select n_name as nation, l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount from supplier, lineitem, partsupp, nation where s_suppkey = l_suppkey and ps_suppkey = l_suppkey and ps_partkey = l_partkey and s_nationkey = n_nationkey ) as profit group by nation order by nation; 当cost_param的bit1为0时,执行计划如下图所示:
  • 注意事项 大多数词典的功能依赖于词典定义文件,词典定义文件名仅支持小写字母、数字、下划线组合。 临时模式pg_temp下不允许创建词典。 词典定义文件的字符集编码必须为UTF-8格式。实际应用时,如果与数据库的字符编码格式不一致,在读入词典定义文件时会进行编码转换。 通常情况下,每个session仅读取词典定义文件一次,当且仅当在第一次使用该词典时。需要修改词典文件时,可通过ALTER TEXT SEARCH DICTIONARY命令进行词典定义文件的更新和重新加载。
  • 操作步骤 创建Simple词典。 1 2 3 4 gaussdb=# CREATE TEXT SEARCH DICTIONARY public.simple_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = english ); 其中,停用词表文件全名为english.stop。关于创建simple词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 使用Simple词典。 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT ts_lexize('public.simple_dict','YeS'); ts_lexize ----------- {yes} (1 row) gaussdb=# SELECT ts_lexize('public.simple_dict','The'); ts_lexize ----------- {} (1 row) 设置参数ACCEPT=false,使Simple词典返回NULL,而不是返回非停用词的小写形式。 1 2 3 4 5 6 7 8 9 10 11 12 13 gaussdb=# ALTER TEXT SEARCH DICTIONARY public.simple_dict ( Accept = false ); ALTER TEXT SEARCH DICTIONARY gaussdb=# SELECT ts_lexize('public.simple_dict','YeS'); ts_lexize ----------- (1 row) gaussdb=# SELECT ts_lexize('public.simple_dict','The'); ts_lexize ----------- {} (1 row)
  • 创建索引 为了加速文本搜索,可以创建GIN索引。 1 gaussdb=# CREATE INDEX pgweb_idx_1 ON tsearch.pgweb USING gin(to_tsvector('english', body)); to_tsvector()函数有两个版本。只输一个参数的版本和输两个参数的版本。只输一个参数时,系统默认采用default_text_search_config所指定的分词器。 请注意:创建索引时必须使用to_tsvector的两参数版本。只有指定了分词器名称的全文检索函数才可以在索引表达式中使用。这是因为索引的内容必须不受default_text_search_config的影响,否则索引内容可能不一致。由于default_text_search_config的值可以随时调整,从而导致不同条目生成的tsvector采用了不同的分词器,并且没有办法区分究竟使用了哪个分词器。正确地转储和恢复这样的索引也是不可能的。 因为在上述创建索引中to_tsvector使用了两个参数,只有当查询时也使用了两个参数,且参数值与索引中相同时,才会使用该索引。也就是说,WHERE to_tsvector('english', body) @@ 'a & b' 可以使用索引,但WHERE to_tsvector(body) @@ 'a & b'不能使用索引。这确保只使用这样的索引——索引各条目是使用相同的分词器创建的。 索引中的分词器名称由另一列指定时可以建立更复杂的表达式索引。例如: 1 gaussdb=# CREATE INDEX pgweb_idx_2 ON tsearch.pgweb USING gin(to_tsvector('ngram', body)); 其中body是pgweb表中的一列。当对索引的各条目使用了哪个分词器进行记录时,允许在同一索引中存在混合分词器。在某些场景下这将是有用的。例如,文档集合中包含不同语言的文档时。再次强调,打算使用索引的查询必须措辞匹配,例如,WHERE to_tsvector(config_name, body) @@ 'a & b'与索引中的to_tsvector措辞匹配。 索引甚至可以连接列: 1 gaussdb=# CREATE INDEX pgweb_idx_3 ON tsearch.pgweb USING gin(to_tsvector('english', title || ' ' || body)); 另一个方法是创建一个单独的tsvector列控制to_tsvector的输出。下面的例子是title和body的连接, 当其它是NULL的时候,使用coalesce确保一个字段仍然会被索引: 1 2 gaussdb=# ALTER TABLE tsearch.pgweb ADD COLUMN textsearchable_index_col tsvector; gaussdb=# UPDATE tsearch.pgweb SET textsearchable_index_col = to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,'')); 然后为加速搜索创建一个GIN索引: 1 gaussdb=# CREATE INDEX textsearch_idx_4 ON tsearch.pgweb USING gin(textsearchable_index_col); 现在,就可以执行一个快速全文搜索了: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT title FROM tsearch.pgweb WHERE textsearchable_index_col @@ to_tsquery('north & america') ORDER BY last_mod_date DESC LIMIT 10; title -------- Canada Mexico (2 rows) 相比于一个表达式索引,单独列方法的一个优势是:它没有必要在查询时明确指定分词器以便能使用索引。正如上面例子所示,查询可以依赖于default_text_search_config。另一个优势是搜索比较快速,因为它没有必要重新利用to_tsvector调用来验证索引匹配。表达式索引方法更容易建立,且它需要较少的磁盘空间,因为tsvector形式没有明确存储。 父主题: 表和索引
  • bbox_blanklist_items 参数说明:黑匣子core文件的脱敏数据选项。此参数只有当enable_bbox_dump为on时才生效。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型,以逗号分隔的敏感数据选项的字符串。 默认值:空。表示bbox生成的core文件脱敏所有支持的敏感数据项。 目前支持脱敏的数据项: SHARED_BUFFER:buffer数据缓冲区 X LOG _BUFFER:redo日志缓冲区 DW_BUFFER:双写数据缓冲区 XLOG_MESSAGE_SEND:主备日复制日志发送缓冲区 WALRECIVER_CTL_BLOCK:主备复制日志接收缓冲区 DATA_MESSAGE_SEND:主备复制数据发送缓冲区 DATA_WRITER_QUEUE:主备复制数据接收缓冲区
  • io_priority 参数说明:IO利用率高达50%时,重消耗IO作业进行IO资源管控时关联的优先级等级。 该参数属于USERSET类型参数,请参考表1中方式三的方法进行设置。 取值范围:枚举型 None: 表示不受控。 Low: 表示限制iops为该作业原始触发数值的10%。 Medium: 表示限制iops为该作业原始触发数值的20%。 High: 表示限制iops为该作业原始触发数值的50%。 默认值:None
  • resilience_ctrlstmt_detect_timelimit 参数说明:正常SQL语句被标记为慢SQL的执行时间,0不做慢SQL识别,大于0表示执行的SQL执行时间超过该时间后被标记为慢SQL。仅对非sysadmin/monitoradmin用户执行的select类型的语句生效。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ INT_MAX。 默认值:0,表示关闭慢SQL超时检测功能。
  • bypass_workload_manager 参数说明:IO管控独立开关,此参数需在CN和DN同时应用。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 在不开启use_workload_manager的情况下,通过此参数单独的控制IO管控功能的开启。打开之后可通过设置io_limits或io_priority进行IO管控。 取值范围:布尔型 on表示打开IO管控的独立开关。 off表示关闭IO管控的独立开关。
  • topsql_retention_time 参数说明:设置历史TopSQL中gs_wlm_session_query_info_all和gs_wlm_operator_info表中数据 的保存时间。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ 3650,单位为天。● 值为0时,表示数据永久保存。 ● 值大于0时,表示数据能够保存的对应天数。 默认值:0
  • bbox_dump_path 参数说明:黑匣子core文件的生成路径。此参数只有当enable_bbox_dump为on时才生效。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型 默认值:空。默认生成黑匣子core文件的路径为读取/proc/sys/kernel/core_pattern下的路径,如果这个路径不是一个目录,或者用户对此目录没有写权限,黑匣子core文件将生成在数据库的data目录下。
  • session_respool 参数说明:当前的session关联的resource pool。 该参数属于USERSET类型参数,请参考表1中方式三的方法进行设置。 即如果先设置cgroup_name,再设置session_respool,那么session_respool关联的控制组起作用,如果再切换cgroup_name,那么新切换的cgroup_name起作用。 切换cgroup_name的过程中如果指定到Workload控制组级别,数据库不对级别进行验证。级别的范围只要在1-10范围内都可以。 建议尽量不要混合使用cgroup_name和session_respool。 取值范围:string类型,通过create resource pool所设置的资源池。 默认值:invalid_pool
  • resilience_ctrlstmt_control_iopslimit 参数说明:正常SQL语句被标记为慢SQL后,慢SQL可使用的最大IOPS上限。仅对非sysadmin/monitoradmin用户执行的select类型的语句生效。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串,只能取如下几种类型的值:Low,Medium,High,None,0-INT_MAX。 默认值:None,表示关闭慢SQL逻辑IO管控功能。
  • resource_track_cost 参数说明:设置对当前会话的语句进行资源监控的最小执行代价。该参数只有当参数enable_resource_track为on时才有效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,-1 ~ 2147483647‬ 值为-1时,不进行资源监控。 值大于或等于0时: 值大于或等于0且小于等于9时,对执行代价大于等于10的语句进行资源监控。 值大于或等于10时,对执行代价超过该参数值的语句进行资源监控。 默认值:100000
  • bbox_dump_count 参数说明:在bbox_dump_path定义的路径下,允许存储的 GaussDB 所产生core文件最大数。超过此数量,旧的core文件会被删除。此参数只有当enable_bbox_dump为on时才生效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1~20 默认值:8 在并发产生core文件时,core文件的产生个数可能大于bbox_dump_count。
  • user_metric_retention_time 参数说明:设置用户历史资源监控数据的保存天数。该参数仅在 enable_user_metric_persistent为on时有效。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ 3650,单位为天。 ● 值等于0时,用户历史资源监控数据将永久保存。 ● 值大于0时,用户历史资源监控数据将保存对应天数。 默认值:7
  • instance_metric_retention_time 参数说明:设置实例历史资源监控数据的保存天数。该参数仅在enable_instance_metric_persistent为on时有效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~3650,单位为天。 值等于0时,实例历史资源监控数据将永久保存。 值大于0时,实例历史资源监控数据将保存对应设置天数。 默认值:7
  • resource_track_level 参数说明:设置当前会话的资源监控的等级。该参数只有当参数enable_resource_track为on时才有效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:枚举型 none,不开启资源监控功能。 query,开启query级别资源监控功能。 operator,开启query级别和算子级别资源监控功能。 默认值:query
  • enable_bbox_dump 参数说明:是否开启黑匣子功能,在系统不配置core机制的时候仍可产生core文件。此功能只对CN或DN有效,CMA、CMS、GTM、fenced UDF等仍需配置系统core机制才能捕获core文件。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开黑匣子功能。 off表示关闭黑匣子功能。 默认值:on 黑匣子功能生成core文件依赖操作系统开放ptrace接口;若发生权限不足(errno = 1),请确保/proc/sys/kernel/yama/ptrace_scope配置合理。
  • enable_ffic_log 参数说明:是否开启FFIC(First Failure Info Capture)功能。此功能只对CN或DN有效,CMA、CMS、GTM、fenced UDF等仍需配置系统core机制才能捕获core文件。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开FFIC功能。 off表示关闭FFIC功能。 默认值:on
  • enable_acceleration_cluster_wlm 由于规格变更,当前版本已经不再支持本特性,请不要使用。 参数说明:是否开启加速集群的动态负载管理功能。该参数只针对计算资源池有效;在集群中设置该参数为on并不会启用相关逻辑。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开加速集群的动态负载管理功能。 off表示关闭加速集群的动态负载管理功能。 默认值:off
  • disable_memory_protect 参数说明:禁止内存保护功能。当系统内存不足时如果需要查询系统视图,可以先将此参数置为on,禁止内存保护功能,保证视图可以正常查询。该参数只适用于在系统内存不足时进行系统诊断和调试,正常运行时请保持该参数配置为off。 该参数属于USERSET类型参数,且只对当前会话有效。请参考表1中方式三的方法进行设置。 取值范围:布尔型 on表示禁止内存保护功能。 off表示启动内存保护功能。 默认值:off
  • resource_track_duration 参数说明:设置资源监控实时视图中记录的语句执行结束后进行历史信息转存的最小执行时间。当执行完成的作业,其执行时间不小于此参数值时,作业信息会从实时视图(以statistics为后缀的视图)转存到相应的历史视图(以history为后缀的视图)中。该参数只有当enable_resource_track为on时才有效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0 ~ 2147483647‬,单位为秒。 值为0时,资源监控实时视图中记录的所有语句都进行历史信息归档。 值大于0时,资源监控实时视图中记录的语句的执行时间超过这个值就会进行历史信息归档。 默认值:1min
  • enable_logical_io_statistics 参数说明:设置是否开启资源监控逻辑IO统计功能。开启时,对于PG_TOTAL_USER_RESOURCE_INFO视图中的read_kbytes、write_kbytes、read_counts、write_counts、read_speed和write_speed字段,会统计对应用户的逻辑读写字节数、次数以及速率;对于GS_WLM_USER_RESOURCE_HISTORY与GS_WLM_INSTANCE_HISTORY系统表中的逻辑读写相关字段,会统计相关用户、实例的逻辑读写对应值。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启资源监控逻辑IO统计功能。 off表示关闭资源监控逻辑IO统计功能。 默认值:on
  • parctl_min_cost 参数说明:设置语句受到资源池并发控制的最小执行代价。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,-1 ~ 2147483647‬ 值为-1时或者执行语句的代价小于10时,不受资源池并发控制。 值大于等于0时,当enable_dynamic_workload为off时,如果执行语句的代价大于或等于10并且超过这个参数值就会受到资源池并发控制。 默认值:100000
  • memory_detail_tracking 参数说明:设置需要的线程内分配内存上下文的顺序号以及当前线程所在query的plannodeid,仅用在DEBUG版本。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型 默认值:Memory Context Sequent Count: -1, Plan Nodeid: -1(即空字符串,无sequent count和plan nodeid信息) 该参数不允许用户进行设置,建议保持默认值。
  • enable_control_group 参数说明:是否开启Cgroups功能。此参数需在CN和DN同时应用。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示打开Cgroups管理。 off表示关闭Cgroups管理。 默认值:on 当使用表1中的方式二来修改参数值时,新参数值只能对更改操作执行后启动的线程生效。此外,对于后台线程以及线程复用执行的新作业,该值的改动不会生效。如果希望这类线程即时识别参数变化,可以使用kill session或重启节点的方式来实现。
  • enable_vacuum_control 参数说明:是否控制数据库常驻线程autoVacuumWorker到Vacuum控制组。此参数需在CN和DN同时应用。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示控制数据库常驻线程autoVacuumWorker到Vacuum控制组。 off表示不控制数据库常驻线程autoVacuumWorker到Vacuum控制组。 默认值:on
  • max_active_statements 参数说明:设置全局的最大并发数量。此参数只应用到CN,且针对一个CN上的执行作业。 数据库管理员需根据系统资源(如CPU资源、IO资源和内存资源)情况,调整此数值大小,使得系统支持最大限度的并发作业,且防止并发执行作业过多,引起系统崩溃。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,-1 ~ 2147483647‬。设置为-1和0表示对最大并发数不做限制。
  • memory_tracking_mode 参数说明:设置记录内存信息的模式。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围: none,不启动内存统计功能。 peak, 统计query级内存peak值;此数值记入数据库log,也可由explain analyze输出。 normal,仅做内存实时统计,不生成文件。 executor,生成统计文件,包含执行层使用过的所有已分配内存的上下文信息。 fullexec,生成文件包含执行层申请过的所有内存上下文信息。 默认值:none
共100000条