云服务器内容精选

  • GaussDB (for MySQL)产品优势 性能强悍:采用计算与存储分离,日志即数据架构,RDMA网络。对于某些业务负载,吞吐量最高可提升至开源MySQL7倍。 弹性扩展:1写15只读节点,分钟级添加只读实例,规格升降级。 高可靠性:跨AZ部署,数据三副本,共享分布式存储,RPO为0,秒级故障倒换。 安全防护:采用共享分布式存储,故障秒级恢复,数据0丢失;采用VPC、安全组、SSL连接和 数据加密 等严格控制安全访问。 高兼容性:兼容MySQL,应用无需改造即可轻松迁移上云。 海量存储:华为自研DFV分布式存储,容量高达128TB,。
  • 方案架构 本示例中,数据库源端为E CS 自建MySQL,目的端为GaussDB(for MySQL)实例,同时假设ECS和GaussDB(for MySQL)实例在同一个VPC中。部署架构如图1所示。 如果自建MySQL和GaussDB(for MySQL)实例不在同一个VPC内,相比于相同VPC的情况,需要配置两个VPC的对等连接,部署架构图如图2所示。 图1 同一VPC的部署架构 图2 不同VPC场景的部署架构
  • 初始化磁盘 执行如下命令,创建mysql文件夹。 mkdir /mysql 执行如下命令,查看数据盘信息。 fdisk -l 回显如下: 执行如下命令,初始化数据盘。 mkfs.ext4 /dev/vdb 执行如下命令,挂载磁盘。 mount /dev/vdb /mysql 执行如下命令,查看磁盘是否挂载成功。 df -h 当显示如下回显时,表示挂载成功。 依次执行如下命令,创建文件夹并切换至install文件夹。 mkdir -p /mysql/install/data mkdir -p /mysql/install/tmp mkdir -p /mysql/install/file mkdir -p /mysql/install/log cd /mysql/install 下载并安装社区版MySQL,详情请参见如何下载并安装MySQL客户端。 执行如下命令,初始化mysql。 /mysql/install/mysql-8.0.22/bin/mysqld --defaults-file= /etc/my.cnf --initialize-insecure 执行如下命令,启动MySQL。 nohup /mysql/install/mysql-8.0.22/bin/mysqld --defaults-file= /etc/my.cnf & 执行如下命令,连接MySQL。 /mysql/install/mysql-8.0.22/bin/mysql 执行如下命令,创建root用户并授权。 grant all privileges on *.* to 'root'@'%' identified by 'xxx' with grant option;FLUSH PRIVILEGES;
  • 使用须知 按需实例不支持手动进行磁盘扩容。按需实例不存在磁盘容量的限制,会根据实际使用情况进行自动扩缩容。 针对包年/包月实例,您在购买实例时选择了多大的磁盘容量,系统就会分配多大的磁盘容量。如果后期存储需求超过当前的磁盘容量,GaussDB(for MySQL)会自动扩容,扩容的部分将按需计费。如果后面存储需求下降,则优先会将自动扩容的磁盘容量进行缩容。 示例:比如您够买实例时选择了10GB的磁盘容量,后来需求增加到了18GB,GaussDB(for MySQL)会自动扩容到18GB来满足您的存储需求。此后您通过手动方式将磁盘容量扩充了10GB,这个时候原来购买的磁盘容量和手动扩容的磁盘容量总计有20GB,已经可以满足您的存储需求,这20GB将按照包年/包月来计费,之前GaussDB(for MySQL)自动扩容的磁盘容量会自动缩容,不再产生按需计费。 自动扩缩容都是按需的,不存在磁盘步长。手动扩缩容的磁盘步长为10GB。 手动缩容只能对手动扩容部分或购买实例时设置的存储空间进行操作。 扩容期间,服务不中断,备份业务不受影响。 GaussDB(for MySQL)数据库实例支持无限次容量变更。 容量变更过程中,该实例不可重启和删除。
  • 智能诊断 基于运行数据结合智能算法对实例进行智能诊断,并对异常项提供具体的诊断结果以及优化建议。 图2 健康智能诊断 单击异常诊断项名称,查看异常实例以及相关监控指标的数据。 例如:出现“高压力请求”异常情况时,可以单击“高压力请求”查看出现异常的实例信息、对应的CPU使用率、CPU使用率趋势,还可以单击操作列的“诊断详情”,查看详细的诊断结果。 支持的诊断项以及诊断异常的处理建议,请参见表4。 表4 智能诊断说明 诊断项 监控指标 指标说明 处理建议 相关案例 高压力请求 CPU使用率 (%) 该指标用于统计测量对象的CPU使用率。 评估业务SQL的执行计划,添加索引避免全表扫描。 扩容CPU规格,满足计算型业务需求。 GaussDB(for MySQL) CPU使用率高的解决方法 TPS (次/秒) 该指标用于统计事务执行次数,含提交的和回退。 QPS (次/秒) 该指标用于统计SQL语句查询次数,含存储过程。 内存超限风险 内存使用率 (%) 该指标用于统计测量对象的内存使用率。 扩容实例规格,满足业务需求。 优化SQL,减少临时表等的使用。 会话定期重连,及时释放session级别内存。 长事务产生大量临时表导致内存超限的解决办法 数据库总连接数 (个) 该指标用于统计试图连接到MySQL服务器的总连接数。 当前活跃连接数 (个) 该指标用于统计非sleep状态的连接。 慢SQL高频 慢日志个数统计 (个/分钟) 该指标展示每分钟GaussDB(for MySQL)产生慢日志的数量。 根据慢SQL的执行计划进行优化。 扩容CPU规格,满足业务需求。 联合索引设置不当导致慢SQL的解决办法 连接数超限 数据库总连接数 (个) 该指标用于统计连接到GaussDB(for MySQL)服务器的总连接数。 排查业务侧连接是否有效,优化实例连接,释放不必要的连接。 实例规格偏小,需要对数据库进行规格扩容。 GaussDB(for MySQL)数据库连接数满的排查思路 当前活跃连接数 (个) 该指标用于统计当前活跃的连接数。 连接数使用率(%) 该指标用于统计当前已用的GaussDB(for MySQL)连接数占最大连接数的百分比。
  • 活动告警 根据设置的告警规则,可查看当前账号下所有GaussDB(for MySQL)实例的活动告警记录,包含“告警中(指标)”,“已触发(事件)”。 在活动告警页面右上方,单击“设置告警规则”,跳转到 云监控服务 页面。 系统默认内置一条告警规则,支持修改、停用、删除等操作,详见修改告警规则。 单击“创建告警规则”,为数据库实例新建指标监控或事件监控告警规则。更多操作,详情参见创建告警规则和通知。 在活动告警页面右上方,选择时间范围,查看告警详情。 支持查看告警的时间窗为:近1小时、近6小时、近12小时、近1天、近1周、近1月。 告警级别统计:查看告警总触发数和不同级别下各自触发数。告警级别包括:紧急、重要、次要、提示。 告警总数TOP5实例:查看告警总数TOP5的实例,鼠标悬停可查看当前实例各级别的告警触发数。 查看紧急告警详情:关于紧急告警的详细说明请参见表3。 表3 紧急告警说明 类别 说明 实例名称 触发告警的实例名称。刷新页面后,实时展示最新触发的告警详情。 状态 统计当前区域下所有实例的活动告警记录,包含“告警中(指标)”,“已触发(事件)”。 告警中:监控指标数值达到告警配置阈值,资源正在告警中。 已触发:监控的资源触发了告警策略中配置的事件。 告警类型 告警规则适用的告警类型。 告警中(指标) 已触发(事件) 告警策略 触发告警规则的告警策略。 当告警类型选择指标监控时,是否触发告警取决于连续周期的数据是否达到阈值。例如:CPU使用率监控周期为5分钟,连续三个周期平均值≥80%,则触发告警。 CPU使用率高的处理建议,请参见GaussDB(for MySQL) CPU使用率高的解决方法。 当告警类型选择事件监控时,触发告警具体的事件为一个瞬间的事件。例如:创建实例业务失败,则触发告警。 支持的事件监控以及监控异常的处理建议,请参见事件监控支持的事件说明。 告警规则 该条告警所在告警规则的名称/ID。 最新更新时间 该条告警的最新触发时间。 操作 单击“告警指标”,在右侧弹窗中,查看所选时间段内的指标监控视图。
  • 资源规划 表1 资源规划 类别 子类 规划 备注 VPC VPC名称 vpc-src-172 自定义,易理解可识别。 所属Region 测试Region 现网实际选择时建议选择和自己业务区最近的Region,减少网络时延。 可用区 可用区3 - 子网网段 172.16.0.0/16 子网选择时建议预留足够的网络资源。 子网名称 subnet-src-172 自定义,易理解可识别。 本地Oracle数据库 名称 orcl 自定义,易理解可识别。 规格 16vCPUs | 32GB - 数据库版本 11.2.0.1 - 数据库用户 test_info 可以自定义用户,但是迁移时最小权限为:CREATE SESSION,SELECT ANY TRANSACTION, SELECT ANY TABLE, SELECT ANY DICTIONARY, EXECUTE_CATA LOG _ROLE GaussDB 实例名 Auto-drs-gaussdbv5-tar-1 自定义,易理解可识别。 数据库版本 GaussDB 3.226企业版 - 实例类型 分布式版,3CN,3DN,3副本 本示例中为分布式实例。 部署形态 独立部署 - 事务一致性 强一致性 - 分片数量 3 - 协调节点数量 3 - 存储类型 超高IO - 可用区 可用区2 本示例中选择了单可用区,实际建议选择多可用区,以提高实例的高可用性。 性能规格 独享型(1:8) 8 vCPUs | 64GB 本示例中为测试实例,选择较小的测试规格,实际选择规格以业务诉求为准。 存储空间 480G 本示例中为测试实例,选择较小的存储空间,实际选择存储空间大小以业务诉求为准。 加密磁盘 不加密 本示例中选择磁盘不加密,选择加密后会提高数据安全性,但对数据库读写性能有少量影响,实际请按照业务使用策略进行选择。 DAS登录数据库 数据库引擎 GaussDB - 数据库来源 GaussDB 勾选本示例中创建的GaussDB实例 数据库名称 postgres - 登录用户名 root - 密码 - 本示例中创建的GaussDB实例root用户密码 DRS迁移任务 迁移任务名 DRS-test-info 自定义。 目标库名称 test_database_info 自定义,易理解可识别,但是需要确保兼容模式为Oracle模式。 源数据库引擎 Oracle - 目标数据库引擎 GaussDB - 网络类型 公网网络 本示例中采用公网网络。 父主题: Oracle迁移至GaussDB最佳实践
  • 语句下推介绍 目前,GaussDB优化器在分布式框架下制定语句的执行策略时,有三种执行计划方式:生成下推语句计划、生成分布式执行计划、生成发送语句的分布式执行计划。 下推语句计划:指直接将查询语句从CN发送到DN进行执行,然后将执行结果返回给CN。 分布式执行计划:指CN对查询语句进行编译和优化,生成计划树,再将计划树发送给DN进行执行,并在执行完毕后返回结果到CN。 发送语句的分布式执行计划:上述两种方式都不可行时,将可下推的查询部分组成查询语句(多为基表扫描语句)下推到DN进行执行,获取中间结果到CN,然后在CN执行剩下的部分。 在第3种策略中,要将大量中间结果从DN发送到CN,并且要在CN运行不能下推的部分语句,会导致CN成为性能瓶颈(带宽、存储、计算等)。在进行性能调优的时候,应尽量避免只能选择第3种策略的查询语句。 执行语句不能下推是因为语句中含有不支持下推的函数或者不支持下推的语法。一般都可以通过等价改写规避执行计划不能下推的问题。
  • 不支持下推的函数 首先介绍函数的易变性。在GaussDB中共分三种形态: IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 函数易变性可以查询pg_proc的provolatile字段获得,i代表IMMUTABLE,s代表STABLE,v代表VOLATILE。另外,在pg_proc中的proshippable字段,取值范围为t/f/NULL,这个字段与provolatile字段一起用于描述函数是否下推。 如果函数的provolatile属性为i,则无论proshippable的值是否为t,则函数始终可以下推。 如果函数的provolatile属性为s或v,则仅当proshippable的值为t时,函数可以下推。 random,exec_hadoop_sql,exec_on_extension如果出现CTE中,也不下推。因为这种场景下下推可能出现结果错误。 对于用户自定义函数,可以在创建函数的时候指定provolatile和proshippable属性的值,详细请参考CREATE FUNCTION语法。 对于函数不能下推的场景: 如果是系统函数,建议根据业务等价替换这个函数。 如果是自定义函数,建议分析客户业务场景,看函数的provolatile和proshippable属性定义是否正确。
  • 支持范围 当前版本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 ; 图1 Plan Hint调优
  • 注意事项 GaussDB实例支持规格升配,也支持降配。 规格变更前,须确保实例状态正常。实例异常,节点异常,磁盘满均不允许进行规格变更。 高可用(1主2备)部署形态下,规格变更过程中会进行主备倒换,主备倒换过程中会有1min左右的业务中断。 单副本的部署形态下,规格变更过程中会进行中断重启,中断重启过程中会有5~10min的业务中断。 修改CPU/内存后,将会重启数据库实例。请选择业务低峰期,避免业务异常中断。重启后实例会自动释放内存中的缓存,请在业务低峰期进行重启,避免对高峰期业务造成影响。 高负载的情况下,规格变更时长会增加。
  • 参数说明 #,+,-,*,进行行数估算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。生成计划如下所示: 图1 生成调优计划 第11行算子的估算行数修正为360行,原估算行数为7行(四舍五入后取值)。