云服务器内容精选

  • 降级方式 包含下述2种降级方式: 如果指定降级和自动降级都设置了,仅指定降级会生效。 示例代码如下所示: const client = HWLLSPlayer.createClient() client.startPlay(url, { ... hlsUrl: // 填写hls的播放地址 flvUrl: // 填写flv的播放地址 autoDowngrade: true, // true表示启用自动降级播放,false表示不启用自动降级播放 ... }) 指定降级 设置HWLLSClient中的startPlay接口,指定options里面参数downgradeUrl的flv或hls地址,即可实现异常时的降级播放。 如果hlsUrl和flvUrl播放地址只选填一个,会降级至指定地址;如果两个播放地址都填,则降级后的播放顺序为先HLS后FLV。 const client = HWLLSPlayer.createClient() client.startPlay(url, { ... downgradeUrl: { hlsUrl: // 填写hls的播放地址 flvUrl: // 填写flv的播放地址 } ... }) 自动降级 设置HWLLSClient中的startPlay接口,指定options里面参数autoDowngrade的值为true,即可实现接口异常时的自动降级播放。 const client = HWLLSPlayer.createClient() client.startPlay(url, { ... autoDowngrade: true, // true表示启用自动降级播放,false表示不启用自动降级播放 ... })
  • 场景说明 安全云脑 (SecMaster)是华为云原生的新一代安全运营中心,集华为云多年安全经验,基于云原生安全,提供云上资产管理、安全态势管理、安全信息和事件管理、安全编排与自动响应等能力。 安全云脑支持在重大保障及防护演练前,全面地进行资产脆弱性盘点;在攻防演练期间,高强度7*24的安全保障,侧重于防攻击,保障业务可用性不因安全攻击受影响,侧重于防入侵,保障不因入侵失分被问责。能够更智能、更快速,帮助您实现一体化、自动化安全运营管理,满足您的安全需求。 本场景将介绍在护网、重保场景中安全云脑的使用,具体流程如下图所示: 图1 使用流程 父主题: 安全云脑护网/重保最佳实践
  • 解决方案 数据库用户 数据库用户的主要用途是使用该用户账号连接数据库、访问数据库对象和执行SQL语句。在连接数据库时,必须使用一个已经存在的数据库用户。因此,作为数据库管理员,需要为每一个需要连接数据库的使用者规划一个数据库用户。 在创建数据库用户时,至少需要指定用户名和密码。 默认情况下,数据库用户可以分为两大类,详细信息请参见表1。 表1 用户分类 分类 描述 初始用户 具有数据库的最高权限,并且具有所有的系统权限和对象权限。初始用户不受对象的权限设置影响。这个特点类似Unix系统的root的权限。从安全角度考虑,除了必要的情况,建议尽量避免以初始用户身份操作。 在安装数据库或者初始化数据库时,可以指定初始用户名和密码。如果不指定用户名则会自动生成一个与安装数据库的OS用户同名的初始用户。如果不指定密码则安装后初始用户密码为空,需要通过gsql客户端设置初始用户的密码后才能执行其他操作。 说明: 基于安全性考虑, GaussDB Kernel禁止了所有用户trust方式的远程登录方式,禁止了初始用户的任何方式的远程登录。 普通用户 默认可以访问数据库的默认系统表和视图(pg_authid、pg_largeobject、pg_user_status和pg_auth_history除外),可以连接默认的数据库postgres以及使用public模式下的对象(包括表、视图和函数等)。 可以通过CREATE USER、ALTER USER指定系统权限,或者通过GRANT ALL PRIVILEGE授予SYSADMIN权限。 可以通过GRANT语句授予某些对象的权限。 可以通过GRANT语法将其他角色或用户的权限授权给该用户。 数据库权限分类 通过权限和角色,可以控制用户访问指定的数据,以及执行指定类型的SQL语句。详细信息请参见表2。 系统权限只能通过CREATE/ALTER USER、CREATE/ALTER ROLE语句指定(其中SYSADMIN还可以通过GRANT/REVOKE ALL PRIVILEGES的方式赋予、回收),无法从角色继承。 表2 权限分类 分类 描述 系统权限 系统权限又称为用户属性,可以在创建用户和修改用户时指定,包括SYSADMIN、MONADMIN、OPRADMIN、POLADMIN、CREATEDB、CREATEROLE、AUDITADMIN和 LOG IN。 系统权限一般通过CREATE/ALTER USER语句指定。除了SYSADMIN外的其他系统权限,无法通过GRANT/REVOKE进行授予和撤销。并且,系统权限无法通过ROLE被继承。 对象权限 对象权限是指在表、视图、索引和函数等数据库对象上执行各种操作的权限,对象权限包括SELECT、INSERT、UPDATE和DELETE等。 只有对象的所有者或者系统管理员才可以执行GRANT/REVOKE语句来分配/撤销对象权限。 角色 角色是一组权限的集合,可以将一个角色的权限赋予其他角色和用户。 由于无法给其他角色和用户赋予系统权限,所以角色只有是对象权限的集合时才有意义。 数据库权限模型 系统权限模型 默认权限机制 图1 权限架构 权限架构如图1,默认权限机制下sysadmin具有大多数的权限。 初始安装用户:集群安装过程中自动生成的账户,拥有系统的最高权限,能够执行所有的操作。 SYSADMIN:系统管理员权限,权限仅次于初始安装用户,默认具有与对象所有者相同的权限,但不包括监控管理员权限和运维管理员权限。 MONADMIN:监控管理员权限,具有监控模式dbe_perf及模式下视图和函数的访问权限和授予权限。 OPRADMIN:运维管理员权限,具有使用Roach工具执行备份恢复的权限。 CREATEROLE:安全管理员权限,具有创建、修改、删除用户/角色的权限。 AUDITADMIN:审计管理员权限,具有查看和维护数据库审计日志的权限。 CREATEDB:具有创建数据库的权限。 POLADMIN:安全策略管理员权限,具有创建资源标签,数据动态脱敏策略和统一审计策略的权限。 三权分立机制 图2 三权分立机制 SYSADMIN:系统管理员权限,不再具有创建、修改、删除用户/角色的权限,也不再具有查看和维护数据库审计日志的权限。 CREATEROLE:安全管理员权限,具有创建、修改、删除用户/角色的权限。 AUDITADMIN:审计管理员权限,具有查看和维护数据库审计日志的权限。 一个用户/角色只能具有SYSADMIN、CREATEROLE和AUDITADMIN中的一项系统权限。 对象权限模型 对象权限:指在数据库、模式、表等数据库对象上执行特定动作的权限,比如:SELECT、INSERT、UPDATE、DELETE和CONNECT等。 针对不同的数据库对象有不同的对象权限,相应地可以被授予用户/角色。 通过GRANT/REVOKE来传递对象权限,对象权限可以通过角色被继承。 角色权限模型 GaussDB Kernel提供了一组默认角色,以gs_role_开头命名。它们提供对特定的、通常需要高权限操作的访问,可以将这些角色GRANT给数据库内的其他用户或角色,让这些用户能够使用特定的功能。在授予这些角色时应当非常小心,以确保它们被用在需要的地方。表3描述了内置角色允许的权限范围。 表3 内置角色权限 角色 权限描述 gs_role_copy_files 具有执行copy … to/from filename的权限,但需要先打开GUC参数enable_copy_server_files。 gs_role_signal_backend 具有调用函数pg_cancel_backend()、pg_terminate_backend()和pg_terminate_session()来取消或终止其他会话的权限,但不能操作属于初始用户和PERSISTENCE用户的会话。 gs_role_tablespace 具有创建表空间(tablespace)的权限。 gs_role_replication 具有调用逻辑复制相关函数的权限,例如kill_snapshot()、pg_create_logical_replication_slot()、pg_create_physical_replication_slot()、pg_drop_replication_slot()、pg_replication_slot_advance()、pg_create_physical_replication_slot_extern()、pg_logical_slot_get_changes()、pg_logical_slot_peek_changes(),pg_logical_slot_get_binary_changes()、pg_logical_slot_peek_binary_changes()。 gs_role_account_lock 具有加解锁用户的权限,但不能加解锁初始用户和PERSISTENCE用户。 gs_role_pldebugger 具有执行dbe_pldebugger下调试函数的权限。 gs_role_directory_create 具有执行创建directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 gs_role_directory_drop 具有执行删除directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 系统权限配置 默认权限机制配置方法 初始用户 数据库安装过程中自动生成的账户称为初始用户。初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不指定初始用户名称则该账户与进行数据库安装的操作系统用户同名。如果在安装时不指定初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端修改初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容和节点替换等操作。 初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务用途。 系统管理员 gaussdb=#CREATE USER u_sysadmin WITH SYSADMIN password '********'; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_sysadmin01 SYSADMIN; 监控管理员 gaussdb=#CREATE USER u_monadmin WITH MONADMIN password '********'; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_monadmin01 MONADMIN; 运维管理员 gaussdb=#CREATE USER u_opradmin WITH OPRADMIN password "xxxxxxxxx"; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_opradmin01 OPRADMIN; 安全策略管理员 gaussdb=#CREATE USER u_poladmin WITH POLADMIN password "xxxxxxxxx"; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_poladmin01 POLADMIN; 三权分立机制配置方式 此模式需要设置guc参数“enableSeparationOfDut”y的值为“on”,该参数为POSTMASTER类型参数,修该完之后需要重启数据库。 gs_guc set -Z datanode -N all -I all -c "enableSeparationOfDuty=on" gs_om -t stop gs_om -t start 创建和配置相应的用户权限的语法和默认权限一致。 角色权限配置 --创建数据库test gaussdb=#CREATE DATABASE test; --创建角色role1,创建用户user1 gaussdb=#CREATE ROLE role1 PASSWORD '********'; gaussdb=#CREATE USER user1 PASSWORD '********'; --赋予CREATE ANY TABLE权限角色role1 gaussdb=#GRANT CREATE ON DATABASE test TO role1; --将角色role1赋予给用户user1,则用户user1属于组role1,继承role1的相应权限可以在test数据库中创建模式。 gaussdb=#GRANT role1 TO user1; --查询用户和角色信息 gaussdb=#\du role1|user1; List of roles Role name | Attributes | Member of -----------+--------------+----------- role1 | Cannot login | {} user1 | | {role1}
  • 背景 一个数据库可能有很多的用户需要访问,为了方便管理这些用户,将用户组成一个数据库角色。一个数据库角色可以视为一个数据库用户或者一组数据库用户。 对于数据库来说,用户和角色是基本相同的概念,不同之处在于,使用CREATE ROLE创建角色,不会创建同名的SCHEMA,并且默认没有LOGIN权限;而使用CREATE USER创建用户,会自动创建同名的SCHEMA,默认有LOGIN权限。换句话说,一个拥有LOGIN权限的角色可以被认为是一个用户。在业务设计中,仅建议通过ROLE来组织权限,而不是用来访问数据库。
  • 场景一:磁盘满后快速定位存储倾斜的表 首先,通过pg_stat_get_last_data_changed_time(oid)函数查询出近期发生过数据变更的表,鉴于表的最后修改时间只在进行IUD操作的CN记录,要查询库内1天(间隔可在函数中调整)内被修改的所有表,可以使用如下封装函数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CREATE OR REPLACE FUNCTION get_last_changed_table(OUT schemaname text, OUT relname text) RETURNS setof record AS $$ DECLARE row_data record; row_name record; query_str text; query_str_nodes text; BEGIN query_str_nodes := 'SELECT node_name FROM pgxc_node where node_type = ''C'''; FOR row_name IN EXECUTE(query_str_nodes) LOOP query_str := 'EXECUTE DIRECT ON (' || row_name.node_name || ') ''SELECT b.nspname,a.relname FROM pg_class a INNER JOIN pg_namespace b on a.relnamespace = b.oid where pg_stat_get_last_data_changed_time(a.oid) BETWEEN current_timestamp - 1 AND current_timestamp;'''; FOR row_data IN EXECUTE(query_str) LOOP schemaname = row_data.nspname; relname = row_data.relname; return next; END LOOP; END LOOP; return; END; $$ LANGUAGE 'plpgsql'; 然后,通过table_distribution(schemaname text, tablename text)查询出表在各个DN占用的存储空间。 1 SELECT table_distribution(schemaname,relname) FROM get_last_changed_table();
  • 场景二:常规数据倾斜巡检 在库中表个数少于1W的场景,直接使用倾斜视图查询当前库内所有表的数据倾斜情况。 1 SELECT * FROM pgxc_get_table_skewness ORDER BY totalsize DESC; 在库中表个数非常多(至少大于1W)的场景,因PGXC_GET_TABLE_SKEWNESS涉及全库查并计算非常全面的倾斜字段,所以可能会花费比较长的时间(小时级),请根据PGXC_GET_TABLE_SKEWNESS视图定义,直接使用table_distribution()函数自定义输出,减少输出列进行计算优化,例如: 1 2 3 4 5 6 SELECT schemaname,tablename,max(dnsize) AS maxsize, min(dnsize) AS minsize FROM pg_catalog.pg_class c INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace INNER JOIN pg_catalog.table_distribution() s ON s.schemaname = n.nspname AND s.tablename = c.relname INNER JOIN pg_catalog.pgxc_class x ON c.oid = x.pcrelid AND x.pclocatortype = 'H' GROUP BY schemaname,tablename;
  • 背景 一个数据库可能有很多的用户需要访问,为了方便管理这些用户,将用户组成一个数据库角色。一个数据库角色可以视为一个数据库用户或者一组数据库用户。 对于数据库来说,用户和角色是基本相同的概念,不同之处在于,使用CREATE ROLE创建角色,不会创建同名的SCHEMA,并且默认没有LOGIN权限;而使用CREATE USER创建用户,会自动创建同名的SCHEMA,默认有LOGIN权限。换句话说,一个拥有LOGIN权限的角色可以被认为是一个用户。在业务设计中,仅建议通过ROLE来组织权限,而不是用来访问数据库。
  • 解决方案 数据库用户 数据库用户的主要用途是使用该用户账号连接数据库、访问数据库对象和执行SQL语句。在连接数据库时,必须使用一个已经存在的数据库用户。因此,作为数据库管理员,需要为每一个需要连接数据库的使用者规划一个数据库用户。 在创建数据库用户时,至少需要指定用户名和密码。 默认情况下,数据库用户可以分为两大类,详细信息请参见表1。 表1 用户分类 分类 描述 初始用户 具有数据库的最高权限,并且具有所有的系统权限和对象权限。初始用户不受对象的权限设置影响。这个特点类似Unix系统的root的权限。从安全角度考虑,除了必要的情况,建议尽量避免以初始用户身份操作。 在安装数据库或者初始化数据库时,可以指定初始用户名和密码。如果不指定用户名则会自动生成一个与安装数据库的OS用户同名的初始用户。如果不指定密码则安装后初始用户密码为空,需要通过gsql客户端设置初始用户的密码后才能执行其他操作。 说明: 基于安全性考虑,GaussDB Kernel禁止了所有用户trust方式的远程登录方式,禁止了初始用户的任何方式的远程登录。 普通用户 默认可以访问数据库的默认系统表和视图(pg_authid、pg_largeobject、pg_user_status和pg_auth_history除外),可以连接默认的数据库postgres以及使用public模式下的对象(包括表、视图和函数等)。 可以通过CREATE USER、ALTER USER指定系统权限,或者通过GRANT ALL PRIVILEGE授予SYSADMIN权限。 可以通过GRANT语句授予某些对象的权限。 可以通过GRANT语法将其他角色或用户的权限授权给该用户。 数据库权限分类 通过权限和角色,可以控制用户访问指定的数据,以及执行指定类型的SQL语句。详细信息请参见表2。 系统权限只能通过CREATE/ALTER USER、CREATE/ALTER ROLE语句指定(其中SYSADMIN还可以通过GRANT/REVOKE ALL PRIVILEGES的方式赋予、回收),无法从角色继承。 表2 权限分类 分类 描述 系统权限 系统权限又称为用户属性,可以在创建用户和修改用户时指定,包括SYSADMIN、MONADMIN、OPRADMIN、POLADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。 系统权限一般通过CREATE/ALTER USER语句指定。除了SYSADMIN外的其他系统权限,无法通过GRANT/REVOKE进行授予和撤销。并且,系统权限无法通过ROLE被继承。 对象权限 对象权限是指在表、视图、索引和函数等数据库对象上执行各种操作的权限,对象权限包括SELECT、INSERT、UPDATE和DELETE等。 只有对象的所有者或者系统管理员才可以执行GRANT/REVOKE语句来分配/撤销对象权限。 角色 角色是一组权限的集合,可以将一个角色的权限赋予其他角色和用户。 由于无法给其他角色和用户赋予系统权限,所以角色只有是对象权限的集合时才有意义。 数据库权限模型 系统权限模型 默认权限机制 图1 权限架构 权限架构如图1,默认权限机制下sysadmin具有大多数的权限。 初始安装用户:集群安装过程中自动生成的账户,拥有系统的最高权限,能够执行所有的操作。 SYSADMIN:系统管理员权限,权限仅次于初始安装用户,默认具有与对象所有者相同的权限,但不包括监控管理员权限和运维管理员权限。 MONADMIN:监控管理员权限,具有监控模式dbe_perf及模式下视图和函数的访问权限和授予权限。 OPRADMIN:运维管理员权限,具有使用Roach工具执行备份恢复的权限。 CREATEROLE:安全管理员权限,具有创建、修改、删除用户/角色的权限。 AUDITADMIN:审计管理员权限,具有查看和维护数据库审计日志的权限。 CREATEDB:具有创建数据库的权限。 POLADMIN:安全策略管理员权限,具有创建资源标签,数据动态脱敏策略和统一审计策略的权限。 三权分立机制 图2 三权分立机制 SYSADMIN:系统管理员权限,不再具有创建、修改、删除用户/角色的权限,也不再具有查看和维护数据库审计日志的权限。 CREATEROLE:安全管理员权限,具有创建、修改、删除用户/角色的权限。 AUDITADMIN:审计管理员权限,具有查看和维护数据库审计日志的权限。 一个用户/角色只能具有SYSADMIN、CREATEROLE和AUDITADMIN中的一项系统权限。 对象权限模型 对象权限:指在数据库、模式、表等数据库对象上执行特定动作的权限,比如:SELECT、INSERT、UPDATE、DELETE和CONNECT等。 针对不同的数据库对象有不同的对象权限,相应地可以被授予用户/角色。 通过GRANT/REVOKE来传递对象权限,对象权限可以通过角色被继承。 角色权限模型 GaussDB Kernel提供了一组默认角色,以gs_role_开头命名。它们提供对特定的、通常需要高权限操作的访问,可以将这些角色GRANT给数据库内的其他用户或角色,让这些用户能够使用特定的功能。在授予这些角色时应当非常小心,以确保它们被用在需要的地方。表3描述了内置角色允许的权限范围。 表3 内置角色权限 角色 权限描述 gs_role_copy_files 具有执行copy … to/from filename的权限,但需要先打开GUC参数enable_copy_server_files。 gs_role_signal_backend 具有调用函数pg_cancel_backend()、pg_terminate_backend()和pg_terminate_session()来取消或终止其他会话的权限,但不能操作属于初始用户和PERSISTENCE用户的会话。 gs_role_tablespace 具有创建表空间(tablespace)的权限。 gs_role_replication 具有调用逻辑复制相关函数的权限,例如kill_snapshot()、pg_create_logical_replication_slot()、pg_create_physical_replication_slot()、pg_drop_replication_slot()、pg_replication_slot_advance()、pg_create_physical_replication_slot_extern()、pg_logical_slot_get_changes()、pg_logical_slot_peek_changes(),pg_logical_slot_get_binary_changes()、pg_logical_slot_peek_binary_changes()。 gs_role_account_lock 具有加解锁用户的权限,但不能加解锁初始用户和PERSISTENCE用户。 gs_role_pldebugger 具有执行dbe_pldebugger下调试函数的权限。 gs_role_directory_create 具有执行创建directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 gs_role_directory_drop 具有执行删除directory对象的权限,但需要先打开GUC参数enable_access_server_directory。 系统权限配置 默认权限机制配置方法 初始用户 数据库安装过程中自动生成的账户称为初始用户。初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不指定初始用户名称则该账户与进行数据库安装的操作系统用户同名。如果在安装时不指定初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端修改初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容和节点替换等操作。 初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务用途。 系统管理员 gaussdb=#CREATE USER u_sysadmin WITH SYSADMIN password '********'; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_sysadmin01 SYSADMIN; 监控管理员 gaussdb=#CREATE USER u_monadmin WITH MONADMIN password '********'; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_monadmin01 MONADMIN; 运维管理员 gaussdb=#CREATE USER u_opradmin WITH OPRADMIN password "xxxxxxxxx"; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_opradmin01 OPRADMIN; 安全策略管理员 gaussdb=#CREATE USER u_poladmin WITH POLADMIN password "xxxxxxxxx"; --或者使用如下SQL,效果一样,需要该用户已存在。 gaussdb=#ALTER USER u_poladmin01 POLADMIN; 三权分立机制配置方式 此模式需要设置guc参数“enableSeparationOfDut”y的值为“on”,该参数为POSTMASTER类型参数,修该完之后需要重启数据库。 gs_guc set -Z datanode -N all -I all -c "enableSeparationOfDuty=on" gs_om -t stop gs_om -t start 创建和配置相应的用户权限的语法和默认权限一致。 角色权限配置 --创建数据库test gaussdb=#CREATE DATABASE test; --创建角色role1,创建用户user1 gaussdb=#CREATE ROLE role1 PASSWORD '********'; gaussdb=#CREATE USER user1 PASSWORD '********'; --赋予CREATE ANY TABLE权限角色role1 gaussdb=#GRANT CREATE ON DATABASE test TO role1; --将角色role1赋予给用户user1,则用户user1属于组role1,继承role1的相应权限可以在test数据库中创建模式。 gaussdb=#GRANT role1 TO user1; --查询用户和角色信息 gaussdb=#\du role1|user1; List of roles Role name | Attributes | Member of -----------+--------------+----------- role1 | Cannot login | {} user1 | | {role1}
  • 在线校验功能 在线校验是Ustore特有的,在运行过程中可以有效预防页面因编码逻辑错误导致的逻辑损坏,默认开启UPAGE:UBTREE:UNDO三个模块校验。业务现网请保持开启,性能场景除外。 关闭: gs_guc reload -Z datanode -N all -I all -c "ustore_attr=''" 打开: gs_guc reload -Z datanode -N all -I all -c "ustore_attr='ustore_verify_level=fast;ustore_verify_module=upage:ubtree:undo'" 父主题: Ustore的最佳实践
  • 在线校验功能 在线校验是Ustore特有的,在运行过程中可以有效预防页面因编码逻辑错误导致的逻辑损坏,默认开启UPAGE:UBTREE:UNDO三个模块校验。业务现网请保持开启,性能场景除外。 关闭: gs_guc reload -Z coordinator -Z datanode -N all -I all -c "ustore_attr=''" 打开: gs_guc reload -Z coordinator -Z datanode -N all -I all -c "ustore_attr='ustore_verify_level=fast;ustore_verify_module=upage:ubtree:undo'" 父主题: Ustore的最佳实践
  • 选择分布列 Hash分布表的分布列选取至关重要,需要满足以下原则: 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。 在满足上述条件的情况下,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。 对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性: 1 2 3 4 SELECT xc_node_id, count(1) FROM tablenameGROUP BY xc_node_id ORDER BY xc_node_id DESC; 示例如下: CREATE TABLE t1(c1 int) distribute by hash(c1); INSERT INTO t1 values(generate_series(1,100)); select xc_node_id, count(1) from t1 group by xc_node_id order by xc_node_id desc; DROP TABLE t1; 其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。 GaussDB支持多分布列特性,可以更好地满足数据分布的均匀性要求。 Range/List分布表的分布列由用户根据实际需要进行选择。除了需选择合适的分布列,还需要注意分布规则对数据分布的影响。 父主题: 表设计最佳实践
  • 优势 专享迁移集群,减少资源竞争,提高迁移效率。 支持多种云平台对象存储、文件存储服务,支持自建网络文件服务。支持迁移的云平台和存储类型包括: 华为云 OBS 阿里云 OSS 百度云 BOS 腾讯云 COS 金山云 KS3 七牛云 KODO 优刻得 US3 亚马逊 S3 微软 Blob 青云QINGSTOR NAS_SMB NAS_NFS_V3_MOUNT NAS_NFS_V3_PROTOCOL HTTP/HTTPS数据源
  • 过滤策略说明 过滤策略参数填写通配符规则说明和约束说明参见表6。 表6 过滤策略参数说明 参数 说明 填写规则 约束说明 黑名单 命中黑名单规则,则文件不进行迁移/一致性对比。支持精确匹配和模糊匹配。 精确匹配 全路径精确匹配,填写文件绝对路径,特殊字符用反斜杠(\)转义。 注意: 配置黑、白名单注意事项: 如果文件存储服务地址是以冒号加斜杠(:/)结尾,请确保在黑、白名单中填写的路径是相对于挂载地址的绝对路径。 例如,文件存储服务地址为"192.1.1.1:/",挂载地址为"/mnt/turbo",则填写"/mnt/turbo"下的绝对路径。 挂载信息示例: [root@oms-cluster-ecs filter_test]# pwd /mnt/sts_turbo/mgc/filter_test [root@oms-cluster-ecs- filter_test]# ll drwxr-xr-x 2 root root 0 Aug 16 15:27 test2 -rw-r--r-- 1 root root 5 Aug 16 15:27 test2.log 如果要使黑名单精确匹配以避免迁移"test2.log"文件,则应在黑名单中填写路径:/mgc/filter_test/test2.log 如果文件存储服务地址在冒号加斜杠(:/)之后还包含其他路径,配置黑、白名单时,除了填写挂载地址下的绝对路径外,还要加上文件存储服务地址:/之后的部分。 例如,文件存储服务地址为"192.1.1.1:/mgc-test",挂载地址为"/mnt/turbo",则填写"mgc-test+/mnt/turbo"下的绝对路径。 挂载信息示例: [root@oms-cluster-ecs execution-service]# cd /mnt/turbo/autotest/filter_test/ [root@oms-cluster-ecs- filter_test]# ll -rw-r--r-- 1 root root 14 Aug 8 09:22 test1.log drwxr-xr-x 1 root root 4096 Aug 8 09:22 test2 -rw-r--r-- 1 root root 14 Aug 8 09:22 test2.log 如果要使黑名单精确匹配以避免迁移"test2"文件,则应在黑名单中填写路径:/mgc-test/autotest/filter_test/test2 模糊匹配 *匹配任何字符0个或者多个,但不匹配斜杠(/) 使用**匹配任何字符0个或者多个,包括斜杠(/) ?匹配除斜杠(/)之外的任何字符,只能匹配一个 {和}定义元素之间的选择:包含一个以逗号分隔的模式列表, 其中任何一种模式都可能匹配,可以包含通配符。 特殊字符可以在它们之前使用 \进行转义,\后面为通配符时,表示转义,否则表示\本身 除{ 和 } 以外,不能出现连续的规则符号,例如:***、*?、**?、?*、?**、*{*、*}*、*}?、?{*、{*}、{,}、{*,、 ,*}、,*,。 { 和 } 之间的模式,只能使用*做通配符。 { 和 } 之间的模式,不能有{}嵌套。 文件绝对路径在黑名单和白名单同时命中,则黑名单生效,即不做迁移。 需要配置多个匹配规则时,用英文分号隔开。 白名单 白名单为空时,迁移所有文件。 白名单不为空时,仅对绝对路径命中白名单规则的文件进行迁移/一致性对比。 时间段 配置时间段,根据配置,迁移最后修改时间在配置时间段内的文件或者文件夹。 开始时间和结束时间可以配置为空,为空时表示不限制,时间可以精确到分钟。 过滤策略场景规则示例以及举例见下表。 例如第一级目录为“test”,那么: NAS的路径格式为:“/test”。 OBS的路径格式为:“test”。 场景 NAS规则示例 OBS规则示例 说明 文件路径以xx结尾(特定后缀) /xx /**xx xx/**xx xx可以是包含*和?的表达式 根路径下第一层xx开始的文件 /xx* /testssss 匹配 /test/xx 不匹配 /xx* testssss 匹配 test/xx 不匹配 文件路径以xx开始 /xx** /xx/** xx** xx/** 文件名包含xx **xx* **xx* 文件路径包含xx **xx** **xx** 文件路径以xx开始,以yy结尾 /xx**yy xx**yy xx,yy可以是包含*和?的表达式 文件路径以xx,yy结尾(特定后缀) **{xx,yy} **{xx,yy} 文件名包含xx,yy **{xx,yy}* **{xx,yy}* 文件路径包含xx,yy **{xx,yy}** **{xx,yy}**
  • 操作步骤 登录迁移中心管理控制台。 在左侧导航栏选择“总览”,进入总览页面。 在新手入门选择跨可用区迁移,在单批次小数量 主机迁移 用户一站式跨可用区迁移区域,单击“开始创建”按钮。 在弹出一站式跨可用区迁移窗口,自定义应用名称,选择要迁移到的目的可用区。 单击“开始执行”,系统会自动采集当前账号下所选区域主机信息,并自动创建应用将主机加入到该应用内,开始迁移评估。 评估执行完成后,单击“关闭”按钮,进行工作流配置。 根据表1参数说明,配置工作流参数。 表1 参数说明 区域 参数 说明 工作流详情 名称 用户自定义 描述 用户自定义 应用程序 应用名称 选择步骤4中自定义的应用名称。 迁移设置 区域 选择待迁移可用区所在Region,与创建的应用配置保持一致。 目的可用区 选择要迁移到目的端可用区,与创建的应用配置保持一致。 网络设置 当前只支持“保留源端配置”。 目的虚拟机创建策略 立即创建 工作流立即开始进行源端备份,源端各自独立备份完成后,立即开始生成镜像和目的端主机。 目的端是否关机 选择“是”,生成目的端后,目的端保持关机状态。 选择“否”,生成目的端后,目的端自动开机。 增量备份前源端是否关机 选择“是”,工作流在执行增量备份前,会关闭源端主机,这样可以最大限度保证新建目的端数据与源端数据的一致性。 选择“否”,工作流在执行增量备份时,依旧保持开机状态。 创建系统盘镜像 选择“是”,将基于源端系统盘创建系统盘镜像,便于后续目的端重装系统。 选择“否”,不创建系统盘镜像。 高级设置 自动删除镜像 选择开启,业务割接后自动删除迁移过程中产生的备份、快照及镜像文件。 保持主网卡IP不变 选择开启时,将目的端的主网卡私有IP切换为源端主网卡私有IP,并绑定源端主网卡绑定的EIP,此时源端主网卡私有IP将设置为随机IP,并解绑EIP。以上操作不支持自动回退,需要您手动回退。 工作流配置完成后,单击“下一步:确认并创建”按钮,确认配置信息无误后,单击“确认创建工作流”。迁移工作流创建完成,可在工作流列表查看。 此时迁移工作流状态为“等待中”,并未开始迁移。 单击工作流名称,进入工作流详情页面,工作流步骤为迁移模板的标准步骤,您也可以在工作流步骤中自行添加阶段/步骤。 确定工作流步骤后,单击“运行”按钮,开始迁移。 在工作流步骤页签可以监控迁移进展。如果迁移步骤中包含手动操作,需要您进行手动确认后,才能进行后续步骤。 在主机页签,可以查看每台主机的迁移状态。
  • 使用INSERT批量插入 带SELECT子句使用批量插入操作来实现高性能数据插入。 如果需要将数据或数据子集从一个表移动到另一个表,可以使用INSERT和CREATE TABLE AS命令。 如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。 1 2 3 4 5 6 7 8 openGauss=# CREATE TABLE customer_t2 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); openGauss=# INSERT INTO customer_t2 SELECT * FROM customer_t1; 上面的示例等价于: 1 openGauss=# CREATE TABLE customer_t2 AS SELECT * FROM customer_t1;