华为云用户手册

  • 创建逻辑集群关联用户并实现跨逻辑查询数据 以系统管理员连接数据库,执行以下SQL语句查询原业务表t1。 验证转换后,业务数据查询正常。 1 SELECT * FROM t1; 执行以下语句创建u1关联逻辑集群lc1,u2关联逻辑集群lc2,并将原业务表t1的所有权限授予用户u1。 1 2 3 CREATE USER u1 NODE GROUP 'lc1' password '{password}'; CREATE USER u2 NODE GROUP 'lc2' password '{password}'; GRANT ALL ON TABLE t1 TO u1; 切换到用户u2,查询原业务表t1数据,提示无权访问逻辑集群lc1,说明逻辑集群间数据隔离。 1 2 SET ROLE u2 PASSWORD '{password}'; SELECT * FROM t1; 切回系统管理员dbadmin,将逻辑集群lc1的访问权限授予用户u2。 1 2 SET ROLE dbadmin PASSWORD '{password}'; GRANT USAGE ON NODE GROUP lc1 TO u2; 再次切到用户u2,查询表t1成功。结果验证绑定了逻辑集群lc2的用户可以跨逻辑集群查询到原业务表t1。实现逻辑集群间的数据共享。 1 2 SET ROLE u2 PASSWORD '{password}'; SELECT * FROM t1;
  • 场景介绍 大规模数据库集群通常会同时包含很多业务数据,不同业务有不同的数据表,可以通过资源管理功能创建多个资源池来实现不同业务的资源隔离。GaussDB(DWS)支持将不同业务用户分配给不同资源池,以便减少业务之间资源(CPU资源、内存资源、IO资源和存储资源)竞争。 但随着业务规模不断扩大,集群系统中的业务数目越来越多,通过划分多个资源池来管理越来越难以控制资源竞争。由于GaussDB(DWS)的分布式架构,业务数据被分散存储在多个节点上即每个表都会分布在数据库集群的所有DN节点上,因此每次数据表操作都可能会涉及所有DN节点,导致网络压力增大和系统资源大量消耗,仅通过扩大集群规模也很难解决,GaussDB(DWS)建议用户划分多个逻辑集群来解决业务数量扩大带来的网络压力和资源消耗问题。 通过划分独立的逻辑集群,将新增的业务分配到独立的逻辑集群上,这样新增业务对原有业务的影响会很小。而原有逻辑集群中的业务规模如果扩大,也可以通过对原有逻辑集群扩容来解决。 如图1所示,假设某企业原有业务数据表都在原物理集群dws-demo(绿色部分),切换到逻辑集群lc1(蓝色部分)后,物理集群再通过扩容方式,新增一套新的逻辑集群lc2,原有业务数据表统一切换到逻辑集群lc1,新的业务数据表统一写入到逻辑集群lc2,实现新老业务的数据隔离。而新的逻辑集群lc2关联的用户u2,通过授权可以跨逻辑集群访问逻辑集群lc1的表。 集群规模:从原始的物理集群3节点,扩容到6节点并拆分成2套逻辑集群。 业务隔离:新、老业务数据隔离在不同逻辑集群中。
  • 加密密钥轮转 加密密钥轮转是指更新保存在GaussDB(DWS) 服务的密文。在GaussDB(DWS) 中,您可以轮转已加密集群的加密密钥CEK。 密钥轮转流程如下: GaussDB(DWS) 集群启动密钥轮转。 GaussDB(DWS) 根据集群的主密钥来解密保存在GaussDB(DWS) 服务中的CEK密文,获取CEK明文。 用获取到的CEK明文解密保存在GaussDB(DWS) 服务中的DEK密文,获取DEK明文。 GaussDB(DWS) 重新生成新的CEK明文。 GaussDB(DWS) 用新的CEK明文加密DEK并将DEK密文保存在GaussDB(DWS) 服务中。 用主密钥加密新的CEK明文并将CEK密文保存在GaussDB(DWS) 服务中。 您可以根据业务需求和数据类型计划轮转加密密钥的时间。为了提高数据的安全性,建议用户定期执行轮转密钥以避免密钥被破解的风险。一旦您发现密钥可能已泄露,请及时轮转密钥。 GaussDB(DWS) 轮转集群的CEK时,集群相关的快照不需要轮转CEK,因为CEK不会在集群快照中进行保存,CEK明文是保存在GaussDB(DWS) 集群内存中的,密文是保存在GaussDB(DWS) 服务中的。 由于密钥轮转不更新DEK,所以对于数据的加解密不会有影响。
  • 使用KMS服务加密GaussDB(DWS) 数据库 当选择KMS(密钥管理服务)对GaussDB(DWS) 进行密钥管理时,加密密钥层次结构有三层。按层次结构顺序排列,这些密钥为主密钥(CMK)、集群加密密钥 (CEK)、数据库加密密钥 (DEK)。 主密钥用于给CEK加密,保存在KMS中。 CEK用于加密DEK,CEK明文保存在GaussDB(DWS) 集群内存中,密文保存在GaussDB(DWS) 服务中。 DEK用于加密数据库中的数据,DEK明文保存在GaussDB(DWS) 集群内存中,密文保存在GaussDB(DWS) 服务中。 密钥使用流程如下: 用户选择主密钥。 GaussDB(DWS) 随机生成CEK和DEK明文。 KMS使用用户所选的主密钥加密CEK明文并将加密后的CEK密文导入到GaussDB(DWS) 服务中。 GaussDB(DWS) 使用CEK明文加密DEK明文并将加密后的DEK密文保存到GaussDB(DWS) 服务中。 GaussDB(DWS) 将DEK明文传递到集群中并加载到集群内存中。 当该集群重启时,集群会自动通过API向GaussDB(DWS) 请求DEK明文,GaussDB(DWS) 将CEK、DEK密文加载到集群内存中,再调用KMS使用主密钥CMK来解密CEK,并加载到集群内存中,最后用CEK明文解密DEK,并加载到集群内存中,返回给集群。
  • GaussDB(DWS) 数据库加密 在GaussDB(DWS) 中,您可以为集群启用数据库加密,以保护静态数据。当您为集群启用加密时,该集群及其快照的数据都会得到加密处理。您可以在创建集群时启用加密。加密是集群的一项可选且不可变的设置。要从未加密的集群更改为加密集群(或反之),必须从现有集群导出数据,然后在已启用数据库加密的新集群中重新导入这些数据。数据库加密是在数据落盘时进行加密,即在往GaussDB(DWS) 写入数据时GaussDB(DWS) 会对数据进行加密,而在用户查询数据时GaussDB(DWS) 会将数据自动进行解密后再将结果返回给用户。 如果希望加密,可以在集群创建时启用加密。虽然加密是GaussDB(DWS) 集群中的一项可选设置,但建议您为集群启用该设置以保护数据。 DWS 3.0集群暂不支持数据库加密功能。 数据库加密功能只能创建集群时选择是否开启,不支持集群创建后再开启,一旦开启就无法关闭。详情请参见加密数据库。 开启数据库加密功能后,用于加密GaussDB(DWS) 数据库的KMS密钥在使用过程中不能被禁用、删除或冻结,否则会导致GaussDB(DWS) 集群异常或数据库不可用。 开启数据库加密功能后创建的快照不支持使用openAPI做恢复。
  • 扩容对系统的影响 扩容前,需关闭创建了临时表的客户端连接,因为在扩容过程中及扩容成功之前创建的临时表将会失效,操作临时表也会失败。但是扩容后创建的临时表不受影响。 在执行“扩容”操作后,集群会进行一次自动快照,快照创建成功后进行集群扩容。 正在扩容的集群将禁用重启集群、扩容集群、创建快照、重置数据库管理员密码和删除集群的功能。 离线扩容过程中,集群会自动重启,因此集群会有一段时间变为“不可用”状态,重启成功后集群恢复到“可用”状态。然后在扩容结束阶段,系统会将集群中用户数据在全部节点重新动态分布。 离线扩容过程中,应该停止所有业务或运行少量查询语句。表重分布期间会对表加共享锁,所有插入、更新、删除操作和表DDL操作都会长时间阻塞,会出现等锁超时情况。一旦表重分布完成,用户可以正常访问该表。在重分布执行过程中,应当避免执行超过20分钟的查询(在重分布执行时申请写锁的默认时间为20分钟)。否则可能导致重分布出现等待加锁超时失败的问题。 在线扩容过程中,节点添加期间会执行锁集群操作。锁集群操作时会进行数据库对象检查。为保证锁集群成功,在节点添加期间不要执行database和tablespace的创删语句。 在线扩容过程中,表重分布期间可以对该表执行插入、更新、删除等操作,但重分布过程仍然会短时间阻塞数据更新操作,会影响语句的执行性能。扩容重分布过程会消耗大量的CPU和IO资源,因此对作业性能影响较大,应该尽可能在停止业务或业务轻载的情况下执行扩容重分布。也可以考虑分段扩容重分布策略,在系统负载很小的情况下采用高并发进行扩容重分布,在系统负载大的情况下停止扩容重分布或采用低并发进行扩容重分布。 扩容后,如果集群创建新快照,将包含扩容节点上的数据。 如果集群扩容失败,数据库会在后台自动执行扩容回滚操作,集群会恢复到扩容前的节点个数。 如果回滚成功,集群仍可以正常使用,用户可以重新执行“扩容”操作,如果仍扩容失败,请及时联系技术支持人员进行处理。 如果因为某些异常原因后台回滚失败,则集群可能会变为“不可用”状态,此时无法再执行“扩容”或重启集群的操作,请及时联系技术支持人员进行处理。
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称。例如,DWS。 集群名称 产生告警的集群名称。 定位信息 产生告警的集群ID、集群名称、实例ID、实例名称。例如,cluster_id: xxxx-xxxx-xxxx-xxxx,cluster_name: test_dws,instance_id: xxxx-xxxx-xxxx-xxxx,instance_name: test_dws-dws-cn-cn-1-1 详细信息 产生告警的详细信息,包括集群、实例、阈值信息。例如:CloudService=DWS, resourceId=xxxx-xxxx-xxxx-xxxx,resourceIdName=test_dws, instance_id: xxxx-xxxx-xxxx-xxxx,instance_name: test_dws-dws-cn-cn-1-1,host_name: host-192-168-1-122,first_alarm_time: 2022-01-30 10:30:00; 节点10分钟内的平均CPU使用率为90.54%,超过阈值90% 产生日期 产生告警的时间。 状态 当前告警的处理状态。
  • 空间管理简介 存储资源无节制的使用可能导致磁盘满,进而导致集群异常、业务中断。磁盘满问题具有业务恢复难度大、恢复时间长的特点,通过引入数据库只读,极大概率降低了磁盘满问题的发生,但是数据库只读同样会导致业务中断,影响业务连续性。为解决数据库只读问题,GaussDB(DWS)提供了多维度的存储资源管理能力,一方面在schema维度实现了schema空间管理,用于限制schema使用的永久空间大小;一方面在用户维度实现了永久空间、临时空间和算子空间管理,防止单用户业务异常导致数据库只读。 schema维度:schema空间管理模块可查询集群下数据库和模式空间信息,并支持修改模式空间总值。 用户维度:用户空间管理用于限定不同用户可以使用的空间限额,防止用户使用存储空间过大导致业务执行受阻。GaussDB(DWS)通过在创建用户时指定空间大小的方式实现对存储资源的管理,支持管理的存储空间类型包括: 永久表存储空间(PREM SPACE) 用于限制用户创建的永久表(非临时表)占用的空间限额。 临时表存储空间(TEMP SPACE) 用于限制用户创建的临时表占用的空间限额。 算子落盘空间(SPILL SPACE) 查询执行过程中,如果实际使用内存大于估算内存,则查询可能产生落盘,将这种查询执行过程中落盘占用的存储空间称为算子落盘空间。用户算子落盘空间管理用于限制用户查询执行过程中算子落盘占用的空间限额。 该特性仅8.1.1及以上集群版本支持。 GaussDB(DWS)管控面目前仅支持模式空间管理。
  • 操作步骤 登录GaussDB(DWS)管理控制台。 在集群列表中单击需要访问“资源管理”页面的集群名称。 进入“基本信息”页面,左导航栏单击“资源管理”。 切换至“schema空间管理”模块,切换需要查看的数据库。 在需要修改空间限额模式的所在行操作列,单击“编辑”按钮,修改合适的空间限额。 单击“确定”提交。 空间限额仅对普通用户有效,数据库系统管理员用户不受限制(因此当显示已用空间等于空间限额时,真实使用空间可能已超出设置的值)。 单DN限额=总限额/DN节点数,所以设置值可能与最终显示值存在细微差异。
  • 支持的事件类别和事件 事件是用户集群状态发生变化的记录。它可以是由用户操作触发的(比如审计事件),也有可能是集群服务状态变化引起的(比如集群修复成功或集群修复失败)。以下为当前GaussDB(DWS)支持的事件和事件类别列表。 下表显示了事件源类型为集群的事件 表1 事件源类型为集群的事件 事件类别 事件名称 事件级别 事件 管理 createClusterFail 警告 集群创建失败 管理 createClusterSuccess 正常 集群创建成功 管理 createCluster 正常 开始创建集群 管理 extendCluster 正常 开始扩容集群 管理 extendClusterSuccess 正常 集群扩容成功 管理 extendClusterFail 警告 集群扩容失败 管理 deleteClusterFail 警告 集群删除失败 管理 deleteClusterSuccess 正常 集群删除成功 管理 deleteCluster 正常 开始删除集群 管理 restoreClusterFail 警告 集群恢复失败 管理 restoreClusterSuccess 正常 集群恢复成功 管理 restoreCluster 正常 开始恢复集群 管理 restartClusterFail 警告 集群重启失败 管理 restartClusterSuccess 正常 集群重启成功 管理 restartCluster 正常 开始重启集群 管理 configureMRSExtDataSources 正常 开始配置集群的MRS外部数据源 管理 configureMRSExtDataSourcesFail 警告 配置集群的MRS外部数据源失败 管理 configureMRSExtDataSourcesSuccess 正常 配置集群的MRS外部数据源成功 管理 deleteMRSExtDataSources 正常 开始删除集群MRS外部数据源 管理 deleteMRSExtDataSourcesFail 警告 删除集群MRS外部数据源失败 管理 deletedMRSExtDataSourcesSuccess 正常 删除集群MRS外部数据源成功 管理 bindEipToCluster 正常 集群绑定EIP 管理 bindEipToClusterFail 警告 集群绑定EIP失败 管理 unbindEipToCluster 正常 集群解绑EIP 管理 unbindEipToClusterFail 警告 集群解绑EIP失败 管理 refreshEipToCluster 正常 集群刷新EIP 管理 refreshEipToClusterFail 警告 集群刷新EIP失败 管理 dmsClusterMonitoringEnabledSuccessfully 正常 打开DMS集群监控开关成功 管理 failedToEnableDmsClusterMonitoring 正常 打开DMS集群监控开关失败 管理 dmsClusterMonitoringDisabledSuccessfully 正常 关闭DMS集群监控开关成功 管理 failedToDisableDmsClusterMonitoring 正常 关闭DMS集群监控开关失败 管理 dmsMetricCollectionEnabledSuccessfully 正常 打开DMS采集成功 管理 failedToEnableDmsMetricCollection 正常 打开DMS采集失败 管理 dmsMetricCollectionDisabledSuccessfully 正常 关闭DMS采集成功 管理 failedToDisableDmsMetricCollection 正常 关闭DMS采集失败 管理 dmsMetricCollectionResetSuccessfully 正常 重置DMS采集成功 管理 failedToResetDmsMetricCollection 正常 重置DMS采集失败 管理 dmsMetricCollectionUpdatedSuccessfully 正常 更新DMS采集成功 管理 failedToUpdateDmsMetricCollection 正常 更新DMS采集失败 管理 dmsMetricDataRetentionPeriodUpdatedSuccessfully 正常 更新DMS采集存储时间成功 管理 failedToUpdateTheDmsMetricDataRetentionPeriod 正常 更新DMS采集存储时间失败 管理 dmsSessionsTerminatedSuccessfully 正常 DMS终止会话成功 管理 failedToTerminateDmsSessions 正常 DMS终止会话失败 管理 dmsQueriesTerminatedSuccessfully 正常 DMS终止查询成功 管理 failedToTerminateDmsQueries 正常 DMS终止查询失败 管理 dmsCreateWDRSuccessfully 正常 DMS生成负荷报告任务下发成功 管理 failedToCreateWDR 警告 DMS生成负荷报告任务下发失败 管理 dmsDeleteWDRSuccessfully 正常 DMS删除负荷报告成功 管理 failedToDeleteWDR 警告 DMS删除负荷报告失败 管理 dmsUpdateWDRConfigSuccessfully 正常 DMS更新负荷报告参数成功 管理 failedToUpdateWDRConfig 警告 DMS更新负荷报告参数失败 管理 dmsCreateWorkloadSnapshotSuccessfully 正常 DMS新增负荷快照任务下发成功 管理 failedToCreateWorkloadSnapshot 警告 DMS新增负荷快照任务下发失败 安全 resetPasswordFail 警告 集群密码重置失败 安全 resetPasswordSuccess 正常 集群密码重置成功 安全 updateConfiguration 正常 开始更新集群安全参数 安全 updateConfigurationFail 警告 更新集群安全参数失败 安全 updateConfigurationSuccess 正常 更新集群安全参数成功 监控 repairCluster 正常 节点故障,开始修复集群 监控 repairClusterFail 警告 集群修复失败 监控 repairClusterSuccess 正常 集群修复成功 下表显示了事件源类型为快照的事件 表2 事件源类型为快照的事件 事件类别 事件名称 事件级别 事件 管理 deleteBackup 正常 快照删除成功 管理 deleteBackupFail 警告 快照删除失败 管理 createBackup 正常 开始创建快照 管理 createBackupSuccess 正常 快照创建成功 管理 createBackupFail 警告 快照创建失败
  • 概述 GaussDB(DWS) 使用SMN(Simple Message Notification,消息通知服务)发送GaussDB(DWS) 事件的通知,订阅GaussDB(DWS) 事件即可启用通知。在订阅中,用户需要指定一个或多个事件筛选条件。每当发生与所有筛选条件匹配的事件时,GaussDB(DWS) 就会通过该订阅发送通知。筛选条件包含事件类别(例如:管理、监控或安全)、事件级别(例如:正常或警告)和事件源类型(例如:集群或快照)。
  • 开启操作保护 操作保护默认关闭,您可以参考以下步骤开启操作保护。 登录GaussDB(DWS)管理控制台。 在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中单击“安全设置”。 在“安全设置”页面中,切换至“敏感操作”页签,单击“操作保护”区域的“立即启用”。 图1 敏感操作 在“操作保护设置”页面中,选择“开启”,单击“确定”后,开启操作保护。 用户如果进行敏感操作,将进入“操作保护”页面,选择认证方式,包括邮箱、手机和虚拟MFA三种认证方式。 如果用户只绑定了手机,则认证方式只能选择手机。 如果用户只绑定了邮箱,则认证方式只能选择邮件。 如果用户未绑定邮箱、手机和虚拟MFA,进行敏感操作时,华为云将提示用户绑定邮箱、手机或虚拟MFA。 如需修改验证手机号、邮件地址,请在账户中心修改。详情请参见IAM基本信息。 当您开启操作保护,在进行敏感操作时,系统会先进行敏感操作保护。 例如在您进行删除集群操作时,会弹出敏感操作保护验证框,需要选择一种验证方式进行验证,避免误操作带来的风险和损失。
  • 查看快照信息 登录GaussDB(DWS) 管理控制台。 在左侧导航栏中,单击“快照管理”。 在快照列表中,默认显示用户所有的快照。 在快照列表中,查看快照的“快照名称”、“快照状态”、“集群名称”、“备份方式”、“快照类型”、“快照介质”和“快照创建时间”。 用户也可以在快照列表的右上角,输入快照名称或集群名称并单击,搜索指定的快照。支持模糊搜索名称的部分字符。 快照状态如表1所示。 表1 快照状态说明 状态 说明 “可用” 表示当前快照工作正常。 “创建中” 表示当前快照正在创建中。 “不可用” 表示当前快照无法提供服务。 备份方式如表 备份方式所示。 表2 备份方式 类型 说明 手动 用户通过GaussDB(DWS)管理控制台或者API接口手动创建的快照。用户可以删除手动快照。 自动 用户为集群开启快照自动备份策略后,系统自动创建的快照。用户不能删除自动快照,自动快照的保留天数超期后,系统会自动进行删除。 快照类型如表3所示。 表3 快照类型 类型 说明 全量 该快照为全量备份。 增量 该快照为增量备份。 快照介质如表4所示。 表4 快照介质 快照介质 说明 OBS 策略中配置备份设备为:OBS,则创建出的快照为OBS快照,备份数据保存在OBS服务器上。 NFS 策略中配置备份设备为:NFS,则创建出的快照为NFS快照,备份数据保存在NFS服务器上。
  • 资源管理计划简介 资源管理计划功能是GaussDB(DWS)为客户提供的资源管理高级特性,客户可以通过创建资源管理计划,向计划中添加多个时间阶段,并为每个阶段配置不同的资源配比。当启动计划时,计划就会按照配置在不同的时间段自动切换资源配置。如果客户在不同的时间段运行不同的业务,而这些业务又会占用不同比重的资源,使用资源管理计划功能可以很好的帮助客户实现不同时间段的资源配置自动切换。 资源管理计划支持8.1.0.100及以上版本。
  • 缩容对系统的影响 缩容前,需关闭创建了临时表的客户端连接,因为在缩容过程中及缩容成功之前创建的临时表将会失效,操作临时表也会失败。但是缩容后创建的临时表不受影响。 在执行缩容操作后,集群会进行一次自动快照,快照创建成功后进行集群缩容,若用户不想自动创建快照,可以在缩容界面选择取消自动备份功能。 缩容前,需确保倾斜率不超过10%,脏页率没有硬性指标,但对于50G以上的大表,建议倾斜率不要超过20%~30%。 正在缩容的集群禁用重启集群、扩容集群、创建快照、节点管理、智能运维、资源管理、参数修改、安全设置、日志服务、重置数据库管理员密码和删除集群的功能。 离线缩容过程中,应该停止所有业务或运行少量查询语句。表重分布期间会对表加共享锁,所有插入、更新、删除操作和表DDL操作都会长时间阻塞,会出现等锁超时情况。一旦表重分布完成后方可正常访问。在重分布执行过程中,应当避免执行超过20分钟的查询(在重分布执行时申请写锁的默认时间为20分钟)。否则可能导致重分布出现等待加锁超时失败的问题。 在线缩容过程中,表重分布期间用户可以对该表执行插入、更新、删除等操作,但重分布过程仍然会短时间阻塞用户的数据更新操作,会影响用户语句的执行性能。缩容重分布过程会消耗大量的CPU和IO资源,因此会对用户作业性能影响较大,应该尽可能在停止业务或业务轻载的情况下执行缩容重分布。 在线缩容删除节点的瞬间,如果有DDL语句正在执行,例如创建schema或function并发执行,这些DDL可能因为DN不存在而报错,用户重试即可成功。 如果集群缩容失败,数据库不会在后台自动执行缩容回滚操作,此时数据库所有运维操作不可用,需要用户在管理控制台页面上单击缩容按钮来重新执行数据库缩容操作。 在云原生9.0.2版本缩容场景下,新集群的bucket数量不满足条件:每个DN分配的bucket数量在[3, 20]之间时,系统会触发调整bucket的缩容。bucket数量可以通过GUC参数table_buckets查看。 此bucket缩容目前仅支持离线模式,使用方式与现有缩容相同,触发修改bucket的缩容过程为系统自动判断和执行。 触发过程集群会重启,关闭所有连接,重启会花费数分钟。 重启完毕后,数据库可以读,但不允许写,直到数据重分布结束。
  • 前提条件 集群状态需为可用状态,不支持只读状态,并且确保集群没有进行重分布操作。 集群配置文件已经生成,配置的信息正确并且和当前集群状态一致。 缩容前用户需要确保default_storage_nodegroup参数值为installation。 集群按照环的方式配置,比如4个或5个主机组成一个环,这些主机上的DN主节点、备节点和从节点都部署在这个环里, 缩容的最小单元是一个环。 缩容的主机不能包含ETCD组件、GTM组件、CM Server组件。 缩容不支持包括CN的节点,如果包括CN,先进行删除CN操作后再缩容。 缩容不支持回滚,支持重入。缩容数据重分布失败,不影响业务,用户可选择合适的时间尽快完成重分布,否则会导致数据长期分布不均匀。 重分布前,需要保证对应数据库下的data_redis为重分布预留schema,不允许用户操作该schema和其内部表。因为在重分布过程中,会使用到data_redis并且重分布。结束后会删除该schema,如果存在用户表,则可能会出现数据误删。 缩容过程不支持gs_cgroup操作。 缩容后的节点必须有足够的存储空间存放整个集群的数据,否则缩容无法正常进行,执行缩容前,需对集群剩余容量进行检查,条件满足后可进行缩容。 所有节点已使用物理磁盘空间均小于80%。 所有用户和角色的使用量均小于配额的80%。 总数据量缩容后的空间预估要小于80%。 所有剩余可用空间均是最大单表大小的1.5倍以上。 缩容过程中系统将关闭“自动剔除故障CN”功能,在缩容完成后系统再次打开该功能。
  • GaussDB(DWS) 自定义策略样例 示例1:授权用户创建/恢复集群、重启集群、删除集群、设置安全参数、重置密码的权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:cluster:create", "dws:cluster:restart", "dws:cluster:delete", "dws:cluster:setSecuritySettings", "dws:cluster:resetPassword", "dws:*:list*", "dws:*:get*", "tms:predefineTags:list" "ecs:*:get*", "ecs:*:list*", "elb:*:list*", "ecs:*:create*", "ecs:*:delete*", "vpc:*:get*", "vpc:*:list*", "vpc:*:create*", "vpc:*:delete*", "evs:*:get*", "evs:*:list*", "evs:*:create*", "evs:*:delete*" ] } ] } 示例2:通配符*用法示例 例如,以下策略具有对GaussDB(DWS)快照的所有操作权限。 { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:snapshot:*", "dws:cluster:list", "dws:openAPISnapshot:detail", "dws:cluster:getDetail", "ecs:*:get*", "ecs:*:list*", "vpc:*:get*", "vpc:*:list*" ] } ] } 示例3:拒绝用户删除集群 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予GaussDB(DWS) FullAccess的系统策略,但不希望用户拥有GaussDB(DWS) FullAccess中定义的删除集群权限,您可以创建一条拒绝删除集群的自定义策略,然后同时将GaussDB(DWS) FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对GaussDB(DWS) 执行除了删除集群外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:*:list*", "dws:*:get*" ] }, { "Effect": "Deny", "Action": [ "dws:cluster:delete" ] } ] } 示例4:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:cluster:create", "dws:cluster:restart", "dws:cluster:setSecuritySettings", "dws:*:get*", "dws:*:list*", "tms:predefineTags:list", "elb:*:list*", "ecs:*:get*", "ecs:*:list*", "ecs:*:create*", "vpc:*:get*", "vpc:*:list*", "vpc:*:create*", "evs:*:get*", "evs:*:list*", "evs:*:create*" ] }, { "Effect": "Deny", "Action": [ "dws:cluster:delete" ] } ] }
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称。例如:DWS。 集群名称 产生告警的集群名称。 定位信息 产生告警的集群ID、集群名称。例如,cluster_id: xxxx-xxxx-xxxx-xxxx,cluster_name: test_dws。 详细信息 产生告警的详细信息,包括集群、阈值信息。例如:CloudService=DWS, resourceId: xxxx-xxxx-xxxx-xxxx, resourceIdName: test_dws, first_alarm_time: 2022-11-26 11:14:58; 集群 test_dws的SQL探针阈值为 2倍。该集群sql探针超过阈值的SQL探针有:'select xxx from xxxx'。 产生日期 产生告警的时间。 状态 当前告警的处理状态。
  • 场景介绍 如果在不同时段内业务流量差异非常大,3节点集群又无法满足高峰期的吞吐量要求,但扩容至6节点又存在资源浪费或费用较高问题。用户可通过本章教程再结合定时增删DWS 3.0逻辑集群功能,实现类似于“晚上低峰期3节点,白天6节点,高峰期9节点”的弹性扩展功能。 本章演示了一组新扩容逻辑集群(无业务数据)配置为只读,并将部分用户切换到此只读逻辑集群上,实现用户创建的表都仍然在其原始的NodeGroup上,但计算逻辑都切到只读逻辑集群上执行效果。
  • 配置只读逻辑集群,并将用户切换到只读逻辑集群上 以系统管理员dbadmin连接数据库,执行以下SQL语句查看逻辑集群创建成功。 1 SELECT group_name FROM PGXC_GROUP; 设置逻辑集群lc1为只读。 1 2 3 SET xc_maintenance_mode=on; ALTER NODE GROUP lc1 SET READ ONLY; SET xc_maintenance_mode=off; 创建用户。 1 create user testuser password 'testuser12#$%'; 绑定用户到逻辑集群lc1,如下语句中的testuser、lc1等变量需结合实际情况替换。 首先我们需要找到用户的NodeGroup,如果能查到记录,将其设置到该用户的default_storage_nodegroup上,以便该用户创建的表都仍然在其原始的NodeGroup上;若查不到记录,直接进行后面的两条alter语句即可。 1 2 SELECT nodegroup FROM pg_user WHERE usename='testuser'; ALTER USER testuser SET default_storage_nodegroup='nodegroup'; //这里nodegroup需替换为上述SQL查到的NodeGroup名 同时将用户绑定到新的只读逻辑集群上,这样该用户的计算逻辑都会切到只读逻辑集群上执行。 1 2 ALTER USER testuser NODE GROUP lc1; ALTER USER testuser SET enable_cudesc_streaming=ON;
  • 开启运维账户 登录GaussDB(DWS) 管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,在运维账户模块打开集群运维账户开关。 图2 打开运维账户开关 弹出确认窗口,单击“确认”按钮。 开启运维账户后,将在集群中创建运维账户,账户名为om_user_集群ID前8位。 并赋予账户gs_role_analyze_any,gs_role_vacuum_any,gs_role_read_all_stats,gs_role_signal_backend角色权限。详情请参考:预置角色。 用户不需要授权时可关闭按钮删除运维账户。
  • GaussDB(DWS) 使用流程介绍 图1 GaussDB(DWS) 使用流程 表1 GaussDB(DWS) 使用流程介绍 主流程 子任务 说明 操作指导 准备工作 - 在使用GaussDB(DWS) 服务之前,请在您的防火墙中确定一个开放端口作为GaussDB(DWS) 集群的数据库端口。 准备工作 创建集群 - 在使用GaussDB(DWS) 执行数据分析任务前,您首先要创建一个集群。一个GaussDB(DWS) 集群由多个在相同子网中的节点组成,共同提供服务。创建集群时,系统会创建一个默认数据库。 创建DWS 2.0集群 创建包年/包月集群 连接集群 - GaussDB(DWS) 集群创建完成后,您就可以使用SQL客户端工具或者JDBC/ODBC等第三方驱动程序连接集群中的数据库。进入GaussDB(DWS) 控制台的“连接客户端”页面,您可以下载SQL客户端工具和JDBC/ODBC驱动程序。 连接集群 访问数据库 - 连接集群后,您就可以创建和管理数据库,管理用户及权限,导入或导出数据,以及查询和分析数据。 《数据仓库服务数据库开发指南》 管理和监控集群 管理集群 您可以查看集群状态,修改集群配置,添加集群标签,对集群进行扩容、重启、删除等管理操作。 管理集群 管理快照 通过创建集群快照,可以对集群进行备份,使用快照可以恢复集群。 管理快照 运维与监控 您可以通过监控集群、审计日志、事件通知和资源负载管理了解集群的运行状况和性能。 Cloud Eye监控集群 事件通知 审计日志 资源管理 扩容与规格变更 当需要更多的计算资源或存储资源以满足业务需要时,可以在管理控制台对已有集群进行扩容操作。 集群创建后,支持通过管理控制台变更集群规格。 集群扩容 规格变更 升级集群 8.1.1及以上集群版本支持用户自助通过管理控制台下发集群升级操作。 升级集群 资源负载管理 GaussDB(DWS)提供了资源管理功能,用户可以根据自身业务将资源(CPU、内存、IO和存储空间)按需划分成不同的资源池,不同资源池之间资源互相隔离。 资源管理 逻辑集群 通过把物理集群的所有物理节点划分成多个逻辑集群,不同逻辑集群的用户数据是隔离的。企业将不同的业务部署在不同的逻辑集群上,既可以实现业务统一管理,也能保证业务之间数据隔离和资源隔离。 逻辑集群管理
  • psycopg2连接集群不支持CN Retry特性的问题说明 GaussDB(DWS)支持在SQL语句执行出错时的自动重试功能(简称CN Retry)。CN Retry对于客户端和驱动发送的SQL语句在执行失败时可以自动识别错误类型,并进行重试,详情请参见SQL语句出错自动重试。但使用psycopg2默认连接方式创建的连接在语句执行失败时没有自动重试,会直接报错退出。如常见的主备切换场景下,未自动重试会报如下错误,但在自动重试期间完成主备切换,则会返回正确结果。 1 psycopg2.errors.ConnectionFailure: pooler: failed to create 1 connections, Error Message: remote node dn_6003_6004, detail: could not connect to server: Operation now in progress 报错原因: psycopg2在发送SQL语句前先发送了BEGIN语句开启事务。 CN Retry不支持事务块中的语句是特性约束。 解决方案: 在同步方式连接时,可以通过主动结束驱动开启的事务。 1 2 3 4 cursor = conn.cursor() # 增加end语句主动结束驱动开启的事务 cursor.execute("end; select * from test order by 1;") rows = cursor.fetchall() 使用异步连接方式主动开启事务,异步连接介绍具体请参见pyscopg官网:https://www.psycopg.org/docs/advanced.html?highlight=async。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #!/usr/bin/env python3 # _*_ encoding=utf-8 _*_ import psycopg2 import select # psycopg2官方提供的异步连接方式时的wait函数 # 详见https://www.psycopg.org/docs/advanced.html?highlight=async def wait(conn): while True: state = conn.poll() if state == psycopg2.extensions.POLL_OK: break elif state == psycopg2.extensions.POLL_WRITE: select.select([], [conn.fileno()], []) elif state == psycopg2.extensions.POLL_READ: select.select([conn.fileno()], [], []) else: raise psycopg2.OperationalError("poll() returned %s" % state) def psycopg2_cnretry_sync(): # 创建连接 conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password', # 数据库用户密码 async=1) # 使用异步方式连接 wait(conn) # 执行查询 cursor = conn.cursor() cursor.execute("select * from test order by 1;") wait(conn) rows = cursor.fetchall() for row in rows: print(row[0], row[1]) # 关闭连接 conn.close() if __name__ == '__main__': psycopg2_cnretry_async()
  • 在Linux环境使用psycopg2第三方库连接集群 以root用户登录Linux环境。 执行以下命令创建python_dws.py文件。 vi python_dws.py 请复制粘贴以下内容放入python_dws.py文件中: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 #!/usr/bin/python # -*- coding: UTF-8 -*- from __future__ import print_function import psycopg2 def create_table(connection): print("Begin to create table") try: cursor = connection.cursor() cursor.execute("drop table if exists test;" "create table test(id int, name text);") connection.commit() except psycopg2.ProgrammingError as e: print(e) else: print("Table created successfully") cursor.close() def insert_data(connection): print("Begin to insert data") try: cursor = connection.cursor() cursor.execute("insert into test values(1,'number1');") cursor.execute("insert into test values(2,'number2');") cursor.execute("insert into test values(3,'number3');") connection.commit() except psycopg2.ProgrammingError as e: print(e) else: print("Insert data successfully") cursor.close() def update_data(connection): print("Begin to update data") try: cursor = connection.cursor() cursor.execute("update test set name = 'numberupdated' where id=1;") connection.commit() print("Total number of rows updated :", cursor.rowcount) cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) else: print("After Update, Operation done successfully") def delete_data(connection): print("Begin to delete data") try: cursor = connection.cursor() cursor.execute("delete from test where id=3;") connection.commit() print("Total number of rows deleted :", cursor.rowcount) cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) else: print("After Delete,Operation done successfully") def select_data(connection): print("Begin to select data") try: cursor = connection.cursor() cursor.execute("select * from test order by 1;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except psycopg2.ProgrammingError as e: print(e) print("select failed") else: print("Operation done successfully") cursor.close() if __name__ == '__main__': try: conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 except psycopg2.DatabaseError as ex: print(ex) print("Connect database failed") else: print("Opened database successfully") create_table(conn) insert_data(conn) select_data(conn) update_data(conn) delete_data(conn) conn.close() 按照实际集群信息,修改python_dws.py文件中的集群公网访问地址、集群端口号、数据库名称、数据库用户名、数据库密码。 psycopg2接口不提供重试连接的能力,您需要在业务代码中实现重试处理。 1 2 3 4 5 conn = psycopg2.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 执行以下命令,使用psycopg第三方库连接集群。 python python_dws.py
  • 连接集群前的准备 GaussDB(DWS)集群已绑定弹性IP。 已获取GaussDB(DWS)集群的数据库管理员用户名和密码。 请注意,由于MD5算法已经被证实存在碰撞可能,已严禁将之用于密码校验算法。当前GaussDB(DWS)采用默认安全设计,默认禁止MD5算法的密码校验,可能导致开源客户端无法正常连接的问题。建议先检查数据库参数password_encryption_type参数是否为1,如果取值不为1,需要修改,修改方法参见修改数据库参数;然后修改一次准备使用的数据库用户的密码。 当前GaussDB(DWS)出于安全考虑,已经默认不再使用MD5存储密码摘要了,这将导致使用开源驱动或者客户端无法正常连接数据库。需要您调整密码策略后再创建一个新用户或者对老用户做一次密码修改,方可使用开源协议中的MD5认证算法。 数据库中是不会存储用户的密码原文,而是存储密码的HASH摘要,在密码校验时与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您改变了密码算法策略时,数据库也是无法还原您的密码,再生成新的HASH算法的摘要值的。必须您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。 已获取GaussDB(DWS)集群的公网访问地址,含IP地址和端口。具体请参见获取集群连接地址。 已安装psycopg2第三方库。下载地址:https://pypi.org/project/psycopg2/,安装部署操作请参见:https://www.psycopg.org/install/。 CentOS、Redhat等操作系统中使用yum命令安装,命令为: 1 yum install python-psycopg2 psycopg2的使用依赖于PostgreSQL的libpq动态库(32位的psycopg2需要对应32位的libpq;64位的psycopg2对应64位的libpq),Linux中可以依赖yum命令解决。在Windows系统使用psycopg2需要先安装libpq,主要方式有两种: 安装PostgreSQL,并配置libpq、ssl、crypto动态库位置到环境变量PATH中。 安装psqlodbc,使用PostgreSQL ODBC驱动携带的libpq、ssl、crypto动态库。
  • 使用约束 由于psycopg2是基于PostgreSQL的客户端接口,它的功能GaussDB(DWS)并不能完全支持。具体支持情况请见下表1。 以下接口支持情况是基于Python 3.8.5及psycopg 2.9.1版本。 表1 DWS对psycopg2主要接口支持情况 类名 功能描述 函数/成员变量 支持 备注 connections basic cursor(name=None, cursor_factory=None, scrollable=None, withhold=False) Y - commit() Y - rollback() Y - close() Y - Two-phase commit support methods xid(format_id, gtrid, bqual) Y - tpc_begin(xid) Y - tpc_prepare() N 内核不支持显式prepare transaction tpc_commit([xid]) Y - tpc_rollback([xid]) Y - tpc_recover() Y - closed Y - cancel() Y - reset() N 不支持DISCARD ALL dsn Y - Transaction control methods and attributes. set_session(isolation_level=None, readonly=None, deferrable=None, autocommit=None) Y 数据库不支持session中设置default_transaction_read_only autocommit Y - isolation_level Y - readonly N 数据库不支持session中设置default_transaction_read_only deferrable Y - set_isolation_level(level) Y - encoding Y - set_client_encoding(enc) Y - notices N 数据库不支持listen/notify notifies Y - cursor_factory Y - info Y - status Y - lobject N 数据库不支持大对象相关操作 Methods related to asynchronous support poll() Y - fileno() Y - isexecuting() Y - Interoperation with other C API modules pgconn_ptr Y - get_native_connection() Y - informative methods of the native connection get_transaction_status() Y - protocol_version Y - server_version Y - get_backend_pid() Y 获取到的不是后台的pid,是逻辑连接的id号 get_parameter_status(parameter) Y - get_dsn_parameters() Y - cursor basic description Y - close() Y - closed Y - connection Y - name Y - scrollable N 数据库不支持SCROLL CURSOR withhold N withhold cursor在commit前需要关闭 Commands execution methods execute(query, vars=None) Y - executemany(query, vars_list) Y - callproc(procname[, parameters]) Y - mogrify(operation[, parameters]) Y - setinputsizes(sizes) Y - fetchone() Y - fetchmany([size=cursor.arraysize]) Y - fetchall() Y - scroll(value[, mode='relative']) N 数据库不支持SCROLL CURSOR arraysize Y - itersize Y - rowcount Y - rownumber Y - lastrowid Y - query Y - statusmessage Y - cast(oid, s) Y - tzinfo_factory Y - nextset() Y - setoutputsize(size[, column]) Y - COPY-related methods copy_from(file, table, sep='\\t', null='\\\\N', size=8192, columns=None) Y - copy_to(file, table, sep='\\t', null='\\\\N', columns=None) Y - copy_expert(sql, file, size=8192) Y - Interoperation with other C API modules pgresult_ptr Y -
  • 磁盘 在“磁盘”一栏页面您可以根据节点和磁盘名浏览指定节点中磁盘的实时消耗使用情况。其中包括: 节点名称 磁盘名称 磁盘类型 系统盘 数据盘 日志盘 磁盘容量(GB) 磁盘使用率(%) 磁盘读速率(KB/s) 磁盘写速率(KB/s) I/O等待时间-await(ms) I/O服务时间-svctm(ms) IOPS 监控:用户可单击指定节点名称所在行监控列的图标查看具体节点近1小时、近3小时、近12小时、近24小时、近7天或近15天磁盘性能指标拓扑图。 根据页面显示磁盘使用率已使用与可用数据相加不等于总计。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,系统管理员仍能登录和留有解决问题所需的工作空间。 磁盘容量采集源自于linux的df命令,举例如下: /dev/sda4: Used(5757444) + Available(540228616) != Total(569616888) Filesystem:代表文件系统对应的设备文件的路径名(一般是硬盘上的分区)。 IK-blocks:分区包含的数据块(1024字节)的数目。 Used:磁盘已使用数据块数目。 Available:磁盘可用的数据块数目。 Use%:普通用户空间使用的百分比,即使空间使用率达到100%,分区仍然留有系统管理员使用的空间。 Mounted on:表示文件系统的挂载点。
  • 快照概述 快照是对GaussDB(DWS)集群在某一时间点的一次全量数据或增量数据的备份,记录了当前数据库的数据以及集群的相关信息,其中包括节点数量、节点规格和数据库管理员用户名称等。快照创建方式包括手动创建快照和自动创建快照,详情参见手动快照和自动快照。 当选择将快照恢复到新集群时,GaussDB(DWS)会根据快照记录的集群信息来创建新集群,然后从快照记录的数据中还原数据库信息。从快照恢复数据到新集群的详细步骤请参见恢复快照到新集群。 当选择将快照恢复到原集群时,GaussDB(DWS)会清除当前集群的数据,然后从快照记录的数据中将数据库信息还原到当前集群。从快照恢复数据到原集群的详细步骤请参见恢复快照到原集群。 其中,快照备份和恢复速率如下(此速率为实验室测试环境下数据,介质为SSD本地盘,仅供用户参考。在实际使用中,由于磁盘、网络、带宽等因素可能会产生一定的差异): 备份速率:200 MB/s/DN 恢复速率:125 MB/s/DN OBS快照存储空间与计费说明: GaussDB(DWS)提供的免费存储空间等于集群存储空间,即单节点存储空间大小 * 节点数。 GaussDB(DWS)提供了部分免费存储空间,用于存放集群备份时的快照数据。当快照数据存储空间超过免费空间大小时,超出部分按照OBS的计费规则进行计费,计费详情参见OBS价格详情。 快照服务依赖及部署说明: 快照管理功能依赖于OBS、NFS的备份介质。 备份设备为NFS的备份介质时,使用挂载盘的方式,依赖云上SFS-Tubor服务。具体配置步骤请参见11.1.3.2-自动快照策略配置备份介质。 当前快照恢复到新集群时仅支持OBS介质。 GaussDB(DWS)根据快照创建的新集群与生成快照的原始集群具有相同的配置,即节点的数量和规格、内存、磁盘与原集群一致。 根据快照创建新集群时,如果没有指定其他值,则参数默认与生成快照时的备份信息保持一致。 实时数仓(单机部署)暂不支持快照功能。 DWS 3.0集群仅9.0.2及以上集群版本支持快照功能。 DWS 3.0集群混合计费的快照恢复场景目前只支持恢复到全包年/包月或者全按需情况,即如果此集群有三个包年/包月节点和三个按需节点,如果恢复成包年/包月,那么此时六个节点都是包年/包月;如果恢复成按需,那么这六个节点都是按需。 快照生成期间,请避免进行Vacuum Full操作,否则可能会导致集群只读。 创建快照时因备份数据会降低磁盘I/O性能,建议在业务相对空闲的时期进行快照操作。 快照期间会保留一些中间文件,需额外占用磁盘空间,因此请避开业务高峰期并保证磁盘容量在70%以下。 父主题: 管理快照
  • 集群粒度快照恢复 集群粒度恢复分为两个主要步骤: 恢复数据:即备份工具将备份集中的数据并行的恢复到各个实例的数据目录中,实例包括主CN,主DN等。 重建备DN:即主DN恢复完之后,备DN使用全量Build的方式重建出来,这个过程也是并行执行。 综上恢复过程要比备份过程耗时要久一些,通常需要备份时间1.5~2倍的耗时。 集群级恢复后参数与备份时一致,恢复到新集群时需保证和原集群规格一致,如果新集群规格小的话可能会导致恢复失败。
  • 添加运维计划 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“智能运维”页签。 在运维详情部分切换至运维计划模块,单击“添加运维任务”按钮。 在弹出的添加运维任务边栏,进行运维任务的基础配置。 表1 运维任务基础配置项 配置项名称 配置项描述 样例 运维任务 Vacuum(目前仅支持Vacuum运维任务)。 Vacuum 任务简介 智能任务的简要描述。 该运维任务可帮助用户定期调用系统Vacuum命令,以实现空间回收。 备注 备注信息。 - 调度模式 支持以下三种调度模式: 自动:智能运维将在指定时间窗内扫描数据库,依据用户业务负载、用户表可回收空间,自动下发表级Vacuum任务。 指定目标:用户可选择指定Vacuum目标,智能运维将在指定时间窗内,自动下发表级Vacuum任务。 优先级模式:用户可配置优先Vacuum目标,若时间窗剩余,智能运维将自动扫描其他可Vacuum的表,并下发表级Vacuum任务。 说明: 建议使用指定目标方式进行Vacuum和VacuumFull,同时不建议对列存宽表进行VacuumFull,以防止内存膨胀。 指定目标 自动Vacuum目标 支持:系统表Vacuum或用户表VacuumFull。 对于系统表Vacuum,会持有系统表五级锁(share update exclusive锁),不会阻塞用户业务,仅会阻塞系统表DDL进程。 对于用户表Vacuum Full,会持有系统表的八级锁(access exclusive锁),期间所有访问会被阻塞,并等待Vacuum Full结束,建议用户合理安排调度时间,在业务负载低峰期执行Vacuum Full操作,避免锁表影响业务。 注意: Vacuum Full操作相当于开辟一块和表数据大小相同的空间(表真实数据大小约为表总大小* (1 – 脏页率)),因此表空间会先增后降,请提前计算好Vacuum Full所需要的空间再行处理。 用户表VacuumFull 优先Vacuum目标 用户可配置优先Vacuum目标,其中一行对应一张表,每张表以数据库名、模式名、表名表示,以空格进行分割。 - 高级配置 选择“自定义”时,可以设置Vacuum膨胀率和目标表可回收空间高级配置参数(满足其中一个条件即触发自动Vacuum),如果选择“默认配置”,将使用它们的默认值。 说明: Vacuum膨胀率:在数据库中频繁执行UPDATE、DELETE等操作后被删除或更新的行不会从表中物理删除,仅从数据库中被逻辑删除,在完成VACUUM之前这些过期数据仍然存储在磁盘中,从而导致表膨胀。当膨胀率达到运维任务中用户设置的百分比后,就会自动触发Vacuum。 默认配置(Vacuum膨胀率80%;目标表可回收空间100GB) 单击“下一步:定时配置”,进行运维任务的“定时配置”。 选择运维类型: 单次型任务:需要设置起止时间,智能运维将在设置的时间段内运行运维任务。 周期型任务:需要配置时间窗,时间窗配置提供每日、每周、每月三种类型供用户选择。智能运维将自动分析用户注册的时间段,在每个时间段内运行运维任务。 对于自动Vacuum运维任务,用户配置时间窗时,应避开业务高峰期。否则自动Vacuum将有可能与用户业务产生死锁冲突。 vacuum(full)运维任务对于用户表并发度最高为24,最低为0;对于系统表并发度最高为1,最低为0。并发度不支持用户自定义,但可根据系统io_util自动调节: io_util将0%~60%划分为两个区间段: 0%~30%区间段,io_util每减少15%,并发度增加2。 30%~60%区间段,io_util值每减少15%,并发度增加1。 60%~70%并发度不变。 70%以上并发度减1,如果仍维持70%以上IO,则并发度持续减到0。 调度器会在时间窗内,扫描列存小CU膨胀情况,若发现列存CU膨胀(列存CU的膨胀依据是CU平均记录数小于1000),则调度器会将该列存表优先级提前。列存CU膨胀检测条件不受膨胀率、可回收空间限制。 优先级表最多支持添加100个任务表。 调度器自动vacuum功能依赖于统计信息,若统计信息不准确,可能会影响调度器自动vacuum执行顺序以及统计结果。 调度器不支持带有空格和单引号的表,包括数据库名,schema名,表名。如果vacuum在扫描过程中遇到带有单引号或空格的表,将自动跳过。对于优先级表中有空格或单引号的表,也自动跳过。 单击“下一步:配置确认”,确认无误后单击“配置确认”提交。
共100000条