华为云用户手册

  • 创建规则 登录全球SIM联接控制台,在左侧选择“自动化规则”进入自动化规则列表页面,单击“创建规则”进入创建自动化规则页面。 表1 创建规则参数说明 参数名称 说明 规则名称 自定义规则的名称,便于管理。 规则类型 规则的类型包括订单管理、用量监控、卡状态变更监控、流量池监控。 触发器 触发器的类型分为五种情况: SIM卡套餐到期:订单管理规则的触发器。 周期累计数据用量:用量监控规则的触发器。 卡状态变更:卡状态变更监控规则的触发器。 前向流量池周期累计数据用量:流量池监控规则的触发器。 后向流量池周期累计数据用量:流量池监控规则的触发器。 触发条件 触发条件的类型分为三种情况: 到期天数(天):订单管理规则的触发条件。 剩余流量(MB):用量监控规则或流量池监控规则的触发条件。 卡状态(未激活、可激活、在用、已停用、拆机)变更:卡状态变更监控规则的触发条件。 执行 选择规则触发后的通知方式,包括短信&邮件或API推送。 短信&邮件: 提醒周期:根据需要设置短信提醒的周期。 发送短信:此处展示短信通知的模板示例。 API推送: API推送地址:选择指定的API推送地址。若先前未创建推送地址,可单击右侧“推送地址管理界面创建”按钮跳转到推送地址管理页面新增推送地址。 合并发送:若不勾选“合并发送”,API推送的报文请参考API推送报文;若勾选“合并发送”,API推送的报文请参考API合并推送报文。 提醒周期:根据需要设置API推送的提醒周期。 推送失败提醒:若开启了推送失败提醒,当推送失败时,用户会在消息中心收到API推送失败提醒,在消息接收管理中对应消息类型下配置消息接收人即可收到短信或邮件提醒。 筛选器 筛选器类型分为四种情况(默认情况下是监控您平台的所有SIM卡): 主套餐:通过购卡下单时选择的套餐筛选,过滤出您想要监控的SIM卡。 标签:通过标签筛选,过滤出您想要监控的SIM卡。 前向流量池:通过前向流量池的名称筛选过滤您想要监控的SIM卡。 后向流量池:通过后向流量池的名称筛选过滤您想要监控的SIM卡。
  • API推送报文 推送body参数 参数 参数类型 描述 cid string 容器ID。 ruleType int 规则类型: 1:订单管理。 2:用量监控。 3:流量池监控。 4:卡状态变更监控。 templateName string 模板名称: api_rule_price_plan_expired:SIM卡套餐到期模板。 api_rule_flow_usage_remain:周期累计数据用量模板。 api_rule_sim_status_modify:卡状态变更模板。 api_sim_pool_rule_flow_usage_remain:流量池周期累计数据用量模板。 sim_pool_rule_flow_usage:前向流量池邮件发送模板。 sim_pool_rule_flow_usage_remain:前向流量池邮件发送模板。 back_pool_rule_flow_usage:后向流量池邮件发送模板。 api_back_pool_rule_flow_usage:后向流量池周期累计数据用量API推送模板。 templateParams list 模板参数集合,建议按照key值进行解析,后续可能会添加其他key值。 SIM卡套餐到期(api_rule_price_plan_expired) 【全球SIM联接】尊敬的{accountName}客户,您好!{cid}购买的套餐{pricePlanName}将在{daysToExpire}天后过期,请及时续费。 { "cid": "4441380627973120", "ruleType": 1, "templateName": "api_rule_price_plan_expired", "templateParams": [ { "key": "cid", "value": "4441380627973120" }, { "key": "pricePlanName", "value": "中国移动每月30M联接服务" }, { "key": "poolId", "value": "0" }, { "key": "daysToExpire", "value": "9" } ] } 周期累计数据用量(api_rule_flow_usage_remain) 【全球SIM联接】尊敬的{accountName}客户,您好!您的SIM卡(容器ID:{cid})购买的套餐({pricePlanName})剩余流量已不足{remainFlow}MB,请合理使用,需要避免流量达量断网。 { "cid": "4441380627973120", "ruleType": 1, "templateName": "api_rule_flow_usage_remain", "templateParams": [ { "key": "cid", "value": "4441380627973120" }, { "key": "pricePlanName", "value": "中国移动每月30M联接服务" }, { "key": "remainFlow", "value": "100" } ] } 卡状态变更(api_rule_sim_status_modify) 【全球SIM联接】尊敬的{accountName}客户,您好!您的SIM卡(容器ID:{cid})状态于{modifyTime}由{oldStatus}变为{newStatus}。 { "cid":"2021080621060000T", "ruleType":4, "templateName":"api_rule_sim_status_modify", "templateParams":[ { "key":"cid","value":"2021080621060000T" }, { "key":"modifyTime","value":"2022-05-16 03:24:08" }, { "key":"oldStatus","value":"未激活" }, { "key":"newStatus","value":"可激活" } ] } 流量池周期累计数据用量(api_sim_pool_rule_flow_usage_remain) 【全球SIM联接】尊敬的{accountName}客户,您好!{poolId}流量池名:{poolName},套餐名称:{pricePlanName},已用流量{remainFlow}MB,请合理使用,需要避免达量断网。 { "cid": "4441380627973120", "ruleType": 1, "templateName": "api_sim_pool_rule_flow_usage_remain", "templateParams": [ { "key": "poolId", "value": "4441380627973120" }, { "key": "poolName", "value": "xx流量池" }, { "key": "pricePlanName", "value": "中国移动每月30M联接服务" }, { "key": "remainFlow", "value": "100" } ] } 前向流量池邮件发送模板(sim_pool_rule_flow_usage) 【华为云】尊敬的{Account}客户,您好!您的前向流量池(流量池号:{poolId}, 流量池名称:{poolName},套餐名称: {pricePlanName})已用流量{usageFlow}MB,请合理使用,需要避免流量达量断网。 { "cid": "null", "ruleType": 3, "templateName": "api_back_pool_rule_flow_usage_remain", "templateParams": [ { "key": "poolId", "value": "4441380627973120" }, { "key": "poolName", "value": "xx流量池" }, { "key": "pricePlanName", "value": "中国电信消费级阶梯流量池联接服务" }, { "key": "usageFlow", "value": "100" } ] } 前向流量池邮件发送模板(sim_pool_rule_flow_usage_remain) 【华为云】尊敬的{Account}客户,您好!您的前向流量池(流量池号:{poolId}, 流量池名称:{poolName},套餐名称: {pricePlanName})剩余流量{remainFlow}MB,请合理使用,需要避免流量达量断网。 { "cid": "4441380627973120", "ruleType": 1, "templateName": "api_sim_pool_rule_flow_usage_remain", "templateParams": [ { "key": "poolId", "value": "4441380627973120" }, { "key": "poolName", "value": "xx流量池" }, { "key": "pricePlanName", "value": "中国移动每月30M联接服务" }, { "key": "remainFlow", "value": "100" } ] } 后向流量池邮件发送模板(back_pool_rule_flow_usage) 【华为云】尊敬的{Account}客户,您好!您的后向流量池(流量池号:{poolId}, 流量池名称:{poolName},套餐名称: {pricePlanName})已用流量{usageFlow}MB,请合理使用,避免产生过量的费用。 { "cid": "null", "ruleType": 3, "templateName": "api_back_pool_rule_flow_usage_remain", "templateParams": [ { "key": "poolId", "value": "4441380627973120" }, { "key": "poolName", "value": "xx流量池" }, { "key": "pricePlanName", "value": "中国电信消费级阶梯流量池联接服务" }, { "key": "usageFlow", "value": "100" } ] } 后向流量池周期累计数据用量API推送模板(api_back_pool_rule_flow_usage) 【华为云】尊敬的{Account}客户,您好!您的后向流量池(流量池号:{poolId}, 流量池名称:{poolName},套餐名称: {pricePlanName})已用流量{usageFlow}MB,请合理使用,避免产生过量的费用。 { "cid": "null", "ruleType": 3, "templateName": "api_back_pool_rule_flow_usage_remain", "templateParams": [ { "key": "poolId", "value": "4441380627973120" }, { "key": "poolName", "value": "xx流量池" }, { "key": "pricePlanName", "value": "中国电信消费级阶梯流量池联接服务" }, { "key": "usageFlow", "value": "100" } ] }
  • 注意事项 请在下单前,确认您已阅读并了解以下注意事项: 区域使用限制:物联网实体卡仅限中国内地(新疆、西藏、广西、云南边境等高风险区域除外,上述区域需要客户到当地运营商自行购买)使用,不能在海外区域使用。请查看高风险地区详细名单。 不提供语音和短信功能:物联网卡只提供流量功能,不提供语音和短信功能。 无法访问人联网设备或应用:物联网卡默认是企业实名制的,只能用于物联网设备,不能用于人联网设备(包括但不限于手机等)和访问人联网应用(包括但不限于微信、QQ等)。如果用于人联网场景(手机除外),可以购买实名制的物联网卡,要求实名到个人且一个人最多实名5张卡,请谨慎考虑,并在需要时联系华为工程师处理。 不支持更换运营商或套餐:下单后不支持更换运营商,也不支持更换套餐,如有此需求请重新下单。 不支持指定号段:若有需求或疑问,请联系对应客户经理确认。 达量断网: 物联网卡统一设置了“达量断网”功能,单卡当月已用流量超出套餐额度则自动断网,次月自动恢复。单卡当月剩余流量不累计到下个月。 前向流量池内单卡已用流量超过套餐额度可正常使用,前向流量池内所有卡当月已用流量总和超出前向流量池内SIM卡的套餐额度总和则自动断网。前向流量池当月剩余流量(如果有的话)不累计到下个月。 达量断网停机之后,无论是当月充值恢复使用,还是次月自动恢复使用,大部分设备无需重启即可正常联网。如果发现设备无法联网,重启即可。 机卡绑定:当卡首次插入设备A激活成功时,即和设备A自动绑定。如果物联网卡被换到了设备B,将触发机卡分离停机,因此请勿将SIM卡插入多台设备上使用。 定向流量:物联网卡流量包规格大于100M(不含100M)或者组流量池的订单需要配置定向流量,即配置定向域名或定向IP。定向流量配置完成之后,物联网卡仅可以访问定向IP或域名,其他网站都无法访问。 流量叠加包:全球SIM联接仅支持中国电信/中国联通/中国移动的流量叠加包购买。请参考购买物联网卡叠加包和购买前向流量池叠加包。 实名认证:物联网卡默认发企业实名认证卡,也可以发个人实名认证卡。如果您需要使用个人实名认证卡,请在下单支付前联系华为工程师进行处理。个人实名认证卡采取“先实名,后使用”的策略,如果您采购了个人实名认证卡,需要首先对卡进行实名认证,才能正常使用卡片。如果没有个人实名认证就对卡进行激活操作(包括插卡上电激活或人工激活两种方式),卡状态在运营商侧会立即变更为“已停用(未实名制违规停机)”,这种场景仅可以共享流量(如果卡片组了前向流量池的话),但卡片本身不能正常使用,需要补充个人实名认证后才可以正常使用,认证成功后,卡片自动恢复为“在用”状态。物联网卡实名认证,请参考物联网卡实名认证。 中国移动卡购买限制:购买中国移动卡30M,选择组池的情况下需进行确认,”受政策影响,物联网小流量卡(30M)组池后,将限制单卡每月使用流量不超过100M;使用流量超过100M会被停用。若您已知晓此使用规则,请勾选。” 中国移动套餐月流量限制:中国移动套餐30M、100M,因政策限额管控,每月最大只能使用100M,超过100M时将会被停用,需次月恢复,无法配置定向流量(叠加包、前向流量池手段无效)。 中国移动流量卡区域限制:中国移动大流量套餐(月流量大于100M以上)使用上会被运营商策略进行管控,受到区域限制。卡片首次联网会自动绑定使用省份,更换省份使用需要换绑,可通过华为云工单联系工程师进行换绑处理,换绑处理时效1个工作日。 计费规则:请参考计费说明。 父主题: 购买物联网卡
  • 操作步骤 下载ISCDesk客户端。 用户被管理员添加/邀请进入组织后,会收到短信消息提醒,通过短信内容可以获取ISCDesk的下载链接。 用户也可以通过云商店工业软件云专区或工业软件SaaS服务中心官网下载ISCDesk。 以管理员身份安装、运行ISCDesk客户端。 在ISCDesk登录页,输入账号名和密码,单击“登录”,即可进入ISCDesk首页。 图1 ISCDesk登录页 登录页往下滑动,可以在“试用专区”试用和购买工具软件,还可以查看更多的工具软件及云服务的详情。 在ISCDesk客户端使用过程中,如果ISCDesk版本有更新,界面会弹出升级提醒。此时单击“立即更新”,可将ISCDesk升级到最新版本。 单击ISCDesk客户端右上角的,最小化到托盘。
  • 权限管理 应用平台开发中心、运维中心、运行时引擎和运营中心内置多种角色,用户可以申请不同角色权限,系统预制的详细角色信息请参考表1。应用平台系统权限列出了应用平台的所有系统权限,包括系统策略和系统角色。 表1 应用平台系统权限 子系统 角色名称 角色描述 应用平台系统级 租户管理员 为系统的超级管理员角色,应用平台服务开通者默认加入此角色。权限范围同管理员。 业务管理员 负责系统级功能的维护,如公告、应用基础信息(产品、服务、微服务)等。 开发中心 项目经理 服务级的管理员角色,可查看所在服务在开发中心中的所有内容,以及所有的操作。 开发人员 服务级的开发人员角色,可查看所在服务在开发中心中的所有内容,以及开发涉及的操作。 测试人员 服务级的测试人员角色,可查看所在服务在开发中心中的所有内容,以及测试涉及的操作。 浏览者 服务级的浏览者角色,可查看所在服务在开发中心中的所有内容,不可操作。 运维中心 运行时引擎 安全运维代表角色 安全运维代表作为安全领域审批人,对申请人申请权限或提交操作电子流的合理性和必要性进行审核,允许SRE申请。 数据库DBA角色 数据库管理员申请,数据库DBA角色横向拉通一个租户组的数据库管理,包括数据库服务的管理,数据库服务配置、变更操作的查看,作业平台、监控大盘和业务报表等的查看。 主机运维角色 主机运维人员申请,主机运维角色横向拉通一个租户组的主机管理,包括主机管理服务(VMS)的查看和编辑,作业平台、监控大盘和业务报表等的查看。 运维监控中心角色 仅限7x24小时运维监控室人员(SRE)申请,具有横向拉通一个租户组的运维告警/监控大盘/日志的查看处置权限。 产品研发代表岗位 产品研发代表作为研发领域审批人,对申请人申请权限或提交操作电子流的合理性和必要性进行审核,允许研发人员申请。 产品运维代表岗位 产品运维代表作为运维领域审批人,对申请人申请权限或提交操作电子流的合理性和必要性进行审核,允许SRE申请。 服务研发岗位 业务的研发人员申请,具体服务的监控大盘和业务报表、调用链、告警和事件、日志检索的查询,和原始日志的即席查询权限。 服务运维岗位 业务运维人员,仅允许业务SRE申请,具有SRE所负责服务的配置、服务的部署和升级、EAP编排、演练服务(WiseChaos)管理、自定义报表管理等权限。 服务数据分析岗位 大数据相关业务研发人员申请,用于在数据分析平台对业务数据分析,可查看服务的监控大盘和业务报表、日志检索、告警和事件等。 服务敏感数据研发管理岗位 业务研发人员申请,用于服务研发人员在访问凭据管理服务(ACMS)管理台做敏感配置管理。 运营中心 运营管理员 服务级运营数据管理角色,可执行数据管理,模型管理,指标管理,卡片管理,大屏管理,审计日志查看等运营管理动作。 指标开发者 服务级指标开发者角色,可执行数据接入,模型开发,指标开发,卡片开发,大屏管理等运营数据开发动作。 指标查看者 服务级运营数据查看人员角色,可查看运营中心的指标数据。
  • 购买试用商品时,页面提示需补充邮箱信息怎么办? 部分商品购买时,服务系统需要基于邮箱信息来创建初始账号,用户需按照页面提示在账号中心补充邮箱信息后,才能进行订购操作。邮箱信息补充完成后,不会立刻生效,需等待一段时间后再进行购买。 当购买联营商品试用时,页面提示联营应用未授权并且收到联营服务关联组织的信息,如何进行处理? 联营商品集成了云商店联营账号进行单点登录,实现一个账号登录使用多个产品的体验,如何开通联营账号,请参考《联营SaaS类商品使用指导》。
  • 邮箱登录地址 1. 登录地址: 进入“买家中心-我的云商店-已购买的服务”。查看“华为云企业邮箱”商品的资源详情,即可查看邮箱前后台地址。或直接通过下方邮箱前后台地址进入: 管理端:点击进入 (https://mail.sparkspace.huaweicloud.com/webadmin) 用户端:点击进入(https://mail.sparkspace.huaweicloud.com/) 2. 登录账号密码: 管理端登录账密:购买邮箱服务后,邮箱应用绑定组织后,即可通过该华为云账号登录管理端; 用户端登录账密:管理员创建成员时设置好账号密码,在授权邮箱应用后,且在管理后台为其开通邮箱后,成员可使用管理员提供的地址和账号密码,登录邮箱前台;如忘记密码,可找到管理员重置新密码后再登录访问邮箱。
  • 邮箱登录地址及登录密码如何查看? 1. 登录地址: 进入“买家中心-我的云商店-已购买的服务”。查看“华为云企业邮箱”商品的资源详情,即可查看邮箱前后台地址。或直接通过下方邮箱前后台地址进入: 管理端:点击进入 (https://mail.sparkspace.huaweicloud.com/webadmin) 用户端:点击进入(https://mail.sparkspace.huaweicloud.com/) 2. 登录账号密码: 管理端登录账密:购买邮箱服务后,邮箱应用绑定组织后,即可通过该华为云账号登录管理端; 用户端登录账密:管理员创建成员时设置好账号密码,在授权邮箱应用后,且在管理后台为其开通邮箱后,成员可使用管理员提供的地址和账号密码,登录邮箱前台;如忘记密码,可找到管理员重置新密码后再登录访问邮箱。 父主题: 邮箱开通及登录使用
  • 背景信息 ANALYZE语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,以生成最有效的执行计划。 建议在执行了大批量插入/删除操作后,例行对表或全库执行ANALYZE语句更新统计信息。目前默认收集统计信息的采样比例是30000行(即:GUC参数default_statistics_target默认设置为100),如果表的总行数超过一定行数(大于1600000),建议设置GUC参数default_statistics_target为-2,即按2%收集样本估算统计信息。 对于在批处理脚本或者存储过程中生成的中间表,也需要在完成数据生成之后显式的调用ANALYZE。 对于表中多个列有相关性且查询中有同时基于这些列的条件或分组操作的情况,可尝试收集多列统计信息,以便查询优化器可以更准确地估算行数,并生成更有效的执行计划。
  • 操作步骤 使用以下命令更新某个表或者整个database的统计信息。 ANALYZE tablename; --更新单个表的统计信息 ANALYZE; --更新全库的统计信息 使用以下命令进行多列统计信息相关操作。 ANALYZE tablename ((column_1, column_2)); --收集tablename表的column_1、column_2列的多列统计信息 ALTER TABLE tablename ADD STATISTICS ((column_1, column_2)); --添加tablename表的column_1、column_2列的多列统计信息声明 ANALYZE tablename; --收集单列统计信息,并收集已声明的多列统计信息 ALTER TABLE tablename DELETE STATISTICS ((column_1, column_2)); --删除tablename表的column_1、column_2列的多列统计信息或其声明 在使用ALTER TABLE tablename ADD STATISTICS语句添加了多列统计信息声明后,系统并不会立刻收集多列统计信息,而是在下次对该表或全库进行ANALYZE时,进行多列统计信息的收集。 如果想直接收集多列统计信息,请使用ANALYZE命令进行收集。 使用EXPLAIN查看各SQL的执行计划时,如果发现某个表SEQ SCAN的输出中rows=10,rows=10是系统给的默认值,有可能该表没有进行ANALYZE,需要对该表执行ANALYZE。
  • 支持范围 当前版本Plan Hint支持的范围如下,后续版本会进行增强。 指定Join顺序的Hint - leading hint。 指定Join方式的Hint,仅支持除semi/anti join,unique plan之外的常用hint。 指定结果集行数的Hint。 指定Stream方式的Hint。 指定Scan方式的Hint,仅支持常用的tablescan,indexscan和indexonlyscan的hint。 指定子链接块名的Hint。 指定倾斜信息的Hint,仅支持Join与HashAgg的重分布过程倾斜。
  • 示例 本章节使用同一个语句进行示例,便于Plan Hint支持的各方法作对比,示例语句及不带hint的原计划如下所示: explain select i_product_name product_name ,i_item_sk item_sk ,s_store_name store_name ,s_zip store_zip ,ad2.ca_street_number c_street_number ,ad2.ca_street_name c_street_name ,ad2.ca_city c_city ,ad2.ca_zip c_zip ,count(*) cnt ,sum(ss_wholesale_cost) s1 ,sum(ss_list_price) s2 ,sum(ss_coupon_amt) s3 FROM store_sales ,store_returns ,store ,customer ,promotion ,customer_address ad2 ,item WHERE ss_store_sk = s_store_sk AND ss_customer_sk = c_customer_sk AND ss_item_sk = i_item_sk and ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number and c_current_addr_sk = ad2.ca_address_sk and ss_promo_sk = p_promo_sk and i_color in ('maroon','burnished','dim','steel','navajo','chocolate') and i_current_price between 35 and 35 + 10 and i_current_price between 35 + 1 and 35 + 15 group by i_product_name ,i_item_sk ,s_store_name ,s_zip ,ad2.ca_street_number ,ad2.ca_street_name ,ad2.ca_city ,ad2.ca_zip ;
  • 参数说明 #,+,-,*,进行行数估算hint的四种操作符号。#表示直接使用后面的行数进行hint。+,-,*表示对原来估算的行数进行加、减、乘操作,运算后的行数最小值为1行。table_list为hint对应的单表或多表join结果集,与Join方式的Hint中table_list相同。 const可以是任意非负数,支持科学计数法。 例如: rows(t1 #5)表示:指定t1表的结果集为5行。 rows(t1 t2 t3 *1000)表示:指定t1, t2, t3 join完的结果集的行数乘以1000。
  • 建议 推荐使用两个表*的hint。对于两个表的采用*操作符的hint,只要两个表出现在join的两端,都会触发hint。例如:设置hint为rows(t1 t2 * 3),对于(t1 t3 t4)和(t2 t5 t6)join时,由于t1和t2出现在join的两端,所以其join的结果集也会应用该hint规则乘以3。 rows hint支持在单表、多表、function table及subquery scan table的结果集上指定hint。
  • 示例 对示例中原语句使用如下hint: explain select /*+ rows(store_sales store_returns *50) */ i_product_name product_name ... 该hint表示:store_sales,store_returns关联的结果集估算行数在原估算行数基础上乘以50。生成计划如下所示: 第11行算子的估算行数修正为360行,原估算行数为7行(四舍五入后取值)。
  • 现象描述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时,执行计划如下图所示:
  • 优化分析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时,选择最小的选择率作为总的选择率估算行数比较准确,查询性能较好,优化后的计划如下图所示:
  • 统计信息调优介绍 GaussDB是基于代价估算生成的最优执行计划。优化器需要根据analyze收集的统计信息进行行数估算和代价估算,因此统计信息对优化器行数估算和代价估算起着至关重要的作用。通过analyze收集全局统计信息,主要包括:pg_class表中的relpages和reltuples;pg_statistic表中的stadistinct、stanullfrac、stanumbersN、stavaluesN、histogram_bounds等。
  • 关联查询 多表关联嵌套深度必须小于8。 关联嵌套过深,容易产生慢sql,应从业务层考虑优化。 表关联查询必须明确指定各表的连接条件(ON),以避免产生笛卡尔积。 例如在MySQL中,JOIN与CROSS JOIN和INNER JOIN等价,但是在SQL标准中,JOIN仅与INNER JOIN等价,必须配合使用ON连接条件。 反例:如下2个示例会造成笛卡尔积查询 SELECT * FROM TABLE1 A , TABLE2 B; SELECT * FROM TABLE1 A JOIN TABLE2 B ON 1=1; 关联时,应该根据SQL标准指明连接方式,避免直接使用JOIN关键词,而是使用CROSS JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN等。 多表关联查询时, 必须应对表添加使用别名,保证语句逻辑清晰,便于维护。 不同字段的比较开销不同,关联字段应尽量使用比较效率高的字段类型。 数值类型的比较效率远高于字符串类型。 在数值类型中,整型效率高于NUMERIC和浮点类型。 关联字段应为相同数据类型,避免存在隐式类型转换影响执行效率。 少用嵌套子查询,尽量使用表关联,因为子查询会产生临时表,对SQL性能影响较大。 对于关联列上存在大量NULL值的情况,建议在WHERE条件中增加关联列IS NOT NULL的过滤条件,能够提升执行效率。 父主题: 数据库编程规范
  • 资源评估规范 基于表1模板估算台账,资源利用率尽量控制在40%~70%间,低40%建议缩容,高于70%建议扩容。 表1 GaussDB上线台账 组件 规格一 规格二 规格三 规格四 规格五 MEM/CPU 文件 磁盘容量 备注 CN 8C64G 16C128G 32C256G ARM:60C480G X86:64C512G / 8 /var/chroot/var/lib/log 64G 日志盘 /var/chroot/usr/local 256G 数据盘 DN 8C64G 16C128G 32C256G ARM:60C480G X86:64C512G / 8 /var/chroot/var/lib/log 64G 日志盘 /var/chroot/var/lib/engine/data 3788G 数据盘 /var/chroot/var/lib/log/backup 20G 备份会把元数据信息放一份到这个盘上 GTM 4C32G 8C64G 16C128G 32C256G ARM:60C480G X86:64C512G 8 /var/chroot/var/lib/log 32G 日志盘 1-9分片 9-16分片 16-32分片 32-64分片 64分片以上 /var/chroot/usr/local 32G 数据盘 CMS+ETCD 4C32G 8C64G 16C128G 32C256G ARM:60C480G X86:64C512G 8 /var/chroot/var/lib/log 32G 日志盘 1-9分片 9-16分片 16-32分片 32-64分片 64分片以上 /var/chroot/usr/local 64G 数据盘
  • 事件监控简介 事件监控提供了事件类型数据上报、查询和告警的功能。方便您将业务中的各类重要事件或对云资源的操作事件收集到云监控服务,并在事件发生时进行告警。 事件即云监控服务保存并监控的数据库资源的关键操作,您可以通过“事件”了解到谁在什么时间对系统哪些资源做了什么操作,如规格变更等。 事件监控为您提供上报自定义事件的接口,方便您将业务产生的异常事件或重要变更事件采集上报到云监控服务。 事件监控默认开通,您可以在事件监控中查看系统事件和自定义事件的监控详情,目前支持的系统事件请参见支持的事件列表。 父主题: 监控与告警
  • 现象描述 查询所有员工的信息: 1 2 3 4 5 6 7 SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id;
  • Plan Hint实际调优案例 本节以TPC-DS标准测试的Q24的部分语句为例,在1000X,24DN环境上,说明使用plan hint进行实际调优的过程。示例如下: select avg(netpaid) from (select c_last_name ,c_first_name ,s_store_name ,ca_state ,s_state ,i_color ,i_current_price ,i_manager_id ,i_units ,i_size ,sum(ss_sales_price) netpaid from store_sales ,store_returns ,store ,item ,customer ,customer_address where ss_ticket_number = sr_ticket_number and ss_item_sk = sr_item_sk and ss_customer_sk = c_customer_sk and ss_item_sk = i_item_sk and ss_store_sk = s_store_sk and c_birth_country = upper(ca_country) and s_zip = ca_zip and s_market_id=7 group by c_last_name ,c_first_name ,s_store_name ,ca_state ,s_state ,i_color ,i_current_price ,i_manager_id ,i_units ,i_size); 该语句的初始计划如下,运行时间110s: 该计划中,第10层算子使用broadcast性能较差,由于第11层算子估算行数为2140,比实际行数严重低估。错误行数估算主要来源于第13层算子的行数低估,根因是第13层hashjoin中,使用store_sales的(ss_ticket_number, ss_item_sk)列和store_returns的(sr_ticket_number, sr_item_sk)列进行关联,由于缺少多列相关性的估算导致行数严重低估。 2. 使用如下的rows hint进行调优后,计划如下,运行时间318s: select avg(netpaid) from (select /*+rows(store_sales store_returns * 11270)*/ c_last_name ... 时间反而劣化了,原因是第8层hashjoin过慢引起第9层redistribute时间过慢导致,其中第9层redistribute并没有数据倾斜,hashjoin慢的原因是由于第18层redistribute后数据倾斜导致。 3. 经过实际数据查证,customer_address的两个join列的不同值数目较少,使用其进行join容易出现数据倾斜,故把customer_address放到最后进行join。使用如下的hint进行调优后,计划如下,运行时间116s: select avg(netpaid) from (select /*+rows(store_sales store_returns *11270) leading((store_sales store_returns store item customer) customer_address)*/ c_last_name ... 发现时间基本花在了第6层redistribute算子上,需要进一步优化。 4. 由于最后一层redistribute包含倾斜,所以时间较长。为了避免倾斜,需要将item表放在最后join,由于item表的join并不能使行数减少。修改hint如下并执行,计划如下,运行时间120s: select avg(netpaid) from (select /*+rows(store_sales store_returns *11270) leading((customer_address (store_sales store_returns store customer) item)) c_last_name ... 该计划中的redistribute问题并没有解决,因为第22层item表做了broadcast,导致与customer_address表join后的倾斜并没有被消除掉。 5. 增加如下禁止item表做broadcast的hint,使与customer_address join的表做redistribute(也可以进行join表redistribute的hint),计划如下,运行时间105s: select avg(netpaid) from (select /*+rows(store_sales store_returns *11270) leading((customer_address (store_sales store_returns store customer) item)) no broadcast(item)*/ c_last_name ... 6. 发现最后一层使用单层Agg,但行数缩减较多。使用相同的hint,同时结合参数best_agg_plan=3进行双层Agg调优,最终计划如下图所示,运行时间94s,完成调优。 如果有统计信息变更引起的查询劣化,可以考虑用plan hint来调整到之前的查询计划。这里以TPCH-Q17为例,在收集default_statistics_target设置为–2的统计信息之后,计划相比于默认统计信息发生劣化。 1. 默认统计信息(default_statistics_target设置为100)的计划如下: 2. 统计信息变更(default_statistics_target设置为–2)的计划如下: 3. 经过对比,劣化的原因主要为lineitem和part表join时stream类型由BroadCast变更为Redistribute导致。可以对语句进行stream方式的hint来调整到之前的计划,例如: 父主题: 使用Plan Hint进行调优
  • 优化分析 如果将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); 则执行计划将存在“Streaming”,导致DN之间存在较大通信数据量,如图1所示。 图1 选择合适的分布列案例(一) 如果将a作为t1的分布列,将b作为t2的分布列: 1 2 CREATE TABLE t1 (a int, b int) DISTRIBUTE BY HASH (a); CREATE TABLE t2 (a int, b int) DISTRIBUTE BY HASH (b); 则执行计划将不包含“Streaming”,减少DN之间存在的通信数据量,从而提升查询性能,如图2所示。 图2 选择合适的分布列案例(二)
  • GUC参数编程规范 客户端(如JDBC)应使用默认(全局)参数执行查询,禁用会话级别的GUC参数。 通过ODBC或JDBC修改GUC参数时,需注意GUC参数仅会在当前connection中生效,特别是在连接池场景下,容易发生问题,且导致问题定位困难。 如果在连接中必须进行GUC参数设置,那么在将连接归还给连接池之前,必须使用 SET SESSION AUTHORIZATION DEFAULT; RESET ALL; 将连接的状态清空。 父主题: 数据库编程规范
  • INSERT INSERT ON DUPLICATE KEY UPDATE不支持对主键或唯一约束的列上执行UPDATE。 INSERT ON DUPLICATE KEY UPDATE的语义是对唯一约束冲突的行进行更新,这个过程中不应对约束的值进行更新。 INSERT ON DUPLICATE KEY UPDATE如果插入多条数据,这些数据之间不允许存在主键/唯一约束冲突。 与MySQL行为存在一定差异,MYSQL允许此行为,例如如下语句: INSERT INTO t1 VALUES(1, 1), (1, 2) ON DUPLICATE KEY UPDATE col2 = VALUES(col2); 不符合SQL标准,SQL标准不允许在同一条SQL COMMAND中,对插入行同时进行修改,使得结果无可预期。例如上例中,假设col1为主键,那么此时会在同一个COMMAND中,既插入一条主键为1的,同时对已插入进行修改。由于事务串行化无法确认哪一个操作先执行,因此可能导致结果不稳定。 如果插入的数据本身存在冲突,在分布式场景下更新应以哪一条记录为准难以确定。 禁止对存在多个唯一约束的表执行INSERT ON DUPLICATE KEY UPDATE。 表中存在多个唯一约束包括存在多个唯一索引,或既存在主键(PRIMARY KEY),又存在唯一索引(UNQUE INDEX)两种情况。 当存在多个唯一约束时,会默认检查所有的唯一约束条件,只要任何一个约束存在冲突,就会对冲突行进行更新,即可能更新多条记录,与业务预期不相符。业务应给予更加明确的插入更新条件。 对于批量插入的情况,建议使用INSERT INTO TABLE1 VALUES (),(),(),执行效率将高于执行多条INSERT INTO VALUES()。 由于目前无法识别多个值是否属于一个shard,所以要使用/*+ multinode */ 来允许此语句执行。 无论单条和多条插入,关键字均需是VALUES。 不支持MySQL的INSERT INTO mytable VALUE()的用法。 父主题: 数据库编程规范
  • 存储层数据倾斜 GaussDB数据库中,数据分布存储在各个DN上,通过分布式执行提高查询的效率。但是,如果数据分布存在倾斜,则会导致分布式执行某些DN成为瓶颈,影响查询性能。这种情况通常是由于分布列选择不合理,可以通过调整分布列的方式解决。 例如下例: gaussdb=# explain performance select count(*) from inventory; 5 --CStore Scan on lmz.inventory dn_6001_6002 (actual time=0.444..83.127 rows=42000000 loops=1) dn_6003_6004 (actual time=0.512..63.554 rows=27000000 loops=1) dn_6005_6006 (actual time=0.722..99.033 rows=45000000 loops=1) dn_6007_6008 (actual time=0.529..100.379 rows=51000000 loops=1) dn_6009_6010 (actual time=0.382..71.341 rows=36000000 loops=1) dn_6011_6012 (actual time=0.547..100.274 rows=51000000 loops=1) dn_6013_6014 (actual time=0.596..118.289 rows=60000000 loops=1) dn_6015_6016 (actual time=1.057..132.346 rows=63000000 loops=1) dn_6017_6018 (actual time=0.940..110.310 rows=54000000 loops=1) dn_6019_6020 (actual time=0.231..41.198 rows=21000000 loops=1) dn_6021_6022 (actual time=0.927..114.538 rows=54000000 loops=1) dn_6023_6024 (actual time=0.637..118.385 rows=60000000 loops=1) dn_6025_6026 (actual time=0.288..32.240 rows=15000000 loops=1) dn_6027_6028 (actual time=0.566..118.096 rows=60000000 loops=1) dn_6029_6030 (actual time=0.423..82.913 rows=42000000 loops=1) dn_6031_6032 (actual time=0.395..78.103 rows=39000000 loops=1) dn_6033_6034 (actual time=0.376..51.052 rows=24000000 loops=1) dn_6035_6036 (actual time=0.569..79.463 rows=39000000 loops=1) 在performance信息中,可以看到inventory表各DN的scan行数,发现各DN的行数差距较大,最大的为63000000,最小的只有15000000,差了4倍。这个差距对于数据扫描的性能影响还可以接受,但如果上层有join算子,则影响较大。 通常,数据表在各DN上是hash分布的,因此分布列的选择很重要。通过table_skewness()来查看上述inventory表在各DN的数据分布倾斜,查询结果如下: gaussdb=# select table_skewness('inventory'); table_skewness ------------------------------------------ ("dn_6015_6016 ",63000000,8.046%) ("dn_6013_6014 ",60000000,7.663%) ("dn_6023_6024 ",60000000,7.663%) ("dn_6027_6028 ",60000000,7.663%) ("dn_6017_6018 ",54000000,6.897%) ("dn_6021_6022 ",54000000,6.897%) ("dn_6007_6008 ",51000000,6.513%) ("dn_6011_6012 ",51000000,6.513%) ("dn_6005_6006 ",45000000,5.747%) ("dn_6001_6002 ",42000000,5.364%) ("dn_6029_6030 ",42000000,5.364%) ("dn_6031_6032 ",39000000,4.981%) ("dn_6035_6036 ",39000000,4.981%) ("dn_6009_6010 ",36000000,4.598%) ("dn_6003_6004 ",27000000,3.448%) ("dn_6033_6034 ",24000000,3.065%) ("dn_6019_6020 ",21000000,2.682%) ("dn_6025_6026 ",15000000,1.916%) (18 rows) 通过查询建表定义,可以发现,目前该表是以inv_date_sk作为分布列的,导致存在倾斜。通过查看各列的数据分布情况,改为inv_item_sk作为分布列,则倾斜情况分布如下: gaussdb=# select table_skewness('inventory'); table_skewness ------------------------------------------ ("dn_6001_6002 ",43934200,5.611%) ("dn_6007_6008 ",43829420,5.598%) ("dn_6003_6004 ",43781960,5.592%) ("dn_6031_6032 ",43773880,5.591%) ("dn_6033_6034 ",43763280,5.589%) ("dn_6011_6012 ",43683600,5.579%) ("dn_6013_6014 ",43551660,5.562%) ("dn_6027_6028 ",43546340,5.561%) ("dn_6009_6010 ",43508700,5.557%) ("dn_6023_6024 ",43484540,5.554%) ("dn_6019_6020 ",43466800,5.551%) ("dn_6021_6022 ",43458500,5.550%) ("dn_6017_6018 ",43448040,5.549%) ("dn_6015_6016 ",43247700,5.523%) ("dn_6005_6006 ",43200240,5.517%) ("dn_6029_6030 ",43181360,5.515%) ("dn_6025_6026 ",43179700,5.515%) ("dn_6035_6036 ",42960080,5.487%) (18 rows) 数据分布倾斜的问题得到解决。
  • 选择分布方式 复制表(Replication)方式将表中的全量数据在集群的每一个DN实例上保留一份。主要适用于记录集较小的表。这种存储方式的优点是每个DN上都有该表的全量数据,在join操作中可以避免数据重分布操作,从而减小网络开销,同时减少了plan segment(每个plan segment都会起对应的线程);缺点是每个DN都保留了表的完整数据,造成数据的冗余。一般情况下只有较小的维度表才会定义为Replication表。 哈希(Hash)表将表中某一个或几个字段进行hash运算后,生成对应的hash值,根据DN实例与哈希值的映射关系获得该元组的目标存储位置。对于Hash分布表,在读/写数据时可以利用各个节点的IO资源,大大提升表的读/写速度。一般情况下大表定义为Hash表。 范围(Range)和列表(List)分布是由用户自定义的分布策略,根据分布列的取值落入满足一定范围或者具体值的对应目标DN,这两种分布方式便于用户灵活地进行数据管理,但对用户本身的数据抽象能力有一定的要求。 策略 描述 适用场景 Hash 表数据通过hash方式散列到集群中的所有DN实例上。 数据量较大的事实表。 Replication 集群中每一个DN实例上都有一份全量表数据。 小表、维度表。 Range 表数据对指定列按照范围进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 List 表数据对指定列按照具体值进行映射,分布到对应DN。 用户需要自定义分布规则的场景。 如图1所示,复制表如图中的表T1,哈希表如图中的表T2。 图1 复制表和哈希表 父主题: 审视和修改表定义
  • 性能因素 多个性能因素会影响数据库性能,了解这些因素可以帮助定位和分析性能问题。 系统资源 数据库性能在很大程度上依赖于磁盘的I/O和内存使用情况。为了准确设置性能指标,用户需要了解集群部署硬件的基本性能。CPU,硬盘,磁盘控制器,内存和网络接口等这些硬件性能将显著影响数据库的运行速度。 负载 负载等于数据库系统的需求总量,它会随着时间变化。总体负载包含用户查询,应用程序,并行作业,事务以及数据库随时传递的系统命令。比如:多用户在执行多个查询时会提高负载。负载会显著地影响数据库的性能。了解工作负载高峰期可以帮助用户更合理地利用系统资源,更有效地完成系统任务。 吞吐量 使用系统的吞吐量来定义处理数据的整体能力。数据库的吞吐量以每秒的查询次数、每秒的处理事务数量或平均响应时间来测量。数据库的处理能力与底层系统(磁盘I/O,CPU速度,存储器带宽等)有密切的关系,所以当设置数据库吞吐量目标时,需要提前了解硬件的性能。 竞争 竞争是指两组或多组负载组件尝试使用冲突的方式使用系统的情况。比如,多条查询视图同一时间更新相同的数据,或者多个大量的负载争夺系统资源。随着竞争的增加,吞吐量下降。 优化 数据库优化可以影响到整个系统的性能。在执行SQL制定、数据库配置参数、表设计、数据分布等操作时,启用数据库查询优化器打造最有效的执行计划。
  • 调优范围确定 性能调优主要通过查看集群各节点的CPU、内存、I/O和网络这些硬件资源的使用情况,确认这些资源是否已被充分利用,是否存在瓶颈点,然后针对性调优。 如果某个资源已达瓶颈,则通过查询最耗时的SQL语句、跑不出来的SQL语句,找出耗资源的SQL,进行SQL调优指南。 如果所有资源均未达瓶颈,则表明性能仍有提升潜力。可以查询最耗时的SQL语句,或者跑不出来的SQL语句,进行针对性的SQL调优指南。
共100000条