华为云用户手册

  • 微认证的实验在哪里进行 方式一:手册型实验 购买微认证后,系统会自动发放一张实验代金券,用户下载实验手册后根据相关指引,在华为云控制台购买所需资源,并完成实验操作;实验结束请及时释放资源,以免不必要的资源浪费及扣费;代金券有效期为1个月,请尽快使用。 方式二:KooLabs云实验 直接通过微认证详情页“认证流程-动手实验”,跳转至“KooLabs云实验”,跟随实验环境内左侧指引完成实验操作。 父主题: 微认证实验常见问题
  • 实验页签 实验手册右侧有两个页签按钮,分别是实验拓扑图页签和实验桌面页签,以及实验手册收起/展开按钮。 实验拓扑图页签:点击后可查看实验拓扑图,展示了实验所用各服务间的逻辑关系,点击拓扑图中的服务logo,可查看该服务的介绍、优势和作用等信息。在服务介绍页中点击【进入实验环境】,可跳转实验桌面。 实验桌面页签:点击后可进入实验桌面,该桌面是Linux的图形化桌面。实验的所有操作,都将在这个实验桌面中进行。 父主题: 实验界面介绍
  • 如何进行实验 进入KooLabs云实验,可通过下图路径进入,也可通过KooLabs云实验链接(KooLabs云实验链接:https://lab.huaweicloud.com)进入。 在KooLabs云实验首页,可浏览推荐实验、KooLabs云实验介绍、热门实验等信息内容。 点击【全部实验列表】,进入实验列表页,查看所有KooLabs云实验。可从实验方向、实验难度进行实验筛选,也可以搜索实验。 点击实验卡片,进入实验详情页,可了解进一步了解实验详细内容,包括实验目标与基本要求、实验摘要、实验手册、实验相关实验、实验所用产品和实验相关课程等相关内容。 此时,需点击实验详情页右上角【登录】进行账号登录,且需完成实名认证。若无华为云账号,可点击【注册】进行账号注册。 登录已实名认证的华为云账号后,点击页面中【开始实验】,可获取实验名额,进入实验。KooLabs云实验每日0点限量提供免费实验名额,若免费实验名额已使用结束,或当日免费实验名额被领取完,可通过实验点购买实验名额。 父主题: 如何进入KooLabs云实验
  • 实验中记录和已完成记录 在【我的实验】页面中的实验记录页中,可查看实验中和已完成的实验记录。 实验中记录:记录未完成的实验信息,可查看到实验方向、实验名称、开始时间和结束时间、上次操作的实验进度及剩余实验时长,点击【再次实验】可使用剩余时间再次开始实验。 已完成实验记录:记录已完成的实验信息,可查看已完成实验的实验方向、实验名称、开始时间、完成时间、实验进度和实验用时,点击右侧【再次实验】可再次进行实验,点击右侧【实验报告】按钮可查看该实验的实验报告。 父主题: 如何查看实验记录
  • 考试内容 HCIA-IoT考试包含物联网概念、物联网层次架构、华为物联网解决方案、常见物联网通 信技术、NB-IoT 通信技术及解决方案、5G 通信技术及解决方案、工业物联网关、家庭物联网关、 物联网行业应用与解决方案、物联网操作系统 Huawei LiteOS 基本概念与架构、Huawei LiteOS内核与框架、华为云 物联网平台 、华为云物联网平台二次开发、华为云物联网平台业务流程、通信 模组AT 指令等内容。
  • 修订记录 修订日期 修订记录 2022-11-14 增加免费实验名额更新时间点 2022-07-15 刷新示例截图 2022-06-29 沙箱实验室 更名为KooLabs 2022-02-16 刷新部分图片提示 2022-01-13 “华为云培训中心”更名为“华为云开发者学堂” 2021-10-21 “华为云学院”更名为“华为云培训中心” 2021-03-16 刷新实验点购买入口链接 2021-01-22 刷新部分截图,刷新实验详情页实验手册介绍 2021-01-11 添加纠错入口操作说明 2020-12-31 刷新操作指导、界面介绍、延时操作介绍、实验点购买等常见问题 2020-08-31 云端实验室更名为沙箱实验室 2019-10-31 新增实验点和常见问题 2019-05-17 帮助文档发布 父主题: 华为云实验
  • 为什么正在考试时提示我“认证不通过”? 考试期间,如系统 人脸识别 失败,可能会因系统多次“识别非本人”导致“认证不通过”系统强制交卷。因此,在考试时请注意: 请使用Google Chrome(48版本以上)浏览器,保证高质量的网络环境。 建议再次考试时,清除浏览器缓存,或更换一台电脑重试。 请关闭其他无关应用程序,仅打开一个浏览器页面,并清除浏览器缓存,上传照片进行识别验证。 请选择独立、安静、明亮的空间环境开展考试,前后无强光,反光,无他人路过干扰检测框。 请考试过程中请保持坐姿稳定,避免大幅度动作,保证头像在检测框内,不要中途离开,避免人脸识别失败。 如果仍然无法解决您的问题,请联系华为云人工客服协助排查。 父主题: 微认证考试常见问题
  • 为什么要获得华为云认证? 华为云职业认证 范围涵盖云服务、鲲鹏、物联网、人工智能、大数据、 GaussDB 、openGauss等前沿领域,帮助华为云用户全面提升业务理解、架构设计、应用开发等核心能力。华为对不同级别的合作伙伴,有相应的认证要求,具体请参见对应的合作伙伴计划。 通过职业认证可以 收获知识:认证体系覆盖多个前沿热门技术领域,通过学习,学员能紧跟技术发展趋势,获取最新的技术知识 收获技能:基于不同角色设计,理论知识与实践技能并重,采用笔试、实验、面试等考试形式,综合提升学员技能 收获机遇:获得认证的学员,将具备相应领域的技术知识与实践技能,其职业规划将拥有更多可能,实现职业进阶 收获信任:认证证书能够让学员的知识广度和技能深度显性化,助力学员快速赢得雇主、客户和同事的信任 收获自信:在备考过程中激发潜能、达成目标,通过自身不懈努力赢得认证,将加深对自身能力的肯定,更易走向成功 华为云微认证 提供一站式在线学习、实验与考试,零基础也可学习前沿技术知识,快速获得场景化的技能提升。通过考试可以获得官方认证证书,可以获得华为云面试优先推荐等其他权益。 华为云开发者认证是华为云聚焦云上应用设计、构建和运维打造的系统化认证,帮助开发者基于华为云服务及工具进行开发、实践、应用构建,与云上技术齐驱并进,助力开发者职业成功。 父主题: 关于华为云认证
  • 实验报告 实验报告记录了实验的操作信息及步骤完成状态。实验报告中可查看实验名称、实验开始和完成时间、实验内容、实验目标、完成状态、问题列表和过程记录等信息。 在实验报告界面中,点击左上角【返回我的实验】可返回我的实验页面,点击右上角【下载实验报告】可下载实验报告。 至此,相信您已经了解了KooLabs云实验基本操作方式,还在等什么?马上到KooLabs云实验开始实验吧! 父主题: 如何查看实验记录
  • 如果无法在预约时间参加考试,可否重新预约考试? 考生至少提前于考试预约时间 24 小时对已预约的考试进行改期或者取消,否则无法完成操作。考生若未能及时改期或缺考,考试费用将不予退还。 考生可通过以下三种方式改期或取消考试: 访问 Pearson VUE 网站,根据页面提示自行修改; 联系 Pearson VUE 客户服务中心,改期或取消考试; 联系 Pearson VUE 考试中心,请考试管理员帮忙改期或取消考试。 父主题: 关于职业认证报考与备考
  • 为什么微认证证书超过24小时还没生成? 请检查在考试结束后是否“未交卷”即退出;可通过点击微认证详情页第4步“在线考试”进行确认。 微认证考试成绩大于70分则考试通过,请检查是否通过考试;可通过点击微认证详情页第4步“在线考试”进行确认。 请确认是否已完成邮箱绑定,点击绑定邮箱并刷新,等待系统生成证书。 如以上步骤检查无误,请再次确认证书生成时间是否超过24h,部分时间段,考试人数较多,将影响系统生成证书的时间。 如无法解决,请联系小助手(邮箱:huaweicloudedu@huawei.com,微信:HWcloudedu),或者拨打客服热线4000-955-988或950808选择人工客服咨询。 父主题: 微认证证书常见问题
  • 如何获得华为云认证? 如果您需要获得华为云职业认证,建议您按照华为云开发者学堂职业认证页面指引在线学习认证课程或报名参加HALP线下面授培训,然后登录Pearson VUE网站或华为官网报名并参加认证考试,通过认证考试后,即可前往华为官网网站下载证书。 如果您需要获得华为云微认证,仅需通过华为云开发者学堂微认证在线学习,并完成在线实验和通过在线考试,即可在认证详情页面在线申请微认证证书。 如果您需要获得华为云开发者认证,仅需完成在线学习和实验练习,并通过理论和实验考试,即可在认证详情页面在线申请开发者认证证书。 父主题: 关于华为云认证
  • 购买的微认证包含哪些权益?使用“微认证兑换码”兑换的微认证与自行购买的微认证享受的权益有区别吗? 用户购买微认证后可获得如下权益: 在线课程永久观看 实验代金券一张(如动手实验需要使用付费资源),自购买认证起30天内有效(注:部分微认证实验通过华为云官方实验平台KooLabs云实验开展,不产生实际付费,不发放实验代金券。) 5次考试机会 通过考试后可获取华为云开发者学堂官方微认证证书及其他相关微认证权益 使用“微认证兑换码”兑换的微认证与自行购买的微认证享受的权益一致,无任何区别。 父主题: 微认证购买常见问题
  • 备份原理 云数据库GaussDB(for MySQL)基于华为最新一代DFV存储,采用计算与存储分离架构,计算层用于给外界提供服务,管理日志信息,存储层存储数据信息。存储层分为Common Log节点和Slice Store 节点,Common Log节点存储日志信息,Slice Store节点存储数据信息。 如图3所示,GaussDB(for MySQL)实例的备份是由计算层和存储层各自完成的。 计算层的主节点读取存储层的Common Log节点的日志信息,通过主节点备份到 对象存储服务 (OBS)中。 计算层的主节点向存储层的Slice Store节点发送命令备份数据信息,通过Slice Store节点备份到对象存储服务(OBS)中。 备份过程会占用少量CPU内存资源。因此在备份期间,实例主节点的CPU使用率和内存使用率,会有一点升高,属于正常现象,存储层的备份用户侧不感知。最终的备份文件将以多个数据文件形式存储在对象存储服务(OBS)中,不会占用实例的磁盘空间。 图3 备份原理
  • 通过Hint指定SQL发往主节点或只读节点 在SQL开头添加hint注释进行强制路由; /*FORCE_MASTER*/强制路由到主节点; /*FORCE_SLAVE*/强制路由到只读节点; 在读写分离权重分配体系之外,Hint可作为另外一种SQL补充语法来指定相关SQL到主节点或只读节点执行。 Hint注释仅作为路由建议,非只读SQL、事务中的场景不能强制路由到只读节点。 使用 MySQL 命令行进行连接并使用 Hint 语句时,需要在命令中增加 -c 选项,否则 Hint 会被 MySQL 命令行工具过滤。
  • 模式描述 更改Multi-Statements模式立即生效,无需重启数据库代理。但如果模式切换前存在由于执行了Multi-Statements导致读写分离失效的连接,不会因为切换模式而恢复读写分离,需要断开重连才能恢复。 Strict模式(默认) Multi-Statements会发往主节点,当前连接的后续请求读写分离失效,会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 该模式不会解析Multi-Statements,性能好,适合短连接、无连接复用场景。 Loose模式 Multi-Statements会发往主节点,当前连接的后续请求依旧可以读写分离。 该模式不会解析Multi-Statements,性能好,适合Multi-Statements内仅含DML SQL,不含设置session变量、创建临时表、创建存储过程、执行未提交事务等操作的场景。 Parse模式 该模式下,Multi-Statements会发往主节点,同时数据库代理会解析Multi-Statements,根据Multi-Statements内包含的SQL情况,决定当前连接的后续请求是否恢复读写分离。详细内容请参见Parse模式场景说明。 由于该模式会解析Multi-Statements,对代理性能有一定影响,影响程度与Multi-Statements的长度和复杂性相关,建议Multi-Statements小于100MB,避免数据库代理解析SQL消耗过多的资源,引起性能明显下降。
  • 操作场景 创建GaussDB(for MySQL)数据库实例时,系统默认开启自动备份策略,暂不支持关闭。实例创建成功后,您可根据业务需要设置自动备份策略。GaussDB(for MySQL)按照用户设置的自动备份策略对数据库进行备份。 GaussDB(for MySQL)的备份操作是实例级的,而不是数据库级的。当数据库故障或数据损坏时,可以通过备份恢复数据库,从而保证数据可靠性。由于开启备份会损耗数据库读写性能,建议您选择业务低峰时间段启动自动备份。 开启自动备份策略后,会自动触发一次全量备份。之后仍然会按照策略中的备份时间段和备份周期进行全量备份。实例在执行备份时,会将数据从实例上拷贝并上传到OBS备份空间,按照策略中的保留天数进行存放,备份时长和实例的数据量有关。 在进行全量备份的同时系统每5分钟会自动生成增量备份,用户不需要设置。生成的增量备份可以用来将库表数据恢复到指定时间点。
  • Parse模式场景说明 当Multi-Statements包含如下场景时,后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 Multi-Statements内创建临时表。 Multi-Statements内创建存储过程。 Multi-Statements内含未提交的事务(如执行了begin,但未执行commit或rollback)。 Multi-Statements过于复杂或含特殊语法等导致Multi-Statements解析失败。
  • 操作场景 您可以复制您创建的自定义数据库参数模板。当您已创建一个数据库参数模板,并且想在新的数据库参数模板中包含该组中的大部分自定义参数和值时,复制参数模板是一个方便的解决方案。您还可以复制某数据库实例应用的参数列表,生成一个新的参数模板,供您后期使用。 复制数据库参数模板之后,您应至少等待5分钟,再创建使用该数据库参数模板作为默认参数模板的第一个数据库实例。 您无法复制默认参数模板。不过,您可以创建基于默认参数模板的新参数模板。
  • 架构 云数据库GaussDB(for MySQL)采用计算与存储分离的架构,以减少网络流量为主要架构准则,通过NDP设计将该准则应用到查询操作。没有NDP之前,查询处理需要将原始数据从存储节点全部传输到计算节点。通过NDP设计,查询中的I/O密集型和CPU密集型的大部分工作被下推到存储节点完成,仅将所需列及筛选后的行或聚合后的结果值回传给计算节点,使网络流量大幅减少。同时跨存储节点并行处理,使计算节点CPU使用率下降,提升了查询效率性能。 另外,NDP框架同GaussDB(for MySQL)并行查询进行融合,并进行了页面批量预取的设计,达成执行全流程并行,进一步提升查询执行效率。
  • 注意事项 升级数据库内核小版本会重启GaussDB(for MySQL)实例,服务可能会出现闪断,请您尽量在业务低峰期执行该操作,或确保您的应用有自动重连机制。 如果实例有大量表分区(100w+),重启实例时间可能会达到2小时以上。 如果数据库内核从8.0.18升级到8.0.22版本,分区数大于1000时可能会升级失败,请升级之前联系华为云工程师协助检查版本兼容性。 如果主节点和只读节点在同一个AZ,升级内核小版本会触发一次主备倒换;如果在不同AZ,则会触发两次主备倒换。主备倒换指主节点与只读节点进行切换。 升级实例小版本时,如有只读节点,也会同步升级只读节点的小版本,升级完成会重启实例,请您选择合适的时间升级(不支持单独升级只读实例的小版本)。升级内核小版本后,实例会升级到最新的内核小版本,升级成功,无法降级。 小版本升级过程中禁止event的ddl操作,如create event、drop event和alter event。 如果只读节点到主节点的复制延迟大于300秒,则无法升级小版本。
  • 操作步骤 生成测试数据。 请在https://github.com/electrum/tpch-dbgen下载TPCH共用源码。 请在下载的源码文件中,找到makefile.suite文件,并按照如下内容进行修改,修改完成后进行保存。 CC = gcc# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)# SQLSERVER, SYBASE, ORACLE# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,# SGI, SUN, U2200, VMS, LINUX, WIN32# Current values for WORKLOAD are: TPCHDATABASE= SQLSERVERMACHINE = LINUXWORKLOAD = TPCH 在源码根目录下,执行下列命令,编译生成TPCH数据工具dbgen。 make -f makefile.suite 使用dbgen执行如下命令,生成TPCH数据100G。 ./dbgen -s 100 登录目标GaussDB(for MySQL)实例,创建目标数据库,并使用如下命令创建TPCH的表。 CREATE TABLE nation ( N_NATIONKEY INTEGER NOT NULL, N_NAME CHAR(25) NOT NULL, N_REGIONKEY INTEGER NOT NULL, N_COMMENT VARCHAR(152));CREATE TABLE region ( R_REGIONKEY INTEGER NOT NULL, R_NAME CHAR(25) NOT NULL, R_COMMENT VARCHAR(152));CREATE TABLE part ( P_PARTKEY INTEGER NOT NULL, P_NAME VARCHAR(55) NOT NULL, P_MFGR CHAR(25) NOT NULL, P_BRAND CHAR(10) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE INTEGER NOT NULL, P_CONTAINER CHAR(10) NOT NULL, P_RETAILPRICE DECIMAL(15,2) NOT NULL, P_COMMENT VARCHAR(23) NOT NULL );CREATE TABLE supplier ( S_SUPPKEY INTEGER NOT NULL, S_NAME CHAR(25) NOT NULL, S_ADDRESS VARCHAR(40) NOT NULL, S_NATIONKEY INTEGER NOT NULL, S_PHONE CHAR(15) NOT NULL, S_ACCTBAL DECIMAL(15,2) NOT NULL, S_COMMENT VARCHAR(101) NOT NULL);CREATE TABLE partsupp ( PS_PARTKEY INTEGER NOT NULL, PS_SUPPKEY INTEGER NOT NULL, PS_AVAILQTY INTEGER NOT NULL, PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, PS_COMMENT VARCHAR(199) NOT NULL );CREATE TABLE customer ( C_CUSTKEY INTEGER NOT NULL, C_NAME VARCHAR(25) NOT NULL, C_ADDRESS VARCHAR(40) NOT NULL, C_NATIONKEY INTEGER NOT NULL, C_PHONE CHAR(15) NOT NULL, C_ACCTBAL DECIMAL(15,2) NOT NULL, C_MKTSEGMENT CHAR(10) NOT NULL, C_COMMENT VARCHAR(117) NOT NULL);CREATE TABLE orders ( O_ORDERKEY INTEGER NOT NULL, O_CUSTKEY INTEGER NOT NULL, O_ORDERSTATUS CHAR(1) NOT NULL, O_TOTALPRICE DECIMAL(15,2) NOT NULL, O_ORDERDATE DATE NOT NULL, O_ORDERPRIORITY CHAR(15) NOT NULL, O_CLERK CHAR(15) NOT NULL, O_SHIPPRIORITY INTEGER NOT NULL, O_COMMENT VARCHAR(79) NOT NULL);CREATE TABLE lineitem ( L_ORDERKEY INTEGER NOT NULL, L_PARTKEY INTEGER NOT NULL, L_SUPPKEY INTEGER NOT NULL, L_LINENUMBER INTEGER 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); 使用如下命令,将生成的数据导入到TPCH的表中。 load data INFILE '/path/customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|';load data INFILE '/path/region.tbl' INTO TABLE region FIELDS TERMINATED BY '|';load data INFILE '/path/nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|';load data INFILE '/path/supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|';load data INFILE '/path/part.tbl' INTO TABLE part FIELDS TERMINATED BY '|';load data INFILE '/path/partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|';load data INFILE '/path/orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|';load data INFILE '/path/lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|'; 创建TPCH表的索引。 alter table region add primary key (r_regionkey);alter table nation add primary key (n_nationkey);alter table part add primary key (p_partkey);alter table supplier add primary key (s_suppkey);alter table partsupp add primary key (ps_partkey,ps_suppkey);alter table customer add primary key (c_custkey);alter table lineitem add primary key (l_orderkey,l_linenumber);alter table orders add primary key (o_orderkey); 请在https://github.com/dragansah/tpch-dbgen/tree/master/tpch-queries获取TPCH 22个查询query语句,并进行相应操作。
  • 不适用并行执行的情况 下列的查询语句不支持并行执行: 非查询语句 窗口函数 触发器 Prepared Statements 空间索引 查询表为系统表/临时表/非Innodb表 使用全文索引 存储过程 不能转换成semijoin的子查询 不满足only_full_group_by 使用索引归并Index merge 加锁查询,如serializable隔离级别,for update/share lock 递归查询 With rollup 存在HIGH_PRIORITY关键字 执行结果返回0行数据(执行计划显示:Zero limit、Impossible WHERE、Impossible HAVING、No matching min/max row、Select tables optimized away、Impossible HAVING noticed after reading const tables、no matching row in const table等) 查询中包含zerofill的列,并且这些列能被优化为常量 generated column、BLOB、TEXT、JSON和GEOMETRY Spatial相关函数(如SP_WITHIN_FUNC等) aggregation(distinct),如sum(distinct)、avg(distinct)、count(distinct) GROUP_CONCAT JSON_ARRAYAGG/JSON_OBJECTAGG 用户自定义函数 STD/STDDEV/STDDEV_POP VARIANCE/VAR_POP/VAR_SAMP BIT_AND, BIT_OR and BIT_XOR set_user_var rand(不含参数的除外) json_*(如json_length,json_type等) st_distance get_lock is_free_lock,is_used_lock,release_lock, release_all_locks sleep xml_str weight_string ref函数(VIEW_REF, OUTER_REF, AGGREGATE_REF), SHA,SHA1,SHA2,MD5 row_count round user相关函数(user, current_user, session_user, system_user等)
  • 与串行执行结果可能不兼容 并行执行的执行结果可能存在与串行执行不兼容的情况,主要表现在: 错误或者告警提示次数可能会增多 对于在串行执行中出现错误/告警提示的查询,在并行执行情况下,每个工作线程可能都会提示错误/告警,导致总体错误/告警提示数会增多。 精度问题 并行执行的执行过程中,当select的内容是函数类型时,会比非并行执行多出中间结果的存储过程,可能会导致浮点部分精度差别,导致最终结果有细微的差别。 截断问题 并行执行的执行过程中,当select的内容是函数类型时,会比非并行执行多出中间结果的存储过程。在这个过程中,需要缓存函数的计算结果,可能出现截断(一般是类型转换导致的,例如浮点数类型转为字符串等), 导致最终结果与串行结果有差别。 结果集顺序差别 因为是多个工作线程执行查询,返回的结果集可能与非并行执行顺序不一致。在具有LIMIT查询的情况下,更容易出现与串行结果顺序不同的现象。对于不可见字符,当MySQL判断多个不可见字符相等时,可能会出现结果集顺序不同,或者group by字段不同的现象。 union all结果集差别 union all会忽略其中的排序算子,并行执行下返回的结果集顺序可能与非并行不一致。在有limit查询的情况下,会出现结果集不同的现象。
  • 支持的系统参数和状态变量 表1 系统参数 参数名 级别 描述 force_parallel_execute Global, Session 是否开启并行查询,当设置为ON时,表示查询SQL尽可能地使用并行执行。 · 取值范围:ON, OFF · 默认值OFF parallel_max_threads Global 并行执行的最大活跃线程个数。当并行执行的活跃线程超过该值时,新的查询将不允许启用并行执行。 · 取值范围:0-4294967295 · 默认值:64 parallel_default_dop Global, Session 并行执行的默认并行度。当查询语句没有指定并行度时,使用该值。 · 取值范围:0-1024 · 默认值:4 parallel_cost_threshold Global, Session 启用并行执行的代价阈值。只有当查询的执行代价超过该阈值时才有可能进行并行执行。 · 取值范围:0-4294967295 · 默认值:1000 parallel_queue_timeout Global, Session 当不满足并行查询的条件时,请求并行执行的SQL等待超时时间。当等待时间超过该值后,则不再等待,开始进行单线程执行。 · 取值范围:0-4294967295 · 默认值:0 parallel_memory_limit Global 并行执行可用的内存上限。当并行执行使用的内存量超过该值时,新的SQL查询将不会进行并行执行。 · 取值范围:0-4294967295 · 默认值:104857600 表2 状态变量 变量名 级别 描述 PQ_threads_running Global 当前正在运行的并行执行的总线程数。 PQ_memory_used Global 当前并行执行使用的总内存量。 PQ_threads_refused Global 由于总线程数限制,导致未能执行并行执行的查询总数。 PQ_memory_refused Global 由于总内存限制,导致未能执行并行执行的查询总数。
  • 方法一:通过设置系统参数开启/关闭并行查询 在管理控制台的参数修改页面,通过设置系统参数,开启和关闭并行查询,并设置并行度。 通过全局参数force_parallel_execute来控制是否强制启用并行执行; 使用全局参数parallel_default_dop来控制使用多少线程并行执行; 使用全局参数parallel_cost_threshold来控制当执行代价为多大时,开启并行执行。 上述参数在使用过程中,随时可以修改,无需重启数据库。 例如,想要强制开启并行执行,并且并发度为4,最小执行代价为0,可参照如下进行设置: SET force_parallel_execute=ON SET parallel_default_dop=4 SET parallel_cost_threshold=0
  • 数据库索引设计规范 根据实际业务需求,减少使用无法利用索引优化的order by查询语句。Order by、group by、distinct这些语句较为耗费CPU资源。 涉及到复杂SQL语句时,优先参考已有索引进行设计,通过执行explain,查看执行计划,利用索引,增加更多查询限制条件。 使用新的SELECT、UPDATE、DELETE语句时,都需要通过explain查看执行计划中的索引使用情况,尽量避免extra列出现:Using File Sort,Using Temporary。当执行计划中扫描的行数超过1000时,需要评估是否允许上线。需每日进行慢日志统计分析,处理慢日志语句。 explain解读: type:ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)。 possible_keys:指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。 key:表示MySQL实际决定使用的键(索引),如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX 或者IGNORE INDEX。 ref:哪些列或常量被用于查找索引列上的值。 rows:根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。 Extra: Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询。 Using filesort:MySQL中无法利用索引完成的排序操作称为“文件排序”。 Using index:表示使用索引,如果只有 Using index,说明没有查询到数据表,只用索引表即完成了这个查询,这种情况为覆盖索引。如果同时出现Using where,代表使用索引来查找读取记录, 也是可以用到索引的,但是需要查询到数据表。 Using where:表示条件查询,如果不读取表的所有数据,或不是仅仅通过索引就可以获取所有需要的数据,则会出现 Using where。如果type列是ALL或index,而没有出现该信息,则你有可能在执行错误的查询,返回所有数据。 在WHERE条件列上使用函数,会导致索引失效。 示例:如 WHERE left(name, 5) = 'zhang',left函数会导致name上的索引失效。 修改方案:可在业务侧修改该条件,不使用函数。当返回结果集较小时,业务侧过滤满足条件的行。
  • 应用场景 并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。 轻分析类业务 报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。 系统资源相对空闲 并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。 数据频繁查询 针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。 并行查询特性当前处于公测阶段,建议在测试环境使用。
  • 索引规范 避免因为字段类型不同造成的隐式转换,导致索引失效。 业务上具有唯一特性的字段,即使是多个字段的组合,建议在所有具有唯一特性字段的最小集合上建立唯一索引。 例如:一个表含有有a,b,c,d,e,f字段,在业务上ab和ef分别是具有唯一特性的字段集合,那么最好在最小集合ab和ef上分别建立唯一索引。 即使在应用层做了完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。 同时需要考虑建立的唯一索引对查询是否真正有帮助,没有帮助的索引可以考虑删除; 需要考虑多建立的索引对插入性能的影响,根据唯一性相关的数据正确性需求,以及性能需求来权衡是不是需要多建立唯一性索引。 尽量在定长的字段(如:INT)上建立索引;在varchar字段上建立索引时,必须指定索引长度,无需对全字段建立索引,根据实际文本区分度决定索引长度即可。 索引长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引区分度会高达90%以上,可以使用count(distinct left(列名,索引长度))/count(*)的区分度来确定。(有区分度的放前面,没有区分度的放后面)。 页面搜索避免使用左模糊(如:SELECT * FROM users WHERE u_name LIKE ‘%hk’)或者全模糊,避免从索引扫描退化为全表扫描,如果需要请在应用层解决。 索引文件具有B-tree的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。 利用覆盖索引来进行查询操作,避免回表,但是覆盖索引加的字段不能太多,要兼顾写性能。 能够建立索引的种类:主键索引、唯一索引、普通索引,而覆盖索引是一种查询的效果,利用explain的结果,extra列会出现:using index。 SQL性能优化的目标:至少要达到range级别,要求是ref级别,如果可以是consts最好。 创建组合索引的时候,区分度最高的在左边。 单张表的索引数量控制在5个以内,或不超过表字段个数的20%。 创建索引避免有如下误解: 宁滥勿缺。误认为一个查询就需要建一个索引。 宁缺勿滥。误认为索引会消耗空间、严重拖慢更新和新增速度。 抵制唯一索引。误认为业务的唯一性一律需要在应用层通过“先查后插”方式能解决。 父主题: 设计规范
  • 库表规范 所有创建的MySQL表必须为InnoDB引擎,适配MySQL的其它引擎不支持事务。 小数类型为decimal,禁止使用float和double。 float和double在存储的时候,存在精度损失的问题,很可能在值比较的时候得到的结果有误。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储。 禁用保留字,如desc、range、match、delayed等,请参考MySQL官方保留字。 数据表必须有主键,可以使用业务相关,有序且具有唯一性的字段作为主键,也可以使用业务无关的自增长字段作为主键。 表字段必须有默认值加NOT NULL,数字类型默认值推荐给0,varchar等字符类型默认值推荐空字符串''。 无主键不仅容易导致主库执行速度慢和复制延迟问题。 避免使用分区表,如有需要,可以使用多个独立的表代替。 分区表的缺点: DDL操作需要锁定所有分区,导致所有分区上操作都被阻塞。 当表数据量较大时,对分区表进行DDL或其他运维操作难度大风险高。 分区表使用较少,存在未知风险。 当单台服务器性能无法满足时,对分区表进行分拆的成本较高。 当分区表操作不当导致访问所有分区时,会导致严重的性能问题。 建议表包含两个字段:create_time,update_time, 且均为datetime类型。 数据仓库 拖取数据时可以利用这两个统一字段无需询问业务。 在数据库出现意外时可以判断数据进入数据库和修改的时间,在极端情况可以帮助数据恢复的判断。 单表行数超过500万行或者单表容量超过2GB时,推荐进行分库分表。对于是否需要分库分表,由用户自身的业务决定,此处不做强制要求。 varchar是可变长字符串,不预先分配存储空间,长度不要超过2048。 如果存储长度大于此值,定义字段类型为text,或者独立出来一张表,用主键来对应,避免影响其他字段索引效率。 表单行行内长度不得超过1024字节,单表数据量控制在500万行以内。 控制单表字段数量,字段上限50个。 如果存储的字符串长度几乎相等,使用char定长字符串类型。 字段允许适当跨表冗余,以避免关联查询,提高查询性能,但必须考虑数据一致。 冗余字段应遵循: 不是频繁修改的字段。 不是varchar超长字段和text字段。 合适的存储长度(不建议使用LONG TEXT, BLOB等长类型字段),不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。 父主题: 设计规范
共100000条