华为云用户手册

  • 创建服务信息 在“应用基础信息管理”页面的左侧导航栏选择“服务管理”。 在“服务管理”页面右上角单击“创建服务”。 在“创建服务”页面的“所属产品”下拉列表中选择服务所属产品,设置服务中文名和服务英文名(本案例均为“jamesService22A”),其中服务所属产品和服务英文名设置后不可修改。 服务中文名支持汉字、数字、字母,3~64个字符。 服务英文名必须以字母开头,支持大小写字母、数字,3~64个字符,创建后不可修改。 服务英文名是服务在系统内的唯一标识,录入后不可修改,系统在部分场景下会使用服务英文名代替服务中文名进行展示。 单击“创建”。在服务列表中可查看到此新建的服务“状态”为“草稿”。 在新创建的服务所在行“操作”列单击“发布”(发布后服务无法删除,请谨慎操作),在弹框中单击“确认”。 在服务列表中可查看到此新建服务“状态”为“已发布”,录入服务信息完成。 发布服务信息后,如果在AppStage相关中心未同步到该服务信息,在新创建的服务所在行“操作”列可单击“同步”重新同步服务信息。
  • 如何使用蒲公英表单 如何打开蒲公英表单 打开“业务”版块,搜索“蒲公英表单”,为了更快捷访问,你可以将它添加在“我的应用”中。 如何创建表单 进入主页面,点击“创建空白表单”。 如何在线编辑表单 1. 在“在线编辑表单”窗口,从左侧的“题目类型”中选择所需题目,拖拽至页面中间的编辑框。 2. 在右侧编辑框内填写题目和内容。 3. 左侧“设置”中设置填写范围。 所有人:未限定填写人范围,公司内外所有人均可填写; 企业内:仅限企业内部人员填写,企业内支持通过“部门选择/表单批量导入”两种方式,设定填写人员。 4. 设定查看人员后,仅被选择人员有权限查看统计数据。 5. 右上角点击“预览”,查看手机预览和电脑预览效果,确认后点击“提交” 6. 查看表单发布。 在“我的表单”内查看所有表单,包含自己发布的,他人共享给我的和草稿箱。 如何查看表单数据 点击“我的表单 → 需要查看的表单 →收集中”可查看表单的报表数据。 移动端在“管理统计”中查看表单的收集情况和报表 父主题: 蒲公英表单
  • 解决办法 重新添加RemoteAPPProxy.conf配置文件。 登录服务器进入C:\DevOpsTools\RemoteAPPProxy\目录。 在路径下创建名称为RemoteAPPProxy.conf的文本文件。 创建后打开文本文件配置如下信息。 ServiceAddress = https://ip:port ip为目标 堡垒机 内网地址,port为443。 确认无误,保存退出,重新登录即可。
  • 操作步骤 使用管理员账号登录服务器。 在服务器中,下载RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包。 下载链接: RemoteaProxyInstaller_v3.3.26.0~v3.3.37.0及以上版本下载链接 RemoteaProxyInstaller_v3.3.38.0及以上版本下载链接 RemoteaProxy1.1.19.0版本下载链接(适配所有堡垒机版本) 服务器需要有公网访问权限(绑定弹性EIP)。 在应用服务器中,将RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包进行解压。 双击“RemoteaProxyInstaller_xxx.msi”(xxx为版本号)启动安装。 安装时请选择默认的安装路径。 安装完成后,单击“关闭”。
  • 操作步骤 使用管理员账号登录服务器。 在服务器中,下载RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包。 下载链接: RemoteaProxyInstaller_v3.3.26.0~v3.3.37.0及以上版本下载链接 RemoteaProxyInstaller_v3.3.38.0及以上版本下载链接 RemoteaProxy1.1.19.0版本下载链接(适配所有堡垒机版本) 服务器需要有公网访问权限(绑定弹性EIP)。 在应用服务器中,将RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包进行解压。 双击“RemoteaProxyInstaller_xxx.msi”(xxx为版本号)启动安装。 安装时请选择默认的安装路径。 安装完成后,单击“关闭”。
  • 系统配置概述 系统配置包括安全、网络、端口、外发、认证、工单、告警、审计、HA备份等配置。为确保系统安全运行,默认仅系统管理员admin可修改系统配置,整体管理系统运行状况。 安全配置,详情请参见登录安全管理。 网络配置,详情请参见系统网络配置。 端口配置,详情请参见系统端口配置。 外发配置,详情请参见系统外发配置。 用户有效期倒计时邮件:配置完成后在到期前5天才会发送邮件。 认证配置,详情请参见远程认证配置。 工单配置,主要介绍工单配置的基本模式、高级模式、审批流程等,详情请参考工单配置管理。 告警配置,详情请参见系统告警配置。 系统风格,详情请参见系统风格变更。 父主题: 系统配置
  • 操作步骤 使用管理员账号登录服务器。 在服务器中,下载RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包。 下载链接: RemoteaProxyInstaller_v3.3.26.0~v3.3.37.0及以上版本下载链接 RemoteaProxyInstaller_v3.3.38.0及以上版本下载链接 RemoteaProxy1.1.19.0版本下载链接(适配所有堡垒机版本) 服务器需要有公网访问权限(绑定弹性EIP)。 在应用服务器中,将RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包进行解压。 双击“RemoteaProxyInstaller_xxx.msi”(xxx为版本号)启动安装。 安装时请选择默认的安装路径。 安装完成后,单击“关闭”。
  • 操作步骤 使用管理员账号登录服务器。 在服务器中,下载RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包。 下载链接: RemoteaProxyInstaller_v3.3.26.0~v3.3.37.0及以上版本下载链接 RemoteaProxyInstaller_v3.3.38.0及以上版本下载链接 RemoteaProxy1.1.19.0版本下载链接(适配所有堡垒机版本) 服务器需要有公网访问权限(绑定弹性EIP)。 在应用服务器中,将RemoteaProxyInstaller_xxx.zip(xxx为版本号)压缩包进行解压。 双击“RemoteaProxyInstaller_xxx.msi”(xxx为版本号)启动安装。 安装时请选择默认的安装路径。 安装完成后,单击“关闭”。
  • 录入微服务信息 在左侧导航栏选择“微服务管理”。 在“微服务管理”页面,单击右上角“创建微服务”。 在“创建微服务”页面的“所属服务”下拉列表中选择微服务所属服务,设置微服务中文名、微服务英文名,其中微服务所属服务和微服务英文名设置后不可修改。 微服务中文名支持汉字、数字、字母,3~64个字符。 微服务英文名必须以字母开头,支持大小写字母、数字,3~64个字符,创建后不可修改。 微服务英文名是微服务在系统内的唯一标识,录入后不可修改,系统在部分场景下会使用微服务英文名代替微服务中文名进行展示。 单击“创建”。在微服务列表中可查看到此新建的微服务“状态”为“草稿”。 在新创建的微服务所在行“操作”列单击“发布”(发布后微服务无法删除,请谨慎操作),在弹框中单击“确认”。 在微服务列表中可查看到此新建微服务“状态”为“已发布”,录入微服务信息完成。 发布微服务信息后,如果在AppStage相关中心未同步到该微服务信息,在新创建的微服务所在行“操作”列可单击“同步”重新同步微服务信息。
  • 录入服务信息 在左侧导航栏选择“服务管理”。 在“服务管理”页面右上角,单击“创建服务”。 在“创建服务”页面的“所属产品”下拉列表中选择服务所属产品,设置服务中文名、服务英文名,其中服务所属产品和服务英文名设置后不可修改。 服务中文名支持汉字、数字、字母,3~64个字符。 服务英文名必须以字母开头,支持大小写字母、数字,3~64个字符,创建后不可修改。 服务英文名是服务在系统内的唯一标识,录入后不可修改,系统在部分场景下会使用服务英文名代替服务中文名进行展示。 单击“创建”。在服务列表中可查看到此新建的服务“状态”为“草稿”。 在新创建的服务所在行“操作”列单击“发布”(发布后服务无法删除,请谨慎操作),在弹框中单击“确认”。 在服务列表中可查看到此新建服务“状态”为“已发布”,录入服务信息完成。 发布服务信息后,如果在AppStage相关中心未同步到该服务信息,在新创建的服务所在行“操作”列可单击“同步”重新同步服务信息。
  • 步骤三:编辑演练执行计划 在“演练服务”页面,选择左侧导航栏的“演练执行计划”。 单击“下载导入模板”,即可下载演练计划导入模板。 根据导入模板编写好演练计划后单击“导入”。 在“导入”页面, 选择年份,并上传演练计划,单击“确定”。 在演练计划列表中,单击演练计划所在行后的“编辑”。 在编辑页面,设置各个季度计划演练时间。 在演练计划列表中,展开计划并展开需要演练的季度界面,单击“新增故障场景”,“新增故障场景”页面会展示演练方案所有的场景,勾选需要新增的场景后,单击提“确定”。
  • 步骤四:创建并执行演练任务 支持对服务故障进行快速演练、场景编排演练等,以场景快速演练为例,指导如何快速完成演练。 在“演练服务”页面,选择左侧导航栏的“场景快速演练”。 单击“创建”,进入“创建场景快速演练”页面。 配置任务参数,参数说明如表2所示,配置完成后,单击“确定”。 表2 创建场景快速演练参数说明 参数类型 参数名称 参数说明 基本信息 任务名称 输入任务名称。 BCM类型 选择BCM类型。 支持选择“业务维度”或“横向维度”。 描述 输入任务描述信息。 演练对象 故障对象 选择故障对象。支持的演练对象有“弹性云服务器”、“NUWA容器”、“ELB&EIP”和“全链路压测任务”。 资源实例 选择实例资源。 不同的故障对象可选的资源不同,具体如下: 弹性云服务器:主机、集群、IP NUWA容器:AZ、CCECluster、Pod ELB&EIP:EIP 全链路压测任务:全链路压测任务 故障指标 稳态指标 - 观测指标 - 故障指标 - 故障模式 关联的故障场景 - 故障设置 - 操作 - 在演练任务列表,单击已创建的演练任务所在行“操作”列的“执行”。 任务执行之后,可以单击“执行历史”进入“执行历史”页面查看任务执行情况,也可以更改故障模式关联的场景,查看运行日志。 如需批量执行,可勾选待执行任务,单击“批量执行”。
  • 步骤二:变更环境 在“服务环境管理”页面,单击待变更环境所在行“操作”列的“更新”,进入“更新环境”页面。 配置变更参数。 完成“变更基本配置”,单击“下一步”,会根据配置内容产生变更计划。 环境基本信息:作为环境的元数据无法修改、无法被更新。 服务级IaC包:选择服务级IaC包的版本和规格。服务级IaC包为“spec”类型的包,可以定义环境下的流水线和组件,以及组件下的资源。 变更任务流:基于用户选择的服务级IaC包,系统可以获取此包定义的所有流水线。可以选择其中一个用于执行变更,若不选择流水线,则系统会生成一条执行环境下所有组件的流水线。变更的内容是spec包中声明的所有组件。 组件级IaC包:选择流水线后,系统会根据流水线内容生成组件列表,可以基于列表中的元素选择需要变更的组件,或者为组件变更指定patch包,不指定patch包的组件将会基于spec包中对组件的定义进行变更; 如果没有选择流水线,那么系统将会展示选择的spec包中所定义的所有组件,同样地,也可以为组件指定用于变更的patch包。组件名称会根据自己的iacspec包代码的描述自动带出包中声明的组件,可以全量或者部分进行变更。 等待1~2分钟(具体时间长短取决于资源的数量以及当前系统的负载),变更计划生成完毕后,可以在“任务流程图”中查看此次变更的“变更流程图”和“变更流水线”,确认无误后可以点击“提交”执行变更。
  • 什么是区域、可用区? 用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region)指物理的数据中心。每个区域完全独立,这样可以实现较大程度的容错能力和稳定性。资源创建成功后不能更换区域。 可用区(AZ,Availability Zone)是同一区域内,电力和网络互相隔离的物理区域,一个可用区不受其他可用区故障的影响。一个区域内可以有多个可用区,不同可用区之间物理隔离,但内网互通,既保障了可用区的独立性,又提供了低价、低时延的网络连接。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 什么是项目? 云的每个区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以区域默认单位为项目进行授权, IAM 用户可以访问您账号中该区域的所有资源。 如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中购买资源,然后以子项目为单位进行授权,使得IAM用户仅能访问特定子项目中的资源,使得资源的权限控制更加精确。 项目中的资源不能转移。
  • 算子级调优介绍 一个查询语句要经过多个算子步骤才会输出最终的结果。由于个别算子耗时过长导致整体查询性能下降的情况比较常见。这些算子是整个查询的瓶颈算子。通用的优化手段是EXPLAIN ANALYZE/PERFORMANCE命令查看执行过程的瓶颈算子,然后进行针对性优化。 如下面的执行过程信息中,Hashagg算子的执行时间占总时间的:(51016-13535)/ 56476 ≈66%,此处Hashagg算子就是这个查询的瓶颈算子,在进行性能优化时应当优先考虑此算子的优化。
  • 优化后 测试发现由于两表结果集过大,导致nestloop耗时过长,超过一小时未返回结果,因此性能优化的关键是消除nestloop,让join走更高效的hashjoin。从语义等价的角度消除any-clause,SQL改写如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 select ls_pid_cusr1,COALESCE(max(round(ym/365)),0) from ( ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = t2.id and t1.ls_pid_cusr1 != t2.id15 ) union all ( SELECT ls_pid_cusr1,(current_date-bthdate) as ym FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = id15 ) ) GROUP BY ls_pid_cusr1; 注意:尽量使用union all代替union。union在合并两个集合时会执行去重操作,而union all则直接将两个结果集合并、不执行去重。执行去重会消耗大量的时间,因此,在一些实际应用场景中,如果通过业务逻辑已确认两个集合不存在重叠,可用union all替代union以便提升性能。 优化后的SQL查询由两个等值join的子查询构成,而每个子查询都可以走更适合此场景的hashjoin。优化后的执行计划如下 优化后,从超过1个小时未返回结果优化到7s返回结果。
  • 优化前 in-clause/any-clause是常见的SQL语句约束条件,有时in或any后面的clause都是常量,类似于: 1 2 3 4 select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in (‘20120405’, ‘20130405’); 或者 1 2 3 4 select count(1) from calc_empfyc_c1_result_tmp_t1 where ls_pid_cusr1 in any(‘20120405’, ‘20130405’); 但是也有一些如下的特殊用法: 1 2 3 4 5 SELECT ls_pid_cusr1,COALESCE(max(round((current_date-bthdate)/365)),0) FROM calc_empfyc_c1_result_tmp_t1 t1,p10_md_tmp_t2 t2 WHERE t1.ls_pid_cusr1 = any(values(id),(id15)) GROUP BY ls_pid_cusr1; 其中,id、id15为p10_md_tmp_t2中的两列,“t1.ls_pid_cusr1 = any(values(id),(id15))”等价于“t1.ls_pid_cusr1 = id or t1.ls_pid_cusr1 = id15”。 因此join-condition实质上是一个不等式,这种不等值的join操作必须走nestloop,对应执行计划如下:
  • SMP相关参数配置建议 如果要打开SMP自适应功能,要设置query_dop=0,需同步调整以下相关参数值,以获取更佳的dop选择: comm_usable_memory 当系统内存较大时,max_process_memory设置较大,可适当调大该值,建议设置为max_process_memory的5%,默认值为4GB。 comm_max_stream 设置建议值为:comm_max_stream=Min(dop_limit * dop_limit * 20 * 2, max_process_memory(字节数) * 0.025 / 总DN数 / 260),且该值在comm_max_stream取值范围内。 max_connections 设置建议值为:max_connections=dop_limit * 20 * 6 + 24,且该值在max_connections取值范围内。 公式中的dop_limit为集群中每个DN对应的CPU数,计算公式为:dop_limit = 单机器的CPU逻辑核数 / 单机器的DN数。 父主题: 配置SMP
  • 优化前 创建一个无局部聚簇(以下称为PCK)的列存表orders_no_pck,表定义如下: 执行以下SQL语句,查询某个点查询的执行计划: 1 2 3 4 EXPLAIN PERFORMANCE SELECT * FROM orders_no_pck WHERE o_orderkey = '13095143' ORDER BY o_orderdate; 由下图可知执行时间为48毫秒,查看Datanode Information发现filter时间为19毫秒,CUNone比例为0。
  • 优化后 创建的列存表orders_pck。表定义如下: 使用ALTER TABLE将字段o_orderkey设置为PCK: 执行以下SQL语句,再次查询同样的点查询SQL语句的执行计划: 1 2 3 4 EXPLAIN PERFORMANCE SELECT * FROM orders_pck WHERE o_orderkey = '13095143' ORDER BY o_orderdate; 由下图可知执行时间为5毫秒,查看Datanode Information发现filter时间为0.5毫秒,CUNone比例为82。CUNone比列越高,PCK的性能收益越明显。
  • 优化后 where条件中l_shipdate和l_quantity的distinct值数量较少且可以做min max过滤,将字段l_shipdate、l_quantity设置为PCK修改表定义如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE lineitem ( L_ORDERKEY BIGINT NOT NULL , L_PARTKEY BIGINT NOT NULL , L_SUPPKEY BIGINT NOT NULL , L_LINENUMBER BIGINT NOT NULL , L_QUANTITY DECIMAL(15,2) NOT NULL , L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL , L_DISCOUNT DECIMAL(15,2) NOT NULL , L_TAX DECIMAL(15,2) NOT NULL , L_RETURNFLAG CHAR(1) NOT NULL , L_LINESTATUS CHAR(1) NOT NULL , L_SHIPDATE DATE NOT NULL , L_COMMITDATE DATE NOT NULL , L_RECEIPTDATE DATE NOT NULL , L_SHIPINSTRUCT CHAR(25) NOT NULL , L_SHIPMODE CHAR(10) NOT NULL , L_COMMENT VARCHAR(44) NOT NULL , partial cluster key(l_shipdate, l_quantity) ) with (orientation = column) distribute by hash(L_ORDERKEY); 重新导入数据后执行查询,查看执行时间: 图3 使用partial cluster key 图4 使用partial cluster key后CU加载情况 使用partial cluster key后,5-- CS tore Scan on public.lineitem的时间减少了1.2s,得益于有84个CU被过滤掉了。
  • 优化建议 选取partial cluster key列。 列存表支持创建partial cluster key的类型character varying(n), varchar(n), character(n), char(n), text, nvarchar2, timestamp with time zone, timestamp without time zone, date, time without time zone, time with time zone。 数据的distinct值数量较少,这样能产生较好的过滤效果。 出现在查询where条件中,优先选取能过滤大量数据的列。 partial cluster key中设置多个列时,是先按第一个列排序,当第一个列值相同时,使用第二列比较,后续列依次类推。推荐不要超出3个列。
  • 总结 通常优化器总会选择最优的执行计划,但是众所周知代价估算,尤其是中间结果集的代价估算一般会有比较大的偏差,这种比较大的偏差就可能会导致agg的计算方式出现比较大的偏差,这时候就需要通过best_agg_plan进行agg计算模型的干预。 一般来说,当agg汇聚的收敛度很小时,即结果集的个数在agg之后并没有明显变少时(经验上以5倍为临界点),选择redistribute+hashagg执行方式,否则选择hashagg+redistribute+hashagg执行方式。
  • hint的错误类型 语法错误 语法规则树归约失败,会报错,指出出错的位置。 例如:hint关键字错误,leading hint或join hint指定2个表以下,其它hint未指定表等。一旦发现语法错误,则立即终止hint的解析,所以此时只有错误前面的解析完的hint有效。 例如: 1 leading((t1 t2)) nestloop(t1) rows(t1 t2 #10) nestloop(t1)存在语法错误,则终止解析,可用hint只有之前解析的leading((t1 t2))。 语义错误 表不存在,存在多个,或在leading或join中出现多次,均会报语义错误。 scanhint中的index不存在,会报语义错误。 另外,如果子查询提升后,同一层出现多个名称相同的表,且其中某个表需要被hint,hint会存在歧义,无法使用,需要为相同表增加别名规避。 hint重复或冲突 如果存在hint重复或冲突,只有第一个hint生效,其它hint均会失效,会给出提示。 hint重复是指,hint的方法及表名均相同。例如:nestloop(t1 t2) nestloop(t1 t2)。 hint冲突是指,table list一样的hint,存在不一样的hint,hint的冲突仅对于每一类hint方法检测冲突。 例如:nestloop (t1 t2) hashjoin (t1 t2),则后面与前面冲突,此时hashjoin的hint失效。注意:nestloop(t1 t2)和no mergejoin(t1 t2)不冲突。 leading hint中的多个表会进行拆解。例如:leading ((t1 t2 t3))会拆解成:leading((t1 t2)) leading(((t1 t2) t3)),此时如果存在leading((t2 t1)),则两者冲突,后面的会被丢弃。(例外:指定内外表的hint若与不指定内外表的hint重复,则始终丢弃不指定内外表的hint。) 子链接提升后hint失效 子链接提升后的hint失效,会给出提示。通常出现在子链接中存在多个表连接的场景。提升后,子链接中的多个表不再作为一个整体出现在join中。 列类型不支持重分布 对于skew hint来说,目的是为了进行重分布时的调优,所以当hint列的类型不支持重分布时,hint将无效。 hint未被使用 非等值join使用hashjoin hint或mergejoin hint 不包含索引的表使用indexscan hint或indexonlyscan hint 通常只有在索引列上使用过滤条件才会生成相应的索引路径,全表扫描将不会使用索引,因此使用indexscan hint或indexonlyscan hint将不会使用 indexonlyscan只有输出列仅包含索引列才会使用,否则指定时hint不会被使用 多个表存在等值连接时,仅尝试有等值连接条件的表的连接,此时没有关联条件的表之间的路径将不会生成,所以指定相应的leading,join,rows hint将不使用,例如:t1 t2 t3表join,t1和t2, t2和t3有等值连接条件,则t1和t3不会优先连接,leading(t1 t3)不会被使用。 生成stream计划时,如果表的分布列与join列相同,则不会生成redistribute的计划;如果不同,且另一表分布列与join列相同,只能生成redistribute的计划,不会生成broadcast的计划,指定相应的hint则不会被使用。 对于AGG重分布列的hint,hint未被使用的可能原因如下: 指定的分布键包含不支持重分布的数据类型。 执行计划中不需要重分布。 执行的分布键的序号有误。 对于使用grouping sets子句和cube子句的AP函数,window agg中的分布键,不支持hint。 指定Agg重分布列Hint,仅8.1.3.100及以上集群版本支持。 如果子链接未被提升,则blockname hint不会被使用。 对于skew hint,hint未被使用的可能原因如下: 计划中不需要进行重分布。 hint指定的列为包含分布键。 hint指定倾斜信息有误或不完整,如对于join优化未指定值。 倾斜优化的GUC参数处于关闭状态。 对于guc hint,hint未被使用的可能原因如下: 配置参数不存在。 配置参数不支持guc hint。 配置参数的值无效。 语句级别的guc hint没有被写在顶层查询中。 子查询级别的guc hint设置的配置参数不支持在子查询级别设置。 guc hint所在的子查询被提升。
  • 优化后 将查询中的关联条件作为分布键,执行下列语句修改b作为t2的分布列: 1 ALTER TABLE t2 DISTRIBUTE BY HASH (b); 将表t2的分布列改为b列之后,执行计划将不再包含“Streaming(type: REDISTRIBUTE)”,减少了DN之间存在的通信数据量的同时,执行时间也从8.7毫秒降低至2.7毫秒,从而提升查询性能,如图2所示。 图2 选择合适的分布列案例(二)
  • 优化前 将a作为t1和t2的分布列,表定义如下: 1 2 CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a); CREATE TABLE t2 (a int, b int) DISTRIBUTE BY HASH (a); 执行如下查询: 1 SELECT * FROM t1, t2 WHERE t1.a = t2.b; 则执行计划存在“Streaming(type: REDISTRIBUTE)”,即DN根据选定的列把数据重分布到所有的DN,这将导致DN之间存在较大通信数据量,如图1所示。 图1 选择合适的分布列案例(一)
  • 示例 设置query_band“JobName=abc”关联资源池p1、队列内优先级Rush、次序为1。 1 2 3 4 5 SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','respool=p1;priority=rush',1); gs_wlm_set_queryband_action ----------------------------- t (1 row) 修改query_band“JobName=abc”的关联资源池为p2。 1 2 3 4 5 SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','respool=p2'); gs_wlm_set_queryband_action ----------------------------- t (1 row) 修改query_band“JobName=abc”的队列内优先级为High。 1 2 3 4 5 SELECT * FROM gs_wlm_set_queryband_action('JobName=abc','priority=high'); gs_wlm_set_queryband_action ----------------------------- t (1 row) 修改query_band“JobName=abc”的次序为3。 1 2 3 4 5 SELECT * FROM gs_wlm_set_queryband_order('JobName=abc',3); gs_wlm_set_queryband_order ----------------------------- t (1 row) 查询query_band关联的负载行为。 1 2 3 4 5 6 SELECT * FROM pg_queryband_action; qband | respool_id | respool | priority | qborder --------------+------------+---------+----------+--------- AppName=test | 16974 | p1 | low | -1 JobName=abc | 17119 | p2 | high | 1 (2 rows)
  • query_band支持的负载行为 query_band是一个session级别的GUC参数,作为作业标识符本身没有特殊含义,数据类型为字符型,支持赋值任何字符串。但是为方便区分和设置,query_band负载识别仅支持识别键值对形式的query_band,示例: SET query_band='JobName=abc;AppName=test;UserName=user'; 其中,‘JobName=abc’,‘AppName=test’以及‘UserName=user’都是一个独立的键值对。query_band键值对规格: query_band使用键值对方式设置,即'key=value';session内支持设置多个query_band键值对,多个键值对之间使用分号分隔。query_band键值对和query_band参数值长度的上限均为1024个字符。 query_band键值对支持的有效字符包括:数字0~9、大写字母A~Z、小写字母a-z、'.'、'-'、'_' 以及'#'。 query_band负载识别以键值对为单位设置和识别负载行为,目前支持的负载行为,如表1所示: 表1 QUERY_BAND支持负载行为 类别 行为 行为表现 负载管理(workload) 资源池(respool) query_band关联资源池 负载管理(workload) 优先级(priority) 队列内优先级 次序(order) 队列(respool) 目前为无效字段,主要用于后续扩展。 query_band搜索次序 其中,行为类别用于负载行为归类,不同的负载行为可能属于同一个类别,比如资源池和优先级同属于负载管理类别;负载行为代表query_band键值对关联的是哪种负载行为;行为表现用于记录具体的负载行为是什么;负载类别中的次序用于标记query_band负载行为识别的优先级,一个session内设置多个query_band键值对时,优先使用次序较小的query_band键值对识别负载行为。每一个query_band键值对都可以对应0个或多个负载行为,但是一种负载行为只能关联一个。query_band负载行为详细说明如下: 资源池:query_band支持关联资源池,作业执行时,若query_band指定了资源池,则使用query_band关联的资源池,否则使用用户关联的资源池。 query_band关联资源池时,资源池不存在报错退出,关联失败。 query_band关联资源池时,记录query_band与资源池依赖关系。 query_band关联资源池删除时,提示有query_band依赖,资源池删除失败。 队列内优先级:query_band支持关联作业优先级,支持高中低(High/Medium/Low)三个优先级,同时提供Rush作为特殊优先级(绿色通道),默认优先级为Medium。正常实践过程中,大部分作业使用Medium优先级,优先级较低作业使用Low优先级,特权作业使用High优先级,High作业不建议过多。Rush优先级作为特殊场景下应急使用,平时不建议使用。 队列内优先级实现队列内排队优先级: 静态负载管理场景下,CN并发不足时,触发CN全局队列排队,CN全局队列为优先级队列。 动态负载管理场景下,DN内存不足时,触发CCN全局排队,CCN全局队列为优先级队列。 资源池并发或内存不足时,触发资源池排队,资源池队列为优先级队列。 以上优先级队列均遵守以下调度规则: 优先级高作业优先调度。 优先级高作业全部调度完之后调度优先级低作业。 动态负载管理场景下,CN全局队列不支持query_band优先级。 次序:支持设置query_band识别次序,未设置识别次序的使用默认次序-1。除默认次序外,不存在次序相同的两个query_band。设置次序时对query_band次序进行校验,存在相同次序时,已存在次序递归+1直到不存在相同次序为止。 session内设置多个query_band键值对时,使用次序较小的query_band键值对作为负载识别的query_band。 次序最小为0,默认次序-1为最大次序。 次序都为默认次序时,使用设置靠前的query_band作为负载识别的query_band。 示例:set query_band='b=1;a=3;c=1'; b=1,其中b=1次序-1,a=3次序4,c=1次序1,则使用c=1作为负载识别的query_band,此设计可提供负载管理员对负载调度调整能力。
  • 概述 GaussDB (DWS)实现基于query_band的负载识别和队列内优先级控制,一方面提供了更为灵活的负载识别手段,可根据作业类型、应用名称、脚本名称等识别负载队列,使用户根据业务场景可灵活配置query_band识别队列;另一方面实现了队列内作业下发优先级控制,后续将逐步实现队列内资源优先级控制。 管理员用户可根据业务场景及作业类别配置query_band所关联队列及估算内存限制等实现更为灵活的负载控制与资源管控。如果业务未配置query_band或用户未将query_band关联行为时,作业会默认使用用户关联队列和队列内优先级。
共100000条