华为云用户手册

  • 如何获得华为云认证? 如果您需要获得华为云职业认证,建议您按照华为云开发者学堂职业认证页面指引在线学习认证课程或报名参加HALP线下面授培训,然后登录Pearson VUE网站或华为官网报名并参加认证考试,通过认证考试后,即可前往华为官网网站下载证书。 如果您需要获得华为云微认证,仅需通过华为云开发者学堂微认证在线学习,并完成在线实验和通过在线考试,即可在认证详情页面在线申请微认证证书。 如果您需要获得华为云开发者认证,仅需完成在线学习和实验练习,并通过理论和实验考试,即可在认证详情页面在线申请开发者认证证书。 父主题: 关于华为云认证
  • 为什么微认证证书超过24小时还没生成? 请检查在考试结束后是否“未交卷”即退出;可通过点击微认证详情页第4步“在线考试”进行确认。 微认证考试成绩大于70分则考试通过,请检查是否通过考试;可通过点击微认证详情页第4步“在线考试”进行确认。 请确认是否已完成邮箱绑定,点击绑定邮箱并刷新,等待系统生成证书。 如以上步骤检查无误,请再次确认证书生成时间是否超过24h,部分时间段,考试人数较多,将影响系统生成证书的时间。 如无法解决,请联系小助手(邮箱:huaweicloudedu@huawei.com,微信:HWcloudedu),或者拨打客服热线4000-955-988或950808选择人工客服咨询。 父主题: 微认证证书常见问题
  • 如果无法在预约时间参加考试,可否重新预约考试? 考生至少提前于考试预约时间 24 小时对已预约的考试进行改期或者取消,否则无法完成操作。考生若未能及时改期或缺考,考试费用将不予退还。 考生可通过以下三种方式改期或取消考试: 访问 Pearson VUE 网站,根据页面提示自行修改; 联系 Pearson VUE 客户服务中心,改期或取消考试; 联系 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 命令行工具过滤。
  • Parse模式场景说明 当Multi-Statements包含如下场景时,后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。 Multi-Statements内创建临时表。 Multi-Statements内创建存储过程。 Multi-Statements内含未提交的事务(如执行了begin,但未执行commit或rollback)。 Multi-Statements过于复杂或含特殊语法等导致Multi-Statements解析失败。
  • 模式描述 更改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分钟会自动生成增量备份,用户不需要设置。生成的增量备份可以用来将库表数据恢复到指定时间点。
  • 操作场景 您可以复制您创建的自定义数据库参数模板。当您已创建一个数据库参数模板,并且想在新的数据库参数模板中包含该组中的大部分自定义参数和值时,复制参数模板是一个方便的解决方案。您还可以复制某数据库实例应用的参数列表,生成一个新的参数模板,供您后期使用。 复制数据库参数模板之后,您应至少等待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
  • 应用场景 并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。 轻分析类业务 报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。 系统资源相对空闲 并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。 数据频繁查询 针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。 并行查询特性当前处于公测阶段,建议在测试环境使用。
  • 数据库索引设计规范 根据实际业务需求,减少使用无法利用索引优化的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上的索引失效。 修改方案:可在业务侧修改该条件,不使用函数。当返回结果集较小时,业务侧过滤满足条件的行。
  • 索引规范 避免因为字段类型不同造成的隐式转换,导致索引失效。 业务上具有唯一特性的字段,即使是多个字段的组合,建议在所有具有唯一特性字段的最小集合上建立唯一索引。 例如:一个表含有有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等长类型字段),不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。 父主题: 设计规范
  • 事件监控支持的事件说明 表1 云数据库GaussDB(for MySQL) 事件来源 事件名称 事件ID 事件级别 事件说明 处理建议 事件影响 GaussDB(for MySQL) 实例增量备份业务失败 TaurusIncrementalBackupInstanceFailed 重要 实例增量备份失败产生的事件,一般是管理节点到实例网络或者实例到OBS存储的网络异常,或者实例备份环境异常。 提交工单。 无法完成实例备份业务操作。 添加只读节点失败 addReadonlyNodesFailed 重要 创建实例只读节点失败产生的事件,一般是底层资源耗尽导致。 检查并释放资源后重新创建。 无法创建数据库实例只读节点。 创建实例业务失败 createInstanceFailed 重要 创建实例失败产生的事件,一般是配额大小不足,底层资源耗尽导致。 检查配额大小,释放资源后重新创建。 无法创建数据库实例。 主备切换异常 activeStandBySwitchFailed 重要 主备切换异常主要是由于网络、物理机有某种故障导致只读节点没有接管主节点的业务,短时间内会恢复到原主节点继续提供服务。 提交工单。 无法完成主备切换(只读升主)。 规格变更业务失败 flavorAlterationFailed 重要 规格变更失败产生的事件,一般是配额大小不足,底层资源耗尽导致。 提交工单。 无法完成规格变更。 实例运行状态异常 TaurusInstanceRunningStatusAbnormal 重要 实例运行状态异常产生的事件,可能原因是实例进程故障,或者实例到DFV存储间通信问题。 提交工单。 实例异常,业务可能受损。 实例运行状态异常已恢复 TaurusInstanceRunningStatusRecovered 重要 实例运行状态异常后恢复产生的事件。 观察业务运行情况。 无。 节点运行状态异常 TaurusNodeRunningStatusAbnormal 重要 运行节点状态异常产生的事件,可能原因是节点进程故障,或者节点到DFV存储间通信问题。 观察实例状态和业务运行情况。 节点异常,可能触发只读升主。 节点运行状态异常已恢复 TaurusNodeRunningStatusRecovered 重要 节点运行状态异常后恢复产生的事件。 观察业务情况。 无。 删除只读节点失败 TaurusDeleteReadOnlyNodeFailed 重要 删除只读节点失败产生的事件,可能原因是管理面到实例节点通信异常或者请求IaaS删除虚机失败。 提交工单。 无法完成删除只读节点操作。 实例重置密码失败 TaurusResetInstancePasswordFailed 重要 实例重置密码失败产生的事件,可能原因是管理面到实例通信异常或者实例状态异常件。 检查确认实例状态后重试,未解决则提交工单。 无法完成实例重置密码操作。 实例重启失败 TaurusRestartInstanceFailed 重要 实例重启失败产生的事件,可能原因是管理面到实例通信异常或者实例状态异常。 检查确认实例状态后重试,未解决则提交工单。 无法完成实例重启操作。 恢复到新实例失败 TaurusRestoreToNewInstanceFailed 重要 恢复到新实例失败产生的事件,一般是新创建实例配额大小不足,底层资源耗尽导致或者数据恢复逻辑出错。 如果是新创建实例失败,检查配额大小,释放资源后重新恢复到新实例,其他情况提交工单。 无法完成恢复到新实例。 实例绑定EIP失败 TaurusBindEIPToInstanceFailed 重要 实例绑定EIP失败产生的事件,绑定任务执行错误。 提交工单。 无法完成绑定EIP操作。 实例解绑EIP失败 TaurusUnbindEIPFromInstanceFailed 重要 实例解绑EIP失败产生的事件,解绑任务执行错误。 提交工单。 无法完成解绑EIP操作。 实例修改参数失败 TaurusUpdateInstanceParameterFailed 重要 实例修改参数失败产生的事件,一般是管理节点到实例网络异常,或者实例状态异常。 检查确认实例状态后重试,未解决则提交工单。 无法完成实例修改参数操作。 实例参数组应用失败 TaurusApplyParameterGroupToInstanceFailed 重要 实例参数组应用失败产生的事件,一般是管理节点到实例网络异常,或者实例状态异常。 检查确认实例状态后重试,未解决则提交工单。 无法完成实例参数组应用操作。 实例全量备份业务失败 TaurusBackupInstanceFailed 重要 实例全量备份失败产生的事件,一般是管理节点到实例网络或者实例到OBS存储的网络异常,或者实例实例备份环境异常。 提交工单。 无法完成实例备份业务操作。 实例主备切换 TaurusActiveStandbySwitched 重要 实例故障时被动倒换产生的事件。 检查确认实例状态是否恢复,未解决则提交工单。 业务闪断。 实例设置为只读模式 NodeReadonlyMode 重要 实例设置为只读状态,只支持查询类操作。 提交工单。 实例设置只读状态后,所有写业务返回失败。 实例设置为读写模式 NodeReadWriteMode 重要 实例设置为读写状态。 提交工单。 无。 实例容灾切换 DisasterSwitchOver 重要 实例故障不可用,通过容灾切换保证数据库继续对外提供服务。 联系技术支持团队处理。 访问数据库的业务出现闪断,高可用服务通过切换机制保证新机器升主继续对外提供服务。 数据库进程重新启动 TaurusDatabaseProcessRestarted 重要 一般是内存不足、负载过高导致数据库进程停止。 通过云监控的数据,查看是否有内存飙升、CPU长期过高等的情况,可以选择提升CPU内存规格或者优化业务逻辑。 数据库进程挂掉的时候,该节点业务中断。高可用服务会自动拉起进程,尝试恢复业务。 父主题: 事件监控
  • 操作系统更新 云数据库 GaussDB(for MySQL)实例需要适时进行操作系统更新,以提高数据库性能和数据库的整体安全状况。 实例内核版本升级时,云数据库 GaussDB(for MySQL)会根据操作系统的实际情况,决定是否更新以及更新适合的操作系统冷补丁版本。 操作系统更新不会更改数据库实例的版本或数据库实例信息。 此外,云数据库 GaussDB(for MySQL)会在用户设置的运维时间段内,通过热补丁方式及时修复影响重大的操作系统漏洞。 父主题: 变更实例
  • 支持审计的关键操作列表 通过云审计服务,您可以记录与GaussDB(for MySQL)实例相关的操作事件,便于日后的查询、审计和回溯,支持的主要操作事件如表1所示。 表1 云审计服务支持的GaussDB(for MySQL)操作列表 操作名称 资源类型 事件名称 创建实例 instance createInstance 添加只读节点 instance addNodes 删除只读节点 instance deleteNode 重启实例 instance restartInstance 修改实例端口 instance changeInstancePort 修改实例安全组 instance modifySecurityGroup 只读实例升级为主实例 instance instanceSwitchOver 绑定或解绑公网IP instance setOrResetPublicIP 删除实例 instance deleteInstance 重命名实例名称 instance renameInstance 修改节点优先级 instance modifyPriority 创建数据库 instance createDatabase 创建数据库用户 instance createDatabaseUser 重置密码 instance resetPassword 删除数据库 instance dropDatabase 删除数据库用户 instance dropDatabaseUser 修改数据库用户密码 instance modifyDatabaseUserPwd 备份恢复到新实例 instance restoreInstance 开启读写分离 instance openProxy 关闭读写分离 instance closeProxy 设置读写分离权重 instance setProxyWeight 变更实例的CPU和内存规格 instance resizeFlavorOrVolume 设置秒级监控 instance openSecondExtend 升级内核小版本 instance upgradeVersion 添加标签 instance addInstanceTags 数据库用户授权 instance grantDatabaseUser 回收数据库用户权限 instance revokeDatabaseUser 创建备份 backup createManualSnapshot 设置自动备份策略 backup setBackupPolicy 删除备份 backup deleteManualSnapshot 创建参数模板 parameterGroup createParameterGroup 修改参数模板 parameterGroup updateParameterGroup 删除参数模板 parameterGroup deleteParameterGroup 复制参数模板 parameterGroup copyParameterGroup 重置参数模板 parameterGroup resetParameterGroup 比较参数模板 parameterGroup compareParameterGroup 应用参数模板 parameterGroup applyParameterGroup 父主题: CTS审计
  • GaussDB(for MySQL)自定义策略样例 示例1:授权用户创建GaussDB(for MySQL)实例 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "gaussdb:instance:create" ] } ]} 示例2:拒绝用户删除GaussDB(for MySQL)实例 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予GaussDB FullAccess的系统策略,但不希望用户拥有GaussDB FullAccess中定义的删除GaussDB(for MySQL)实例权限,您可以创建一条拒绝删除GaussDB(for MySQL)实例的自定义策略,然后同时将GaussDB FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对GaussDB(for MySQL)执行除了删除GaussDB(for MySQL)实例外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Deny" "Action": [ "gaussdb:instance:delete" ], } ]} 示例3:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Action": [ "gaussdb:instance:create", "gaussdb:instance:modify", "gaussdb:instance:delete", "vpc:publicIps:list", "vpc:publicIps:update" ], "Effect": "Allow" } ] } 示例4 对目标用户授权管理指定的实例和实例的部分功能 假设您的帐号下有多个实例,但是作为管理员。您希望授权GaussDB(for MySQL)实例中的部分实例给目标用户,并授予部分功能给目标用户,那么您可以创建如下权限策略: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "gaussdb:instance:restart", "gaussdb:instance:modify" ], "Resource": [ "GAUSSDB:*:*:instance:test*" ] }, { "Effect": "Allow", "Action": [ "gaussdb:param:list", "gaussdb:tag:list", "gaussdb:backup:list", "gaussdb:instance:create", "gaussdb:instance:list" ] } ]} 被授予该权限策略的目标用户号可以查看所有的实例,但只能管理已被授权的实例。同时作为管理员,您仍然可以使用API直接管理上述实例。被授予该权限策略的目标用户仅可以对帐号下所有的GaussDB(for MySQL)实例进行重启和修改实例操作,但不允许进行其他任何操作。 test*是对实例名称的模糊匹配,在权限策略中是必须的,否则被授权的用户无法在控制台看到任何实例。 GaussDB(for MySQL)支持通过用户进行API级别的访问控制,您可以通过相关API对GaussDB(for MySQL)进行细粒度的权限访问控制,详情请参见API概览。
  • 约束限制 存在以下场景则无法创建异构容灾实例: 表1 限制条件 限制场景 原因 未开启Binlog 原实例和容灾实例之间需要使用Binlog实时同步数据。 Binlog格式不是row 可能导致容灾链路中断。 存在触发器 可能导致原实例和容灾实例之间数据不一致 存在事件 可能导致原实例和容灾实例之间数据不一致。 库名、表名、字段名、索引等存在特殊字符 可能导致容灾链路中断。 数据量过大(超过4TB) 容灾实例的容量存在上限。 安全组限制 容灾链路无法连接数据库以同步数据。 冻结状态 冻结状态无法创建容灾实例。 VPC子网IP不足 容灾实例也会占用同子网IP。 无主键表或无索引表且存在大量操作 可能导致容灾链路中断。 外键级联操作 可能导致原实例和容灾实例之间数据不一致。
  • 计费说明 GaussDB(for MySQL)为您免费提供监控频率为60秒/次的监控服务,开通秒级监控会产生额外费用,且计费方式为按需计费(每小时扣费一次),不足一小时按照实际使用时长收费。 表1 秒级监控价格说明 区域 规格 按需(元/小时) 上海一、北京二、北京四、广州、贵阳一、乌兰察布一、广州友好 1秒监控 0.1 5秒监控 0.048 新加坡、雅加达、香港、曼谷、土耳其 1秒监控 0.236 5秒监控 0.118 圣保罗一 1秒监控 0.4 5秒监控 0.2
  • 事件监控简介 事件监控提供了事件类型数据上报、查询和告警的功能。方便您将业务中的各类重要事件或对云资源的操作事件收集到云监控服务,并在事件发生时进行告警。 事件即云监控服务保存并监控的GaussDB(for MySQL)资源的关键操作,您可以通过“事件”了解到谁在什么时间对系统哪些资源做了什么操作,如删除只读节点、规格变更等。 事件监控为您提供上报自定义事件的接口,方便您将业务产生的异常事件或重要变更事件采集上报到云监控服务。 事件监控默认开通,您可以在事件监控中查看系统事件和自定义事件的监控详情,目前支持的系统事件请参见事件监控支持的事件说明。 父主题: 事件监控
  • 操作场景 开通读写分离时,需选择加入代理的节点(包括主节点和只读节点)。 各业务可以通过代理实例的读写分离地址连接实例。且读请求会分别发往连接的代理实例。您也可以对代理实例添加或移除节点。 同一个节点(包括主节点和只读节点)可以同时被多个代理实例选择,并设置不同的读权重配比。权重分配具体操作请参见设置读写分离权重。 读写模式的代理实例,可代理读、写请求,其中,写请求全部路由给主节点,读请求根据读权重配比分发到各个节点。 只读模式的代理实例,只能代理读请求,读请求根据读权重配比分发到各个只读节点。不会分发到主节点,即使主节点被选为服务节点且已配置读权重,也不会生效。 图1 多个代理实例
  • 操作场景 对于“按需计费”和“Serverless”模式的实例,您可根据业务需要,在GaussDB(for MySQL)数据库“实例管理”页面手动删除来释放资源。 执行操作中的实例不能手动删除,只有在实例操作完成后,才可被删除。 “按需计费”类型的实例删除后将不再产生费用,自动备份会被同步删除,保留的手动备份会继续收取费用。 删除“按需计费”和“Serverless”模式的实例时,会同步删除其对应的只读节点,请谨慎操作。 当数据库实例被删除时,数据库实例的自动备份将被同步删除,手动备份不会被删除。 通过数据库回收站中重建实例功能,具体请参见回收站。
共100000条