华为云用户手册

  • 开启敏感操作保护 操作保护默认关闭,您可以参考以下步骤开启操作保护。 登录 GaussDB (DWS)管理控制台。 在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中单击“安全设置”。 在“安全设置”页面中,切换至“敏感操作”页签,单击“操作保护”区域的“立即启用”。 图1 敏感操作 在“操作保护设置”页面中,选择“开启”,单击“确定”后,开启操作保护。 用户如果进行敏感操作,将进入“操作保护”页面,选择认证方式,包括邮箱、手机和虚拟MFA三种认证方式。 如果用户只绑定了手机,则认证方式只能选择手机。 如果用户只绑定了邮箱,则认证方式只能选择邮件。 如果用户未绑定邮箱、手机和虚拟MFA,进行敏感操作时,系统将提示用户绑定邮箱、手机或虚拟MFA。 如需修改验证手机号、邮件地址,请在账户中心修改。详情请参见 IAM 基本信息。 当您开启操作保护,在进行敏感操作时,系统会先进行敏感操作保护。 例如在您进行删除集群操作时,会弹出敏感操作保护验证框,需要选择一种验证方式进行验证,避免误操作带来的风险和损失。
  • 资源管理计划简介 资源管理计划功能是GaussDB(DWS)为客户提供的资源管理高级特性,客户可以通过创建资源管理计划,向计划中添加多个时间阶段,并为每个阶段配置不同的资源配比。当启动计划时,计划就会按照配置在不同的时间段自动切换资源配置。如果客户在不同的时间段运行不同的业务,而这些业务又会占用不同比重的资源,使用资源管理计划功能可以很好的帮助客户实现不同时间段的资源配置自动切换。 资源管理计划支持8.1.0.100及以上集群版本。
  • 编辑器功能描述 编辑器上面一栏可进行数据源、数据库、模式进行切换操作。 编写SQL语句,提供高亮、基本语法提示、数据库、模式和表、字段的相关提示信息。SQL编写的语法请参考:SQL语法参考。 提供格式化和查询执行计划等功能,注意PERFORMANCE执行计划时对应的SQL语句也会执行,所以如果查看操作类SQL的执行计划请谨慎。 如果编写了大量的SQL语句,可以单击保存,将语句保存到对应的OBS桶中。 最下面会展示查询的结果,结果分页,且可以选择图标,根据不同的字段来生成饼图,折线图和柱状图,查询的结果支持根据查到的内容导出excel文件。在“SQL执行记录”页签可查看近半年非查询SQL语句记录。 切换至脚本面板,显示目录文件夹。脚本文件保存至创建的目录文件中,详情请参见新增目录。目前编辑器提供两级目录,每层目录可新增10个文件夹,每个文件夹下面可保存100个脚本文件,脚本文件选择对应的OBS桶文件目录进行保存,OBS桶文件地址可全局设置,详情请参见全局设置。 图1 SQL编辑器界面
  • 缩容对系统的影响 缩容前,需关闭创建了临时表的客户端连接,因为在缩容过程中及缩容成功之前创建的临时表将会失效,操作临时表也会失败。但是缩容后创建的临时表不受影响。 在执行缩容操作后,集群会进行一次自动快照,快照创建成功后进行集群缩容,若用户不想自动创建快照,可以在缩容界面选择取消自动备份功能。 缩容前,需确保倾斜率不超过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)委托权限(旧) 旧的委托权限依赖场景说明如下表所示: 表2 委托及权限使用说明 委托名 委托权限 使用场景说明 DWSAccessLTS LTS FullAccess LTS日志收集,上报日志到LTS服务。 DWSAccessOBS OBS Administrator 审计日志转储,上报审计日志数据到OBS桶。 DWSAccessKMS KMS Administrator KMS加密集群,查询和轮转密钥。 DWSAccessVPC Server Administrator 节点故障场景下,EIP从故障节点自动迁移到正常节点。 DWSAccessDWS Tenant Administrator 存算分离场景下,自动增删计划定时扩缩只读逻辑集群。 缩容场景下,清理用户网卡、配置安全组规则。 节点故障场景下,ELB添加和删除监听器实例。
  • 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" ] } ] }
  • 场景介绍 如果在不同时段内业务流量差异非常大,3节点集群又无法满足高峰期的吞吐量要求,但扩容至6节点又存在资源浪费或费用较高问题。用户可通过本章教程再结合弹性增删逻辑集群功能,实现类似于“晚上低峰期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)存算一体集群 创建GaussDB(DWS)存算分离集群 创建包年/包月集群 连接集群 - GaussDB(DWS)集群创建完成后,您就可以使用SQL客户端工具或者JDBC/ODBC等第三方驱动程序连接集群中的数据库。进入GaussDB(DWS)控制台的“连接客户端”页面,您可以下载SQL客户端工具和JDBC/ODBC驱动程序。 连接GaussDB(DWS)集群 访问数据库 - 连接集群后,您就可以创建和管理数据库,管理用户及权限,导入或导出数据,以及查询和分析数据。 《 数据仓库 服务数据库开发指南》 管理和监控集群 管理集群 您可以查看集群状态,修改集群配置,添加集群标签,对集群进行扩容、重启、删除等管理操作。 GaussDB(DWS)集群管理 管理快照 通过创建集群快照,可以对集群进行备份,使用快照可以恢复集群。 备份与恢复GaussDB(DWS)集群 运维与监控 您可以通过监控集群、审计日志、事件通知和告警管理了解集群的运行状况和性能。 在Cloud Eye查看GaussDB(DWS)集群监控 查看并订阅GaussDB(DWS)集群事件 在监控面板(DMS)查看GaussDB(DWS)集群监控 查看并订阅GaussDB(DWS)集群告警 扩容与规格变更 当需要更多的计算资源或存储资源以满足业务需要时,可以在管理控制台对已有集群进行扩容操作。 集群创建后,支持通过管理控制台变更集群规格。 集群扩容 GaussDB(DWS)集群规格变更 升级集群 8.1.1及以上集群版本支持用户自助通过管理控制台下发集群升级操作。 GaussDB(DWS)集群升级 资源负载管理 GaussDB(DWS)提供了资源管理功能,用户可以根据自身业务将资源(CPU、内存、IO和存储空间)按需划分成不同的资源池,不同资源池之间资源互相隔离。 GaussDB(DWS)资源负载管理
  • 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
  • 使用约束 由于psycopg2是基于PostgreSQL的客户端接口,它的功能GaussDB(DWS)并不能完全支持。具体支持情况请见下表2。 以下接口支持情况是基于Python 3.8.5及psycopg 2.9.1版本。 表2 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 -
  • 版本说明 由于GaussDB(DWS)集群、Python、psycopg2的版本较多,下方表格仅列举出当前主流版本的支持情况。 表1 psycopg2版本 Python版本 GaussDB(DWS)集群版本 2.7.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上 2.8.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上 2.9.x 3.8.x 8.1.3及以上 3.9.x 8.1.3及以上
  • 连接集群前的准备 GaussDB(DWS)集群已绑定弹性IP。 已获取GaussDB(DWS)集群的数据库管理员用户名和密码。 请注意,由于MD5算法已经被证实存在碰撞可能,已严禁将之用于密码校验算法。当前GaussDB(DWS)采用默认安全设计,默认禁止MD5算法的密码校验,可能导致开源客户端无法正常连接的问题。建议先联系技术支持人员检查数据库参数password_encryption_type参数是否为1,如果取值不为1,需要修改;然后修改一次准备使用的数据库用户的密码。 当前GaussDB(DWS)出于安全考虑,已经默认不再使用MD5存储密码摘要了,这将导致使用开源驱动或者客户端无法正常连接数据库。需要您调整密码策略后再创建一个新用户或者对老用户做一次密码修改,方可使用开源协议中的MD5认证算法。 数据库中是不会存储用户的密码原文,而是存储密码的HASH摘要,在密码校验时与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您改变了密码算法策略时,数据库也是无法还原您的密码,再生成新的HASH算法的摘要值的。必须您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。 已获取GaussDB(DWS)集群的公网访问地址,含IP地址和端口。具体请参见获取GaussDB(DWS)集群连接地址。 已安装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动态库。
  • 磁盘 在“磁盘”一栏页面您可以根据节点和磁盘名浏览指定节点中磁盘的实时消耗使用情况。其中包括: 节点名称 磁盘名称 磁盘类型 系统盘 数据盘 日志盘 磁盘容量(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:表示文件系统的挂载点。
  • 约束与限制 对于有数据可靠性要求的用户,尤其是针对业务方无法通过上游重新导入进行数据恢复的场景,集群需要备份操作,避免人为或其他因素造成数据丢失后无法恢复。 Schema粒度快照支持集群版本如下所示(如果当前控制台界面不支持该功能,请联系技术支持人员)。 9.1.0.100及以上集群版本。 8.3.0.110及以上的8.3.0.xxx集群版本。 8.2.1.230及以上的8.2.1.2xx集群版本。 OBS快照存储空间与计费说明: GaussDB(DWS)提供的免费存储空间等于集群存储空间,即单节点存储空间大小 * 节点数。 GaussDB(DWS)提供了部分免费存储空间,用于存放集群备份时的快照数据。当快照数据存储空间超过免费空间大小时,超出部分按照OBS的计费规则进行计费,计费详情参见OBS价格详情。 快照服务依赖及部署说明: 快照管理功能依赖于OBS、NFS的备份介质。 备份设备为NFS的备份介质时,使用挂载盘的方式,依赖高性能弹性文件服务 SFS-Turbo。具体配置步骤请参见11.1.3.2-自动快照策略配置备份介质。 当前快照恢复到新集群时仅支持OBS介质。 GaussDB(DWS)根据快照创建的新集群与生成快照的原始集群具有相同的配置,即节点的数量和规格、内存、磁盘与原集群一致。 根据快照创建新集群时,如果没有指定其他值,则参数默认与生成快照时的备份信息保持一致。 存算一体(单机部署)暂不支持快照功能。 存算分离集群仅9.0.2及以上集群版本支持快照功能,但是带有弹性逻辑集群的存算分离集群不支持备份恢复。如果集群有弹性逻辑集群备份恢复会失败,建议将弹性逻辑集群回收后,再执行备份恢复操作。 存算分离集群混合计费的快照恢复场景目前只支持恢复到全包年/包月或者全按需情况,即如果此集群有三个包年/包月节点和三个按需节点,如果恢复成包年/包月,那么此时六个节点都是包年/包月;如果恢复成按需,那么这六个节点都是按需。 快照生成期间,请避免进行Vacuum Full操作,否则可能会导致集群只读。 创建快照时因备份数据会降低磁盘I/O性能,建议在业务相对空闲的时期进行快照操作。 快照期间会保留一些中间文件,需额外占用磁盘空间,因此请避开业务高峰期并保证磁盘容量在70%以下。
  • 集群粒度快照恢复 集群粒度恢复分为两个主要步骤: 恢复数据:即备份工具将备份集中的数据并行的恢复到各个实例的数据目录中,实例包括主CN,主DN等。 重建备DN:即主DN恢复完之后,备DN使用全量Build的方式重建出来,这个过程也是并行执行。 综上恢复过程要比备份过程耗时要久一些,通常需要备份时间1.5~2倍的耗时。 集群级恢复后参数与备份时一致,恢复到新集群时需保证和原集群规格一致,如果原集群有规格变更操作,新集群需与原集群变更前的规格保持一致,如果新集群规格小的话可能会导致恢复失败。
  • 运维任务公共配置 注意事项 该配置应用于每个用户表VacuumFull运维任务中,其中正在运行中的任务不影响,周期性任务新配置在下次任务执行时生效。 小CU阈值、小CU占比仅9.1.0.200及以上集群版本支持,如果版本不符合将不展示该字段。 操作步骤 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“智能运维”页签。 在页面上方“运维任务公共配置”模块,修改下列公共配置值。 用户表VacuumFull运维任务最大并发数:配置应用于每个用户表VacuumFull运维任务,建议依据剩余磁盘空间和时间窗内IO负载情况合理配置。配置范围为1~24,用户可根据剩余磁盘空间和IO负载,合理设置最大并发数,建议配置值为5。其中正在运行中的任务不影响,如果是周期性任务,新设置的并发数在下次运维任务运行时生效。 小CU阈值:根据小CU阈值来判定是不是小CU表,小于阈值为小CU表,小于等于该值为触发Vacuum的条件,越大触发越敏感,默认推荐值为1000。 小CU占比:小CU表占全部CU比率,大于等于该值为触发Vacuum的条件,越小触发越敏感,默认推荐值为50%。 确认无误后,单击“保存”完成配置。
  • 前提条件 对于自动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在扫描过程中遇到带有单引号或空格的表,将自动跳过。对于优先级表中有空格或单引号的表,也自动跳过。
  • 添加运维计划 登录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) 单击“下一步:定时配置”,进行运维任务的“定时配置”。 选择运维类型: 单次型任务:需要设置起止时间,智能运维将在设置的时间段内运行运维任务。 周期型任务:需要配置时间窗,时间窗配置提供每日、每周、每月三种类型供用户选择。智能运维将自动分析用户注册的时间段,在每个时间段内运行运维任务。 单击“下一步:配置确认”,确认无误后单击“配置确认”提交。
  • 负荷分析概述 GaussDB(DWS)的负荷分析工具为数据库提供性能数据收集和分析,用户可通过创建负荷信息快照记录指定时间段集群的负荷信息数据。其中两个负荷信息快照可形成该时间段内负荷诊断报告。负荷诊断报告(Workload Diagnosis Report,简称WDR)可以提供指定时间段内的性能数据,以HTML网页报告的形式呈现给用户,能够帮助用户发现异常、诊断问题、优化性能等,其内容丰富直观,是数据库调优的利器。 负荷分析功能仅8.1.1.300及以上集群版本支持。 负荷诊断报告存储仅支持OBS场景。 父主题: 负荷分析
  • 前提条件 集群快照是GaussDB(DWS)集群在某一时间点的完整备份,记录了这一时刻指定集群的所有配置数据和业务数据。用户根据业务需要备份集群数据时,可以在“快照管理”页面创建集群的快照。 手动快照可以随时创建,在创建成功后会一直保存,直到在GaussDB(DWS)控制台将此快照删除。由于创建手动快照采用全量备份的方式,因此备份时间较长。 手动创建的集群粒度快照支持备份到OBS服务、NFS介质。 待创建集群粒度快照的集群状态必须为“可用”、“待重启”或“非均衡”中的任意一种,当集群版本低于8.1.3.101时,“只读”状态的集群也可创建集群粒度的快照。
  • 告警解释 GaussDB(DWS)每30秒采集集群各节点的数据盘I/O利用率。如果某节点的某数据盘最近10分钟(可配置)内的平均使用率超过90%(可配置),则上报节点数据盘I/O利用率超阈值告警;如果平均使用率低于85%(即上报阈值减去5%),则消除告警。 如果节点数据盘I/O利用率一直大于上报阈值,那么在24小时(可配置)后将再次发起告警。 基于SSD盘存储的集群,在业务量增多的情况下,磁盘I/O可能会超过100%,但不代表磁盘存在性能瓶颈,需结合实际业务运行情况判断告警有效性。
  • 查看数据库审计日志方式 方式一:由于审计日志会占用一定磁盘空间,为了防止本地磁盘文件过大,GaussDB(DWS)支持审计日志转储,用户可以开启审计日志转储功能,将审计日志转储到OBS(用户需创建用于存储审计日志的OBS桶)中进行查看或下载,详细内容请参考开启审计日志转储。 方式二:通过依赖于 云日志服务LTS 的“集群日志管理”功能查看采集的审计数据库日志或进行日志下载,详细内容请参考查看集群日志。 方式三:数据库的审计日志默认存储于数据库中,连接集群后使用pg_query_audit函数进行查看。详细内容请参考使用pg_query_audit函数查看数据库审计日志。
  • 使用pg_query_audit函数查看数据库审计日志 使用SQL客户端工具成功连接集群,连接方式请参考连接GaussDB(DWS)集群。 使用函数pg_query_audit查询当前CN节点的审计日志: 1 pg_query_audit(timestamptz starttime,timestamptz endtime,audit_log) 参数starttime和endtime分别表示审计记录的开始时间和结束时间,audit_log表示所查看的审计日志信息所在的物理文件路径,当不指定audit_log时,默认查看连接当前实例的审计日志信息。 例如,查看指定时间段当前CN节点审计记录。 1 SELECT * FROM pg_query_audit('2021-02-23 21:49:00','2021-02-23 21:50:00'); 查询结果如下: 1 2 3 begintime | endtime | operation_type | audit_type | result | username | database | client_conninfo | object_name | command_text | detail_info | transaction_xid | query_id | node_name | session_id | local_port | remote_port ---------------------------+---------------------------+----------------+------------+--------+------------+----------+-----------------+-------------+-----------------+------------------------------------------------------------------+-----------------+----------+--------------+------------------------------+------------+------------- 2021-02-23 21:49:57.76+08 | 2021-02-23 21:49:57.82+08 | login_logout | user_login | ok | dbadmin | gaussdb | gsql@[local] | gaussdb | login db | login db(gaussdb) successfully, the current user is: dbadmin | 0 | 0 | coordinator1 | 140324035360512.667403397820909.coordinator1 | 27777 | 该条记录表明,用户dbadmin在2021-02-23 21:49:57.82+08登录数据库gaussdb。其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。 使用函数pgxc_query_audit可以查询所有CN节点的审计日志: 1 pgxc_query_audit(timestamptz starttime,timestamptz endtime) 例如,查看指定时间段所有CN节点审计记录。 1 SELECT * FROM pgxc_query_audit('2021-02-23 22:05:00','2021-02-23 22:07:00') where audit_type = 'user_login' and username = 'user1'; 查询结果如下: 1 2 3 4 begintime | endtime | operation_type | audit_type | result | username | database | client_conninfo | object_name | command_text | detail_info | transaction_xid | query_id | node_name | session_id | local_port | remote_port ----------------------------+----------------------------+----------------+------------+--------+----------+----------+-----------------+-------------+--------------+------------------------------------------------------------+-----------------+----------+--------------+----------------------------------------------+------------+------------- 2021-02-23 22:06:22.219+08 | 2021-02-23 22:06:22.271+08 | login_logout | user_login | ok | user1 | gaussdb | gsql@[local] | gaussdb | login db | login db(gaussdb) successfully, the current user is: user1 | 0 | 0 | coordinator2 | 140689577342720.667404382271356.coordinator | 27782 | 2021-02-23 22:05:51.697+08 | 2021-02-23 22:05:51.749+08 | login_logout | user_login | ok | user1 | gaussdb | gsql@[local] | gaussdb | login db | login db(gaussdb) successfully, the current user is: user1 | 0 | 0 | coordinator1 | 140525048424192.667404351749143.coordinator1 | 27777 | 查询结果显示,用户user1在CN1和CN2的成功登录记录。 查询审计多个对象名的记录。 1 2 SET audit_object_name_format TO 'all'; SELECT object_name,result,operation_type,command_text FROM pgxc_query_audit('2022-08-26 8:00:00','2022-08-26 22:55:00') where command_text like '%student%'; 查询结果如下: 1 2 3 4 5 6 7 8 object_name | result | operation_type | command_text ------------------------------------------------------------------+--------+----------------+------------------------------------------------------------------------------------------------------------------ -------------------------------------------- student | ok | ddl | CREATE TABLE student(stuNo int, stuName TEXT); studentscore | ok | ddl | CREATE TABLE studentscore(stuNo int, stuscore int); ["public.student_view01","public.studentscore","public.student"] | ok | ddl | CREATE OR REPLACE VIEW student_view01 AS SELECT * FROM student t1 where t1.stuNo in (select stuNo from studentscore t2 where t1.stuNo = t2.stuNo); ["public.student_view01","public.student","public.studentscore"] | ok | dml | SELECT * FROM student_view01; 查询结果object_name显示多个对象名,包括:表名、视图名及视图所涉及的基表名。
  • 前提条件 审计功能总开关audit_enabled已开启。(audit_enabled默认值为ON,若关闭请参考修改GaussDB(DWS)集群GUC参数设置为OFF)。 已配置需要审计的审计项。各审计项及其开启办法,请参考设置数据库审计日志。 数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。 数据库各个节点审计日志单独记录。 只有拥有AUDITADMIN属性的用户才可以查看审计记录。
  • 删除自动快照 自动快照不支持手动删除,仅GaussDB(DWS)系统能够删除自动快照。 GaussDB(DWS)会在如下情况下删除自动快照: 自动快照保留期结束。 删除集群。 为防止用户误执行删除集群操作,GaussDB(DWS)将提供以下策略(该功能仅在8.2.0及以上集群版本支持): 若最新一次的快照为自动快照,则系统会将自动快照保留一天时间。 若最新一次的快照为手动快照,则会删除相应集群已有的自动快照。 父主题: 自动快照
  • 开发规范 如果用户在APP的开发中,使用了连接池机制,那么需要遵循如下规范。否则,连接池里的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用“SET SESSION AUTHORIZATION DEFAULT;RESET ALL;”将连接的状态清空。 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。 父主题: 使用JDBC和ODBC连接GaussDB(DWS)集群
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全