华为云用户手册

  • 使用表压缩 表压缩可以在创建表时开启,压缩表能够使表中的数据以压缩格式存储,意味着占用相对少的内存。 对于I/O读写量大,CPU富足(计算相对小)的场景,选择高压缩比;反之选择低压缩比。建议依据此原则进行不同压缩下的测试和对比,以选择符合自身业务情况的最优压缩比。压缩比通过COMPRESSION参数指定,其支持的取值如下: 列存表为:YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 行存表为:YES/NO,默认值为NO。(行存表压缩功能暂未商用,如需使用请联系技术支持工程师) 各压缩级别所适用的业务场景说明如下: 压缩级别 所适用的业务场景 低级别压缩 系统CPU使用率高,存储磁盘空间充足。 中度压缩 系统CPU使用率适中,但存储磁盘空间不是特别充足。 高级别压缩 系统CPU使用率低,磁盘空间不充裕。
  • 使用分区表 分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点: 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。 GaussDB (DWS)支持的分区表为范围分区表和列表分区(列表分区8.1.3集群版本支持)。
  • 选择分布列 采用Hash分布方式,需要为用户表指定一个分布列(distribute key)。当插入一条记录时,系统会根据分布列的值进行hash运算后,将数据存储在对应的DN中。 所以Hash分布列选取至关重要,需要满足以下原则: 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。 在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001’),那么就应当尽量不用zqdh做分布列。 在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。 对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性: 12345 SELECT xc_node_id, count(1) FROM tablename GROUP BY xc_node_id ORDER BY xc_node_id desc; 其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。 一般不建议用户新增一列专门用作分布列,尤其不建议用户新增一列,然后用SEQUENCE的值来填充作为分布列。因为SEQUENCE可能会带来性能瓶颈和不必要的维护成本。
  • 选择分布方式 GaussDB(DWS)支持的分布方式有复制表(Replication)、哈希表(Hash)和轮询表(Roundrobin)。 轮询表(Roundrobin)8.1.2及以上集群版支持。 策略 描述 适用场景 优势与劣势 复制表(Replication) 集群中每一个DN实例上都有一份全量表数据。 小表、维度表。 Replication优点是每个DN上都有此表的全量数据,在join操作中可以避免数据重分布操作,从而减小网络开销,同时减少了plan segment(每个plan segment都会起对应的线程)。 Replication缺点是每个DN都保留了表的完整数据,造成数据的冗余。一般情况下只有较小的维度表才会定义为Replication表。 哈希表(Hash) 表数据通过hash方式散列到集群中的所有DN实例上。 数据量较大的事实表。 在读/写数据时可以利用各个节点的IO资源,大大提升表的读/写速度。 一般情况下大表(1000000条记录以上)定义为Hash表。 轮询表(Roundrobin) 表的每一行被轮番地发送给各个DN,数据会被均匀地分布在各个DN中。 数据量较大的事实表,且使用Hash分布时找不到合适的分布列。 Roundrobin优点是保证了数据不会发生倾斜,从而提高了集群的空间利用率。 Roundrobin缺点是无法像Hash表一样进行DN本地化优化,查询性能通常不如Hash表。 一般在大表无法找到合适的分布列时,定义为Roundrobin表,若大表能够找到合适的分布列,优先选择性能更好的Hash分布。
  • 选择存储方式 表的存储模型选择是表定义的第一步。业务属性是表的存储模型的决定性因素,根据下表选择适合当前业务的存储模型。 一般情况下,如果表的字段比较多(大宽表),查询中涉及到的列不多的情况下,适合列存储。如果表的字段个数比较少,查询大部分字段,那么选择行存储比较好。 存储模型 适用场景 行存 点查询(返回记录少,基于索引的简单查询)。 增删改比较多的场景。 列存 统计分析类查询。 group,join多的场景。 表的行/列存储通过表定义的orientation属性定义。当指定orientation属性为row时,表为行存储;当指定orientation属性为column时,表为列存储;如果不指定,默认为行存储。
  • 选择数据类型 高效数据类型,主要包括以下三方面: 尽量使用执行效率比较高的数据类型 一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。比如某客户场景中对列存表进行点查询,filter条件在一个numeric列上,执行时间为10+s;修改numeric为int类型之后,执行时间缩短为1.8s左右。 尽量使用短字段的数据类型 长度较短的数据类型不仅可以减小数据文件的大小,提升IO性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。 使用一致的数据类型 表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。
  • 教程一: IAM 项目视图下的只读操作 创建用户组并授权。 使用华为云账号登录IAM控制台,创建用户组,并授予 数据仓库 服务的只读权限“DWS ReadOnlyAccess”。 创建用户并加入用户组。 在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 用户登录并验证权限。 使用新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择数据仓库服务,进入DWS主界面,单击右上角“创建数据仓库集群”,尝试创建数据仓库集群,如果无法创建(假设当前权限仅包含DWS ReadOnlyAccess),表示“DWS ReadOnlyAccess”已生效。 在“服务列表”中选择除数据仓库服务之外(假设当前策略仅包含DWS ReadOnlyAccess)的任一服务,若提示权限不足,表示“DWS ReadOnlyAccess”已生效。
  • 背景信息 如果您需要对华为云上的GaussDB(DWS)资源,为企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,您可以使用 统一身份认证 服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制云资源的访问。通过IAM,您可以在云账号中给员工创建IAM用户,并授权控制他们对云资源的访问范围。 场景一:您的员工中有负责软件开发的人员,您希望他们拥有GaussDB(DWS)的使用权限,但是不希望他们拥有删除集群等高危操作的权限,那么您可以使用IAM为开发人员创建用户,通过授予仅能使用GaussDB(DWS),但是不允许删除集群的权限,控制他们对GaussDB(DWS)资源的使用范围。 场景二:您希望您的员工只有GaussDB(DWS)的资源使用权限,不希望拥有其他云资源的权限,以防止资源滥用。例如只开通GaussDB(DWS)的操作权限,不能使用其他云服务。 通过IAM权限控制,有效达到云资源访问控制,避免云资源误操作。本文将指导如何配置只读权限的IAM用户。
  • 教程二:企业项目下的只读操作 创建用户组并授权。 使用华为云账号登录IAM控制台,创建用户组,并授予数据仓库服务的只读权限“DWS ReadOnlyAccess”。 企业项目视图下,跟资源无关的只读操作细粒度权限依旧会提示无权限访问。如事件、告警等相关接口的细粒度。 配置IAM项目视图下相关的事件与告警等只读权限。 创建如下自定义策略readonly_event_alarm: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:alarm*:list*", "dws:cluster*:list*", "dws:dms*:get*", "dws:event*:list*" ] } ]} 登录IAM控制台,创建用户组并授权刚创建的自定义策略: 创建用户并加入用户组。 在IAM控制台创建用户,并将其加入步骤1中创建的用户组。 用户登录并验证权限。 使用新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择数据仓库服务,进入DWS主界面,单击右上角“创建数据仓库集群”,尝试创建数据仓库集群,如果无法创建(假设当前权限仅包含DWS ReadOnlyAccess),表示“DWS ReadOnlyAccess”已生效。 在“服务列表”中选择除数据仓库服务之外(假设当前策略仅包含DWS ReadOnlyAccess)的任一服务,若提示权限不足,表示“DWS ReadOnlyAccess”已生效。
  • 步骤一:准备MySQL数据 购买RDS实例,参见表1配置关键参数,其他参数可保持默认,如需了解详情请参见RDS文档。 表1 RDS参数 参数项 取值 计费模式 按需计费 区域 华北-北京四 实例名称 rds-demo 数据库引擎 MySQL 数据库版本 5.7及以上 数据库端口 3306 连接RDS实例,执行以下命令,创建名为mys_data数据库。 1 CREATE DATABASE mys_data; 切换到新的数据库mys_data,并执行以下命令,创建表mys_orders。 12345678 CREATE TABLE mys_data.mys_order ( order_id VARCHAR(12), order_channel VARCHAR(32), order_time DATETIME, cust_code VARCHAR(6), pay_amount DOUBLE, real_pay DOUBLE, PRIMARY KEY (order_id) ); 执行以下命令向表中插入数据。 12 INSERT INTO mys_data.mys_order VALUES ('202306270001', 'webShop', TIMESTAMP('2023-06-27 10:00:00'), 'CUST1', 1000, 1000);INSERT INTO mys_data.mys_order VALUES ('202306270002', 'webShop', TIMESTAMP('2023-06-27 11:00:00'), 'CUST2', 5000, 5000); 执行以下命令,验证数据是否插入成功。 1 SELECT * FROM mys_data.mys_order;
  • 支持区域 当前已上传OBS数据的区域如表1所示。 表1 区域和OBS桶名 区域 OBS桶名 华北-北京一 dws-demo-cn-north-1 华北-北京二 dws-demo-cn-north-2 华北-北京四 dws-demo-cn-north-4 华北-乌兰察布一 dws-demo-cn-north-9 华东-上海一 dws-demo-cn-east-3 华东-上海二 dws-demo-cn-east-2 华南-广州 dws-demo-cn-south-1 华南-广州友好 dws-demo-cn-south-4 中国-香港 dws-demo-ap-southeast-1 亚太-新加坡 dws-demo-ap-southeast-3 亚太-曼谷 dws-demo-ap-southeast-2 拉美-圣地亚哥 dws-demo-la-south-2 非洲-约翰内斯堡 dws-demo-af-south-1 拉美-墨西哥城一 dws-demo-na-mexico-1 拉美-墨西哥城二 dws-demo-la-north-2 莫斯科二 dws-demo-ru-northwest-2 拉美-圣保罗一 dws-demo-sa-brazil-1
  • 步骤4:创建新表并加载数据 为每张表选择了存储方式、压缩级别、分布方式和分布列后,使用这些属性创建表并重新加载数据。以便对比表设计前后的系统性能。 执行CREATE TABLE创建表前,删除前面创建的表。 1 2 3 4 5 6 7 8 91011121314151617181920212223 DROP TABLE store_sales;DROP TABLE date_dim;DROP TABLE store;DROP TABLE item;DROP TABLE time_dim;DROP TABLE promotion;DROP TABLE customer_demographics;DROP TABLE customer_address;DROP TABLE household_demographics;DROP TABLE customer;DROP TABLE income_band;DROP FOREIGN TABLE obs_from_store_sales_001;DROP FOREIGN TABLE obs_from_date_dim_001;DROP FOREIGN TABLE obs_from_store_001;DROP FOREIGN TABLE obs_from_item_001;DROP FOREIGN TABLE obs_from_time_dim_001;DROP FOREIGN TABLE obs_from_promotion_001;DROP FOREIGN TABLE obs_from_customer_demographics_001;DROP FOREIGN TABLE obs_from_customer_address_001;DROP FOREIGN TABLE obs_from_household_demographics_001;DROP FOREIGN TABLE obs_from_customer_001;DROP FOREIGN TABLE obs_from_income_band_001; 创建具有存储方式和分布方式的表。 限于篇幅,此处仅给出再次创建store_sales的语法。请从附录设计调优后第二次创建表中拷贝其他表的语法进行创建。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728 CREATE TABLE store_sales( ss_sold_date_sk integer , ss_sold_time_sk integer , ss_item_sk integer not null, ss_customer_sk integer , ss_cdemo_sk integer , ss_hdemo_sk integer , ss_addr_sk integer , ss_store_sk integer , ss_promo_sk integer , ss_ticket_number bigint not null, ss_quantity integer , ss_wholesale_cost decimal(7,2) , ss_list_price decimal(7,2) , ss_sales_price decimal(7,2) , ss_ext_discount_amt decimal(7,2) , ss_ext_sales_price decimal(7,2) , ss_ext_wholesale_cost decimal(7,2) , ss_ext_list_price decimal(7,2) , ss_ext_tax decimal(7,2) , ss_coupon_amt decimal(7,2) , ss_net_paid decimal(7,2) , ss_net_paid_inc_tax decimal(7,2) , ss_net_profit decimal(7,2) ) WITH (ORIENTATION = column,COMPRESSION=middle)DISTRIBUTE BY hash (ss_item_sk); 为这些表加载样例数据。 在基准表中记录加载时间。 基准 优化前 优化后 加载时间(11张表) 341584ms 257241ms 占用存储 Store_Sales 42GB - Date_Dim 11MB - Store 232kB - Item 110MB - Time_Dim 11MB - Promotion 256kB - Customer_Demographics 171MB - Customer_Address 170MB - Household_Demographics 504kB - Customer 441MB - Income_Band 88kB - 总存储空间 42GB - 查询执行时间 查询1 14552.05ms - 查询2 27952.36ms - 查询3 17721.15ms - 总执行时间 60225.56ms - 执行ANALYZE更新统计信息。 1 ANALYZE; 返回ANALYZE后,表示执行成功。 1 ANALYZE 检查数据倾斜性。 对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性 1 SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM table_name GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc; 其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。GaussDB(DWS)支持多分布列特性,可以更好地满足数据分布的均匀性要求。 父主题: 基于表结构设计和调优提升GaussDB(DWS)查询性能
  • 步骤二:连接集群并导入数据 使用客户端连接集群。 导入样例数据。参见导入TPC-H数据。 执行以下语句创建核心交易用户budget_config_user和报表用户report_user。 12 CREATE USER budget_config_user PASSWORD 'password';CREATE USER report_user PASSWORD 'password'; 为测试需要,将tpch模式下所有表的所有权限授予两个用户。 1 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA tpch to budget_config_user,report_user; 查看当前两个用户的资源分配情况。 1 SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO where username in ('budget_config_user' , 'report_user');
  • 步骤三:创建资源池 登录GaussDB(DWS) 管理控制台,在集群列表中单击集群名称,切换至“资源管理”页签。 单击“添加资源池”创建资源池。参见场景介绍的模型分别创建报表业务资源池pool_1和核心交易资源池pool_2。 修改异常规则。 单击创建好的pool_1资源池。 在异常规则中,修改“阻塞时间”和“执行所消耗时间”分别为1200s和1800s。 单击“保存”。 重复以上步骤,修改pool_2。 关联用户。 左侧单击“pool_1”资源池。 单击“关联用户”右侧的“添加”。 勾选报表业务对应的用户report_user,单击“确定”。 重复以上步骤,将核心交易的用户budget_config_user添加入pool_2的资源池中。
  • 步骤四:异常规则验证 使用用户report_user登录数据库。 执行如下命令查看用户report_user所属资源池。 1 SELECT usename,respool FROM pg_user WHERE usename = 'report_user'; 查询显示用户report_user所属资源池为pool_1。 校验资源池pool_1所绑定的异常规则。 1 SELECT respool_name,mem_percent,active_statements,except_rule FROM pg_resource_pool WHERE respool_name='pool_1'; 确认资源池pool_1所绑定的是异常规则rule_1。 查看当前用户异常规则的规则类型和阈值。 1 SELECT * FROM pg_except_rule WHERE name = 'rule_1'; 查询显示rule_1中所绑定的规则为3设置的“阻塞时间1200秒,运行时长1800秒”,则会终止查询。 PG_EXCEPT_RULE系统表存储关于异常规则的信息,该系统表仅8.2.0及以上集群版本支持。 同一条异常规则内的参数项相互之间为且的关系。 执行作业,当运行时长超过“阻塞时间1200秒,运行时长1800秒”时,报错提示作业被取消并提示所触发的异常规则限制。 作业执行过程中,如果出现类似“ERROR: canceling statement due to workload manager exception.”的报错信息,表示该作业超过异常规则的规则阈值限制被终止。若规则设置合理,那么就需要考虑从业务角度进行语句优化,减少执行时间。
  • 场景介绍 当有多个数据库用户同时在GaussDB(DWS)上执行SQL作业时,可能出现以下情况: 一些复杂SQL可能会长时间占用集群资源,从而影响其他查询的性能。例如一组数据库用户不断提交复杂、耗时的查询,而另一组用户经常提交短查询。在这种情况下,短时查询可能不得不在资源池中等待耗时查询完成。 一些SQL由于数据倾斜、执行计划未调优等原因,占用过多内存空间,导致其他语句因申请不到内存而报错,或占用过多磁盘空间,导致磁盘满而触发集群只读,无法进行写入。 为了提高系统整体吞吐量,避免坏SQL影响系统整体运行,您可以使用GaussDB(DWS)工作负载管理功能处理这类问题,例如,将经常提交复杂查询作业的数据库用户分为一类,为这类用户创建一个资源池并给这个资源池分配多一些的资源,之后将这类用户添加至这个资源池中,那么这类用户所提交的复杂作业只能使用所创建资源池拥有的资源;同时再创建一个占用资源较少的资源池分配给执行短查询的用户使用,这样两种作业就能够同时执行互不影响。 以A用户为例,该用户业务场景主要分为联机交易(OLTP)和报表分析(OLAP)两大类,其中报表服务的优先级相对较低,在合理的情况下优先保障业务系统的正常运行。业务系统中运行的SQL分为简单SQL和复杂SQL,大量复杂SQL的并发执行会导致数据库服务器资源争抢,简单SQL的大量并发对服务器不构成持续压力,短时间内可执行完成,不会造成业务堆积。其中报表服务中运行的SQL以复杂SQL居多,整体业务逻辑相对复杂,在数据库层面需要分别对核心交易和报表服务进行合理的资源管控,以保障业务系统正常运行。 报表分析类业务的优先级和实时性相对较低,但是复杂度更高,为有效进行资源管控,将报表分析和核心交易业务进行数据库用户分离,例如核心交易业务使用数据库用户budget_config_user,报表分析业务使用数据库用户report_user。针对交易用户和报表用户分别进行CPU资源和并发数控制以保障数据库稳定运行。 结合报表分析业务的负载调研、日常监控和测试验证,50并发以内的复杂报表SQL不会引起服务器资源争抢,不会引起业务系统卡慢,配置报表用户可使用20%的CPU资源。 结合核心交易业务的负载调研、日常监控和测试验证,100并发以内的查询SQL不会对系统造成持续压力,配合交易用户可使用60%的CPU资源。 报表用户资源配置(对应资源池pool_1):CPU=20%,内存=20%,存储=1024000MB,并发=20。 交易用户资源配置(对应资源池pool_2):CPU=60%,内存=60%,存储=1024000MB,并发=200。 设置单个语句最大内存使用量,超过使用量则报错退出,避免单个语句占用过多内存。 异常规则中设置阻塞时间=1200S,执行所消耗时间1800s,强制终止。
  • 准备工具 迁移过程需准备的工具包括:PL/SQL Developer、Instant Client和DSC,下载地址参见表1 表1 准备工具 工具名 描述 下载地址 PL/SQL Developer Oracle可视化开发工具 PL/SQL Developer下载地址 Oracle Instant Client Oracle客户端 Instant Client下载地址 DSC 配套DWS的语法迁移工具 DSC下载地址 父主题: 使用 CDM 迁移Oracle数据至GaussDB(DWS)集群
  • 实现方式 通过创建视图实现上述场景中的需求,具体操作步骤如下: dbadmin用户连接集群后,在dbadmin模式下为省份1和省份2分别创建视图v1和视图v2。 使用CREATE VIEW语句创建查询省份1数据的视图v1: 12 CREATE VIEW v1 AS SELECT * FROM customer WHERE province_id=1; 使用CREATE VIEW语句创建查询省份2数据的视图v2: 12 CREATE VIEW v2 AS SELECT * FROM customer WHERE province_id=2; 创建用户u1和u2。 12 CREATE USER u1 PASSWORD '*********';CREATE USER u2 PASSWORD '*********'; 使用GRANT语句将对应的数据查询权限授予目标用户。 授予u1和u2对应视图schema的权限。 1 GRANT USAGE ON schema dbadmin TO u1,u2; 授予u1通过v1视图查询省份1数据的权限: 1 GRANT SELECT ON v1 TO u1; 授予u2通过v2视图查询省份2数据的权限: 1 GRANT SELECT ON v2 TO u2;
  • 场景 dbadmin用户连接集群后,创建示例表customer: 1 CREATE TABLE customer (id bigserial NOT NULL, province_id bigint NOT NULL, user_info varchar, primary key (id)) DISTRIBUTE BY HASH(id); 向示例表customer插入测试数据: 12 INSERT INTO customer(province_id,user_info) VALUES (1,'Alice'),(1,'Jack'),(2,'Jack'),(3,'Matu');INSERT 0 4 查询示例表customer: 12345678 SELECT * FROM customer; id | province_id | user_info----+-------------+----------- 3 | 2 | Jack 1 | 1 | Alice 2 | 1 | Jack 4 | 3 | Matu(4 rows)
  • 查询结果验证 切换到u1账号连接集群。 1 SET ROLE u1 PASSWORD '*********'; 查询v1视图,u1仅能查询到视图v1数据。 123456 SELECT * FROM dbadmin.v1; id | province_id | user_info----+-------------+----------- 1 | 1 | Alice 2 | 1 | Jack(2 rows) 若u1试图查询视图v2中的数据,则会返回如下报错: 12 SELECT * FROM dbadmin.v2;ERROR: SELECT permission denied to user "u1" for relation "dbadmin.v2" 结果显示用户u1仅能查看省份1(即province_id=1)的数据。 使用u2账号连接集群。 1 SET ROLE u2 PASSWORD '*********'; 查询v2视图,u2仅能查询到视图v2数据。 12345 SELECT * FROM dbadmin.v2; id | province_id | user_info----+-------------+----------- 3 | 2 | Jack(1 row) 若u2试图查询视图v1中的数据,则会返回如下报错: 12 SELECT * FROM dbadmin.v1;ERROR: SELECT permission denied to user "u2" for relation "dbadmin.v1" 结果显示用户u2仅能查看省份2(即province_id=2)的数据。
  • 迁移流程 本教程演示将Oracle业务相关的表数据迁移到GaussDB(DWS)的数据库的基本过程,迁移流程如图2和表1所示。 图1 迁移场景图 本实践以迁移Oracle中所属用户名db_user01下的表APEX2_DYNAMIC_ADD_REMAIN_TEST数据为例。 网络互通说明:本实践的Oracle数据库在云下,通过 云数据迁移 服务CDM连接Oracle和DWS。其中CDM通过公网IP与Oracle连通;CDM与DWS默认在同一个区域、虚拟私有云下,网络互通。实际迁移过程请确保网络互通,本章节不详细介绍网络如何打通。 本实践仅作为参考演示,实际迁移的复杂度可能受客户现网的网络环境、业务复杂度、节点规模、数据量等因素影响,项目实际迁移时建议在技术支持人员的指导下完成。 图2 Oracle迁移到DWS基本流程 表1 Oracle迁移到DWS基本流程 流程 描述 准备工具 迁移前需准备的软件工具。 迁移表定义 使用PL/SQL Developer工具进行表定义迁移。 迁移表全量数据 使用华为云迁移服务CDM完成进行数据迁移。 迁移业务SQL 使用DSC语法迁移工具进行语法改写,使Oracle的业务SQL转换成适配DWS的SQL。 父主题: 使用CDM迁移Oracle数据至GaussDB(DWS)集群
  • 集群缩容 相对于集群扩容,集群缩容是分布式MPPDB架构横向收缩的典型场景,通过缩减当前集群部分节点来完成收缩集群规模的能力。集群缩容会同时收缩计算能力和存储能力。 DWS集群物理上由多个E CS 节点组合,而为了提升架构可靠性,多个ECS节点(一般3个)又会组成一个逻辑安全环,多个安全环就组成了DWS集群。而缩容则是以安全环为单位缩减,优先缩容集群尾部的安全环。 集群缩容涉及数据搬迁,会把被缩减节点上的数据重分布到剩余节点上,因此缩容耗时与用户的数据库对象数量和数据量正相关。 集群缩容支持GaussDB(DWS)存算一体架构,在线缩容在8.1.1.300版本开始支持,在线缩容过程中,DWS服务不重启,持续对外提供服务。表重分布期间用户可以对该表执行插入、更新、删除,但重分布过程仍然会短时间阻塞用户的数据更新操作,会影响用户语句的执行性能。缩容重分布过程会消耗大量的CPU和IO资源,因此会对用户作业性能影响较大,用户应该尽可能在停止业务情况下或业务轻载的情况下执行缩容重分布。 图7 集群缩容
  • 集群调整大小 集群调整大小也叫集群resize,是一个非常全面的功能,它能满足你所有的弹性伸缩需求,它既支持集群规模的Scale out、Scale in,也支持硬件规格的Scale up,Scale down,同时支持集群拓扑结构的重组。 DWS resize基于多nodegroup和数据重分布实现,resize过程中会按照新的资源诉求(硬件升降配)和集群规划(集群规模扩缩)部署一套新集群,然后和老集群做数据重分布,数据迁移完成后,会把业务迁移到新集群,然后释放老集群。 集群resize涉及数据搬迁,会把老集群节点上的数据重分布到新集群节点上(老集群节点上数据还在),因此集群resize耗时与用户的数据库对象数量和数据量正相关。 DWS支持集群resize功能,需agent升级到8.2.0.2版本后支持。目前resize期间老集群只支持只读业务。后续会提供在线能力。 具体操作参见经典变更规格。 图9 集群调整大小
  • 弹性变更规格 弹性规格变更是指调整当前集群的节点规格,主要针对CPU、内存两种资源的变更。适用于需要快速调整CPU以及内存规格的需求。 规格是指不同数量的CPU和内存的一种组合,例如:dwsx.16xlarge(CPU:64 Memory:512G )。 弹性规格变更是轻量级操作,不涉及数据搬迁,通常会在5-10分钟内完成,但是过程中会重启一次,涉及业务分钟级别中断,建议选择在业务低峰期进行。 弹性规格变更支持GaussDB(DWS)存算一体架构的EVS规格。集群版本在8.1.1.300及以后版本支持。 具体操作参见弹性变更规格。 图4 弹性变更规格
  • 功能对比 以上各种弹性伸缩功能的对比如下。 表2 功能对比 功能 伸缩对象 伸缩范围 业务影响 试用范围 弹性磁盘扩容 磁盘容量调整。 原集群的所有ECS挂载的EVS盘。 通常会在5-10分钟内完成,也不涉及服务重启,不影响业务,但建议业务低峰期进行。 集群版本:8.1.1.203及以后 弹性变更规格 算力调整。 原集群的所有ECS规格(CPU核数,内存大小)。 通常会在5-10分钟内完成,但是过程中会重启一次,涉及业务分钟级别中断,建议业务低峰期进行。 集群版本:8.1.1.300及以后 集群扩容 磁盘容量调整、算力调整。 分布式架构扩展对等同构的ECS节点。 支持在线,在线扩容过程中,DWS服务不重启,持续对外提供服务。 耗时与用户的数据库对象数量和数据量正相关。 集群版本:所有版本,8.1.1开始支持在线 集群缩容 磁盘容量调整、算力调整。 分布式架构收缩部分ECS节点。 支持在线,在线缩容过程中,DWS服务不重启,持续对外提供服务。 耗时与用户的数据库对象数量和数据量正相关。 集群版本:8.1.1.300 集群调整大小 磁盘容量调整、算力调整、集群拓扑结构。 使用新规格(硬件规格调整),新拓扑(集群规模调整)新建集群,再做新老集群数据重分布。 数据库只读,耗时与用户的数据库对象数量和数据量正相关。 集群版本:agent8.2.0.2及以后版本 增删CN 数据库CN实例。 增加CN扩展业务并发度提升,删除CN快速恢复DDL业务。 支持在线,增删CN过程中,DWS服务不重启,持续对外提供服务。 集群版本:8.1.1版本,8.1.3开始支持在线
  • 弹性伸缩应用场景 不同的弹性伸缩功能应用在不同的业务场景下,具体参见表3。 表3 应用场景 分类 弹性伸缩诉求 推荐弹性伸缩方式 业务影响评估 预估耗时评估 存储 存储空间不够, CPU,内存,磁盘IO非瓶颈。 磁盘扩容。 在线。 不涉及数据搬迁,5-10分钟。 存储空间太大,降本 CPU,内存,磁盘IO非瓶颈。 创建同规格、小存储容量集群,通过容灾方式把主集群迁移到备集群。 容灾切换过程中集群只读,一般30分钟内。 耗时与数据量正相关。 算力 CPU或内存存在瓶颈。 弹性规格变更。 重启一次集群。 不涉及数据搬迁,5-10分钟。 磁盘IO存在瓶颈。 创建同规格、小存储容量集群,通过容灾方式把主集群迁移到备集群。 容灾切换过程中集群只读,一般30分钟内。 耗时与数据量正相关。 分布式算力 & 存储 节点数不足导致分布式能力弱。 集群扩容。 在线(部分限制)。 涉及数据搬迁,耗时和数据量与元数量正相关。 节点数多导致成本高。 集群缩容。 在线(部分限制)。 涉及数据搬迁,耗时和数据量正相关。 拓扑结构 同时修改拓扑和规格诉求(DN数不一致)。 调整集群大小。 只读。 涉及数据搬迁,耗时和数据量与元数量正相关。 同时修改拓扑和规格诉求(DN数一致)。 集群容灾迁移。 在线(部分限制)。 涉及数据搬迁,耗时和数据量正相关。 并发度不够。 增删CN。 在线(部分限制)。 涉及数据搬迁,耗时和元数据量正相关。
  • DWS集群安全环 集群扩容和缩容都和安全环相关,安全环是指DN多副本横向部署的最小主机集合。安全环主要作用是故障隔离。环内主机出现故障,故障不会扩散到环外。 DWS属于主备从架构,因此最小安全环节点数为3个节点。环内出现故障时,对环外无影响,对整个集群的影响的节点范围最小(3节点),对环内每个节点的影响为1/(N-1),即1/2。极端场景下整个集群是一个安全环。环内出现故障,对整个集群的影响的节点范围最大(整个集群),对环内每个节点的影响最小,为1/(N-1)。 一种常见的做法是N+1成环,每个节点把他的N个备机均匀分散部署到环内的其余N个节点上。环内出现故障时,对整个集群的影响的节点范围为N+1,对环内每个节点的影响为1/N。 图6 典型N+1安全环
  • 集群扩容 集群扩容是分布式MPPDB架构横向扩展的典型场景,通过添加对等同构的节点到当前集群来完成集群规模横向扩展的能力。DWS 2.0属于存算一体架构,因此集群扩容同时扩容了计算能力和存储能力。 为了扩容后集群内各节点负载均衡,性能最优,集群扩容会进行元数据复制和数据重分布,把数据重新均匀分布到新节点,因此集群扩容耗时与用户的数据库对象数量和数据量正相关。同时为了架构可靠性,新扩容的节点会自动组织成环,因此每次扩容至少扩容3个节点。 图5 集群扩容 8.1.1版本以后支持了在线扩容。在线扩容过程中,DWS服务不重启,持续对外提供服务。表重分布期间用户可以对该表执行插入、更新、删除,但重分布过程仍然会短时间阻塞用户的数据更新操作,会影响用户语句的执行性能。扩容重分布过程会消耗大量的CPU和IO资源,因此会对用户作业性能影响较大,用户应该尽可能在停止业务或业务轻载的情况下执行扩容重分布。用户也可以考虑分段扩容重分布策略,在系统负载很小的情况下采用高并发进行扩容重分布,在系统负载大的情况下停止扩容重分布或采用低并发进行扩容重分布。 集群扩容分为分段扩容和一键式扩容两种操作方式。 分段扩容把扩容操作分成添加主机,扩容,数据重分布三个阶段,用户可分段操作,把变更风险和业务影响降低到最低。 直接扩容是一键式操作,用户操作便捷度更高。 表1 扩容方式对比 扩容方式 特点 业务影响 分段扩容 把扩容操作分成添加主机,扩容,数据重分布三个阶段,用户可分段操作。 把变更风险和业务影响降低到最低。 一键式扩容 一键式操作,自动做DWS主机发放,扩容添加节点和数据重分布。 用户操作便捷度更高。
  • 增删CN 增删CN属于DWS数据库实例收缩操作,可以扩展和收缩数据库CN实例。 CN全称协调节点(Coordinator Node)是和用户关系最密切也是DWS内部非常重要的一个组件,它负责提供外部应用接口、优化全局执行计划、向Datanode分发执行计划,以及汇总、处理执行结果。 CN是外部应用的接口,CN的并发能力直接决定了业务的并发度。因此可以通过增加CN来扩展分布式能力,提升业务并发度。 同时由于CN是多主多活架构,为了保证数据一致性,如果部分CN数据损坏,DDL业务将受到阻塞,可以通过删除故障CN来快速恢复DDL业务。 DWS支持增删CN功能,在8.1.1及以后版本支持。 增加CN过程中会同步元数据,因此增加CN耗时和元数据数量正相关,8.1.3版本支持在线增删CN,增加CN过程中DWS服务不重启,持续对外提供服务,DDL业务会短暂阻塞(不报错),其余业务不受影响。 图8 增删CN
  • 集群拓扑详解 要想充分理解DWS的弹性伸缩能力,首先需要了解DWS的集群拓扑结构。如下是DWS的简单的ECS+EVS部署结构: ECS提供计算资源,包括CPU、内存配置,DWS数据库实例(CN、DN等)都部署在ECS上。 EVS提供存储资源,每个DN都会挂载一块EVS云盘。 而组成DWS集群的所有ECS节点都部署在同一个VPC内部,提供高速网络通道。 部署在ECS上的所有数据库实例逻辑上组成一个分布式的MPPDB架构集群,对外提供数据分析处理能力。 图1 集群拓扑
共100000条