华为云用户手册

  • 概述 阈值告警相关概念: 告警规则:告警规则由告警规则名称,告警规则描述,规则绑定集群列表,告警策略触发关系,告警策略项构成。一条告警规则可绑定某个指定集群或所有集群,拥有一个或多个告警策略。其中,告警策略之间组合关系由“策略触发关系”选项描述。告警规则的阈值触发和抑制条件由每条告警策略描述。 告警策略:为某个告警指标指定的触发条件,抑制条件,告警级别的组合称为告警策略。 告警指标:数据库集群的某个指标项,一般是一个时间序列数据,例如:节点CPU使用率,查询触发下盘量等。 告警规则分类: 默认规则:GaussDB(DWS)阈值告警模块的最佳实践。 自定义规则:用户可自由选择或组合监控指标形成个性化的告警规则。目前版本仅支持用户自定义schema使用率告警规则。 告警规则操作: 修改:修改告警规则的选项。所有告警规则都可以修改编辑,但默认告警规则只能修改部分选项,而自定义告警规则可以修改全部选项。 启用/停用:启用或停用告警规则。所有的告警规则都可以启用/停用,启用后告警规则会被告警引擎纳入检查列表,可以正常触发。停用后的告警规则将被告警引擎移出检查列表,不会触发该规则检查。 删除:删除告警规则。只有自定义告警规则可以被删除,用户无法删除默认告警规则。
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称,告警的详细分类。 集群名称 产生告警的集群。 定位信息 产生告警的集群ID,集群名称。 附加信息 CloudService表示产生告警的云服务,依次为服务名,资源标识,资源名称,数据库名称,连接后端的用户名称,查询Id;first_alarm_time表示告警的首次出现时间;查询语句则表示引发此告警的查询语句,最后附带由此查询语句引发的下盘量。示例:CloudService=DWS,resourceId:xxxx-xxxx-xxxx-xxxx,resourceIdName:test_dws,db_name:test_db,user_name:test_user,query_id:756942385413326696,first_alarm_time:2022-12-30:12:42:77:查询语句(ID=756942385413326696) select num,value,cnt,rk,cnt/sumcnt as ratio,sum(ratio) over (over by rk) as cumuratio from ......;触发结果集下盘,且下盘量为15GB。 告警时间 告警的产生时间。 状态 告警当前的活动状态。 关于附加信息中下盘量,可连接数据库执行SELECT * FROM GS_WLM_SESSION_STATISTICS查看该视图中的max_spill_size字段。
  • 告警解释 用户业务查询执行过程中,数据库可能会选择将临时结果暂存到磁盘,简称算子下盘。 GaussDB(DWS)每60秒通过GS_WLM_SESSION_STATISTICS视图检测CN上正在执行的作业的负载管理记录,并计算所有下盘DN的最大下盘数据量。 如果10分钟(可配置)内存在SQL的下盘量超过5GB(可配置),则上报查询语句触发下盘量超阈值;当集群不存在符合告警条件的SQL语句时,自动消除该告警。修改告警配置详情请参见修改告警规则。 如果一直存在能够引发告警的阻塞SQL,那么在24小时(可配置)后将再次发起告警。
  • 在Linux环境使用PyGreSQL第三方库连接集群 以root用户登录Linux环境。 执行以下命令创建python_dws.py文件。 1 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 #!/usr/bin/env python3 # _*_ encoding:utf-8 _*_ from __future__ import print_function import pg def create_table(connection): print("Begin to create table") try: connection.query("drop table if exists test;" "create table test(id int, name text);") except pg.InternalError as e: print(e) else: print("Table created successfully") def insert_data(connection): print("Begin to insert data") try: connection.query("insert into test values(1,'number1');") connection.query("insert into test values(2,'number2');") connection.query("insert into test values(3,'number3');") except pg.InternalError as e: print(e) else: print("Insert data successfully") def update_data(connection): print("Begin to update data") try: result = connection.query("update test set name = 'numberupdated' where id=1;") print("Total number of rows updated :", result) result = connection.query("select * from test order by 1;") rows = result.getresult() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except pg.InternalError as e: print(e) else: print("After Update, Operation done successfully") def delete_data(connection): print("Begin to delete data") try: result = connection.query("delete from test where id=3;") print("Total number of rows deleted :", result) result = connection.query("select * from test order by 1;") rows = result.getresult() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except pg.InternalError as e: print(e) else: print("After Delete,Operation done successfully") def select_data(connection): print("Begin to select data") try: result = connection.query("select * from test order by 1;") rows = result.getresult() for row in rows: print("id = ", row[0]) print("name = ", row[1]) except pg.InternalError as e: print(e) print("select failed") else: print("Operation done successfully") if __name__ == '__main__': try: conn = pg.DB(host='10.154.70.231', port=8000, dbname='gaussdb', # 需要连接的database user='dbadmin', passwd='password') # 数据库用户密码 except pg.InternalError 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() 或使用dbapi接口实现: 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 109 #!/usr/bin/python # -*- coding: UTF-8 -*- from __future__ import print_function import pg import pgdb 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 pg.InternalError 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 pg.InternalError 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;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except pg.InternalError 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;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except pg.InternalError 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;") rows = cursor.fetchall() for row in rows: print("id = ", row[0]) print("name = ", row[1], "\n") except pg.InternalError as e: print(e) print("select failed") else: print("Operation done successfully") cursor.close() if __name__ == '__main__': try: conn = pgdb.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 except pg.InternalError 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文件中的集群公网访问地址、集群端口号、数据库名称、数据库用户名、数据库密码。 PyGreSQL接口不提供重试连接的能力,您需要在业务代码中实现重试处理。 1 2 3 4 5 conn = pgdb.connect(host='10.154.70.231', port='8000', database='gaussdb', # 需要连接的database user='dbadmin', password='password') # 数据库用户密码 执行以下命令,使用PyGreSQL第三方库连接集群。 1 python python_dws.py
  • 使用约束 由于PyGreSQL是基于PostgreSQL的客户端接口,它的功能GaussDB(DWS)并不能完全支持。具体支持情况请见下表。 以下接口支持情况是基于Python 3.8.5及PyGreSQL 5.2.4版本。 表1 DWS对PyGreSQL主要接口支持情况 PyGreSQL 支持 备注 Module functions and constants connect – Open a PostgreSQL connection Y - get_pqlib_version – get the version of libpq Y - get/set_defhost – default server host [DV] Y - get/set_defport – default server port [DV] Y - get/set_defopt – default connection options [DV] Y - get/set_defbase – default database name [DV] Y - get/set_defuser – default database user [DV] Y - get/set_defpasswd – default database password [DV] Y - escape_string – escape a string for use within SQL Y - escape_bytea – escape binary data for use within SQL Y - unescape_bytea – unescape data that has been retrieved as text Y - get/set_namedresult – conversion to named tuples Y - get/set_decimal – decimal type to be used for numeric values Y - get/set_decimal_point – decimal mark used for monetary values Y - get/set_bool – whether boolean values are returned as bool objects Y - get/set_array – whether arrays are returned as list objects Y - get/set_bytea_escaped – whether bytea data is returned escaped Y - get/set_jsondecode – decoding JSON format Y - get/set_cast_hook – fallback typecast function Y - get/set_datestyle – assume a fixed date style Y - get/set_typecast – custom typecasting Y - cast_array/record – fast parsers for arrays and records Y - Type helpers Y - Module constants Y - Connection – The connection object query – execute a SQL command string Y - send_query - executes a SQL command string asynchronously Y - query_prepared – execute a prepared statement Y - prepare – create a prepared statement Y - describe_prepared – describe a prepared statement Y - reset – reset the connection Y - poll - completes an asynchronous connection Y - cancel – abandon processing of current SQL command Y - close – close the database connection Y - transaction – get the current transaction state Y - parameter – get a current server parameter setting Y - date_format – get the currently used date format Y - fileno – get the socket used to connect to the database Y - set_non_blocking - set the non-blocking status of the connection Y - is_non_blocking - report the blocking status of the connection Y - getnotify – get the last notify from the server N 数据库不支持listen/notify inserttable – insert a list into a table Y copy命令中如果有\n,请使用双引号引用此字段 get/set_notice_receiver – custom notice receiver Y - putline – write a line to the server socket [DA] Y - getline – get a line from server socket [DA] Y - endcopy – synchronize client and server [DA] Y - locreate – create a large object in the database [LO] N 大对象相关操作 getlo – build a large object from given oid [LO] N 大对象相关操作 loimport – import a file to a large object [LO] N 大对象相关操作 Object attributes Y - The DB wrapper class Initialization Y - pkey – return the primary key of a table Y - get_databases – get list of databases in the system Y - get_relations – get list of relations in connected database Y - get_tables – get list of tables in connected database Y - get_attnames – get the attribute names of a table Y - has_table_privilege – check table privilege Y - get/set_parameter – get or set run-time parameters Y - begin/commit/rollback/savepoint/release – transaction handling Y - get – get a row from a database table or view Y - insert – insert a row into a database table Y - update – update a row in a database table Y - upsert – insert a row with conflict resolution Y - query – execute a SQL command string Y - query_formatted – execute a formatted SQL command string Y - query_prepared – execute a prepared statement Y - prepare – create a prepared statement Y - describe_prepared – describe a prepared statement Y - delete_prepared – delete a prepared statement Y - clear – clear row values in memory Y - delete – delete a row from a database table Y 元组必须有唯一键或者主键 truncate – quickly empty database tables Y - get_as_list/dict – read a table as a list or dictionary Y - escape_literal/identifier/string/bytea – escape for SQL Y - unescape_bytea – unescape data retrieved from the database Y - encode/decode_json – encode and decode JSON data Y - use_regtypes – determine use of regular type names Y - notification_handler – create a notification handler N 数据库不支持listen/notify Attributes of the DB wrapper class Y - Query methods getresult – get query values as list of tuples Y - dictresult/dictiter – get query values as dictionaries Y - namedresult/namediter – get query values as named tuples Y - scalarresult/scalariter – get query values as scalars Y - one/onedict/onenamed/onescalar – get one result of a query Y - single/singledict/singlenamed/singlescalar – get single result of a query Y - listfields – list fields names of previous query result Y - fieldname, fieldnum – field name/number conversion Y - fieldinfo – detailed info about query result fields Y - ntuples – return number of tuples in query object Y - memsize – return number of bytes allocated by query result Y - LargeObject – Large Objects open – open a large object N 大对象相关操作 close – close a large object N 大对象相关操作 read, write, tell, seek, unlink – file-like large object handling N 大对象相关操作 size – get the large object size N 大对象相关操作 export – save a large object to a file N 大对象相关操作 Object attributes N 大对象相关操作 The Notification Handler Instantiating the notification handler N 数据库不支持listen/notify Invoking the notification handler N 数据库不支持listen/notify Sending notifications N 数据库不支持listen/notify Auxiliary methods N 数据库不支持listen/notify pgdb Module functions and constants connect – Open a PostgreSQL connection Y - get/set/reset_typecast – Control the global typecast functions Y - Module constants Y - Errors raised by this module Y - Connection – The connection object close – close the connection Y - commit – commit the connection Y - rollback – roll back the connection Y - cursor – return a new cursor object Y - Attributes that are not part of the standard Y - Cursor – The cursor object description – details regarding the result columns Y - rowcount – number of rows of the result Y - close – close the cursor Y - execute – execute a database operation Y - executemany – execute many similar database operations Y - callproc – Call a stored procedure Y - fetchone – fetch next row of the query result Y - fetchmany – fetch next set of rows of the query result Y - fetchall – fetch all rows of the query result Y - arraysize - the number of rows to fetch at a time Y - Methods and attributes that are not part of the standard Y - Type – Type objects and constructors Type constructors Y - Type objects Y -
  • 连接集群前的准备 GaussDB(DWS)集群已绑定弹性IP。 已获取GaussDB(DWS)集群的数据库管理员用户名和密码。 请注意,由于MD5算法已经被证实存在碰撞可能,已严禁将之用于密码校验算法。当前GaussDB(DWS)采用默认安全设计,默认禁止MD5算法的密码校验,可能导致开源客户端无法正常连接的问题。建议先检查数据库参数password_encryption_type参数是否为1,如果取值不为1,需要修改,修改方法参见修改数据库参数;然后修改一次准备使用的数据库用户的密码。 当前GaussDB(DWS)出于安全考虑,已经默认不再使用MD5存储密码摘要了,这将导致使用开源驱动或者客户端无法正常连接数据库。需要您调整密码策略后再创建一个新用户或者对老用户做一次密码修改,方可使用开源协议中使用的MD5认证算法。 数据库中是不会存储您的密码原文的,而是存储的密码的HASH摘要,在密码校验时与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您改变了密码算法策略时,数据库也是无法还原您的密码,再生成新的HASH算法的摘要值的。必须您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。 已获取GaussDB(DWS)集群的公网访问地址,含IP地址和端口。具体请参见获取集群连接地址。 已安装PyGreSQL第三方库。 下载地址:http://www.pygresql.org/download/index.html。 安装部署操作请参见:http://www.pygresql.org/contents/install.html。 CentOS、Redhat等操作系统中使用yum命令安装,命令为: 1 yum install PyGreSQL PyGreSQL的使用依赖于PostgreSQL的libpq动态库(32位的PyGreSQL对应32位的libpq,64位的PyGreSQL对应64位的libpq),Linux中可以依赖yum命令解决。在Windows系统使用PyGreSQL需要先安装libpq,主要方式有两种: 安装PostgreSQL,并配置libpq、ssl、crypto动态库位置到环境变量PATH中。 安装psqlodbc,使用PostgreSQL ODBC驱动携带的libpq、ssl、crypto动态库。
  • 监控项列表 通过数据库监控功能提供的GaussDB(DWS)相关监控项,用户可以从中获取有关集群的状态以及可用资源数量等信息,并深入了解当前集群实时的资源消耗情况。 GaussDB(DWS)相关监控项指标,具体请参见表1。 表1 GaussDB(DWS)监控列表 监控对象 指标描述 取值范围 监控周期(原始指标) 异常作业监控统计 查询ID。 字符串 30s 执行了异常处理的语句。 字符串 语句执行前的阻塞时间。 ≥ 0 语句的实际执行时间。 ≥ 0 语句执行异常处理时DN上CPU使用的总时间。 ≥ 0 语句在执行异常处理时DN上CPU使用的倾斜率。 ≥ 0 语句执行异常处理时所使用的cgroups。 字符串 语句执行异常处理后的状态。 字符串 语句执行的异常处理动作。 字符串 语句被异常处理的原因。 字符串 节点状态统计 主机名。 字符串 60s 主机状态。 字符串 实例状态统计 主机名。 字符串 60s 实例类型。 字符串 实例角色。 字符串 实例状态。 字符串 实例状态原因。 字符串 集群状态 集群状态。 字符串 30s 是否发生过主备切换。 字符串 是否发生过重分布。 字符串 当前集群是否只读。 字符串 cpu状态 默认情况下为ALL。 字符串 30s 用户态CPU时间%。 ≥ 0.0 nice值为负进程的CPU时间%。 ≥ 0.0 内核态时间%。 ≥ 0.0 I/O等待时间%。 ≥ 0.0 硬中断时间%。 ≥ 0.0 软中断时间%。 ≥ 0.0 虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间%。 ≥ 0.0 运行虚拟处理器花费的时间%。 ≥ 0.0 除去磁盘等待操作之外的空闲时间%。 ≥ 0.0 是否有超线程能力。 是/否 是否开启超线程。 是/否 处于runable状态的进程个数。 ≥ 0 处于等待I/O完成状态的进程个数。 ≥ 0 活跃会话 数据库名称。 字符串 30s 实例名称。 字符串 所有用户会话数量。 ≥ 0 distinct用户名。 ≥ 0 distinct应用名称。 ≥ 0 处于“active”、“fastpathfunctioncall”状态的查询数量。 ≥ 0 磁盘容量统计 实例名称。 字符串 86400s 数据库名称。 字符串 数据库大小。 ≥ 0 事务状态 数据库名称。 字符串 60s 实例名称。 字符串 通过数据库全局扫描返回的行数。 ≥ 0 通过数据库查询索引返回的行数。 ≥ 0 通过数据库查询插入的行数。 ≥ 0 通过数据库查询更新的行数。 ≥ 0 通过数据库查询删除的行数。 ≥ 0 此数据库中已经提交的事务数。 ≥ 0 此数据库中已经回滚的事务数。 ≥ 0 在该数据库中检索的死锁数。 ≥ 0 在这个数据库中读取的磁盘块的数量。 ≥ 0 此数据库中高速缓存中发现的磁盘块的个数,即缓存中命中的块数(只包括GaussDB(DWS)缓冲区高速缓存,不包括文件系统的缓存)。 ≥ 0 通过数据库后端读取数据文件块花费的时间,以毫秒计算。 ≥ 0.0 通过数据库后端写入数据文件块花费的时间,以毫秒计算。 ≥ 0.0 由于数据库恢复冲突取消的查询数量(只在备用服务器发生的冲突)。 ≥ 0 通过数据库查询创建的临时文件数量。计算所有临时文件(比如排序或哈希),并且忽略log_temp_files设置。 ≥ 0 通过数据库查询写入临时文件的数据总量。计算所有临时文件,并且忽略log_temp_files设置。 ≥ 0 数据库容量(单位:Byte)。 ≥ 0 单位时间内通过数据库全局扫描返回的行数。 ≥ 0 单位时间内通过数据库查询索引返回的行数。 ≥ 0 单位时间内通过数据库查询插入的行数。 ≥ 0 单位时间内通过数据库查询更新的行数。 ≥ 0 单位时间内通过数据库查询删除的行数。 ≥ 0 单位时间内此数据库中已经提交的事务数。 ≥ 0 单位时间内此数据库中已经回滚的事务数。 ≥ 0 单位时间内在该数据库中检索的死锁数。 ≥ 0 文件句柄 磁盘文件系统名称。 字符串 30s inode总容量(单位:KB)。 ≥ 0 已使用容量(单位:KB)。 ≥ 0 节点磁盘使用 磁盘文件系统名称。 ≥ 0 30s 总容量(单位:KB)。 ≥ 0 已使用容量(单位:KB)。 ≥ 0 可用容量(单位:KB)。 ≥ 0 磁盘使用率%。 ≥ 0 gsar网卡使用统计 节点名称。 字符串 30s 网卡名称。 字符串 网卡IP地址。 字符串 网卡接收数据(单位:KB)。 ≥ 0 网卡接收数据的包数。 ≥ 0 接收包平均长度(单位:Byte)。 ≥ 0 网卡接收时丢弃的数据包数。 ≥ 0 丢包率。 ≥ 0.0 网卡发送数据(单位:KB)。 ≥ 0 网卡发送数据的包数。 ≥ 0 接收包平均长度(单位:Byte)。 ≥ 0 gsar tcp统计 tcp超时重传个数。 ≥ 0 30s tcp发包数量。 ≥ 0 tcp重传包数量。 ≥ 0 tcp重传率。 ≥ 0.0 节点磁盘I/O统计 磁盘名称(devicename)。 字符串 30s 每秒传输次数(transferpersecond)每次传输的大小未知。 ≥ 0.0 每秒从设备读取的数据量(单位:KB)。 ≥ 0.0 每秒向设备写入的数据量(单位:KB)。 ≥ 0.0 读取的总数据量(单位:KB)。 ≥ 0.0 写入的总数据量(单位:KB)。 ≥ 0.0 每秒对该设备的读请求被合并的次数。 ≥ 0.0 每秒对该设备的写请求被合并的次数。 ≥ 0.0 每秒完成读次数。 ≥ 0.0 每秒完成写次数。 ≥ 0.0 每秒读数据量(单位:KB)。 ≥ 0.0 每秒写数据量(单位:KB)。 ≥ 0.0 平均每次I/O操作的数据量(单位:扇区数)。 ≥ 0.0 平均请求队列长度。 ≥ 0.0 平均每次I/O请求的等待时间(单位:ms)。 ≥ 0.0 平均每次I/O请求的处理时间(单位:ms)。 ≥ 0.0 在统计时间内所有处理I/O时间,除以总共统计时间,即I/O队列非空的时间比例%。 ≥ 0.0 实例内存监控统计 实例名称。 字符串 60s 实例所占用的内存大小。 ≥ 0.0 进程所使用的内存大小。 ≥ 0.0 最大动态内存。 ≥ 0.0 已使用的动态内存。 ≥ 0.0 内存的动态峰值。 ≥ 0.0 最大动态共享内存上下文。 ≥ 0.0 共享内存上下文的动态峰值。 ≥ 0.0 最大共享内存。 ≥ 0.0 已使用的共享内存。 ≥ 0.0 列存所允许使用的最大内存。 ≥ 0.0 列存已使用的内存大小。 ≥ 0.0 通信库所允许使用的最大内存。 ≥ 0.0 通信库已使用的内存大小。 ≥ 0.0 通信库的内存峰值。 ≥ 0.0 TopSQL记录历史作业监控信息允许使用的最大内存。 ≥ 0.0 TopSQL记录历史作业监控信息的内存峰值。 ≥ 0.0 TopSQL记录历史作业监控信息已使用的内存大小。 ≥ 0.0 其他已使用的内存大小。 ≥ 0.0 pooler连接占用内存大小。 ≥ 0.0 pooler空闲连接占用的内存大小。 ≥ 0.0 列存压缩和解压缩使用的内存大小。 ≥ 0.0 为UDFWorker进程预留的内存大小。 ≥ 0.0 MMAP使用的内存大小。 ≥ 0.0 实例资源统计 实例名称。 字符串 60s 读取“postmaster.pID/cm_server.pID/gtm.pID/etcd.pID”中的值(CPU使用率%)。 ≥ 0.0 读取“postmaster.pID/cm_server.pID/gtm.pID/etcd.pID”中的值(内存使用率%)。 ≥ 0.0 实例磁盘大小统计 实例名称。 字符串 86400s 存储位置。 字符串 当前实例上所有数据库使用的磁盘空间。 ≥ 0 节点内存统计 所有可用ram大小,物理内存减去预留位和内核使用量后的剩余值(单位:KB)。 ≥ 0 30s 系统中未使用的内存,lowfree+highfree(单位:KB)。 ≥ 0 用来给块设备做缓存的大小(单位:KB)。 ≥ 0 文件缓冲区大小(单位:KB)。 ≥ 0 交换空间总和(单位:KB)。 ≥ 0 ram暂存在swap中的大小(单位:KB)。 ≥ 0 中毒页面中的内存量(单位:KB)。 ≥ 0 网络状态统计 网卡名称。 字符串 30s 网卡状态(up/down)。 up/down 网卡速度(千兆/百兆)。 ≥ 0 网卡接收总数据(单位:Byte)。 ≥ 0 网卡接收数据的总包数。 ≥ 0 网卡接收错误总数。 ≥ 0 网卡接收时丢弃的数据包总数。 ≥ 0 接收时fifo缓冲区错误的数量。 ≥ 0 接收时分组帧错误的数量。 ≥ 0 接收到的压缩数据包数量。 ≥ 0 接收到的多播帧数量。 ≥ 0 网卡发送总数据(单位:Byte)。 ≥ 0 网卡发送数据的总包数。 ≥ 0 网卡发送错误总数。 ≥ 0 网卡发送时丢弃的数据包总数。 ≥ 0 发送时fifo缓冲区错误的数量。 ≥ 0 发送接口上检测到的冲突数。 ≥ 0 发送时由设备驱动程序检测到的载波损耗的数量。 ≥ 0 发送出的压缩数据包数量。 ≥ 0 是否支持网卡多队列。 是/否 网卡多队列开启。 是/否 多队列网卡的CPU亲和性。 字符串 网卡是否双工。 字符串 网络速率。 ≥ 0.0 节点sql统计 节点名。 字符串 60s 用户名。 字符串 SELECT数量。 ≥ 0 UPDATE数量。 ≥ 0 INSERT数量。 ≥ 0 DELETE数量。 ≥ 0 MERGEINTO数量。 ≥ 0 DDL数量。 ≥ 0 DML数量。 ≥ 0 DCL数量。 ≥ 0 SELECT总响应时间。 ≥ 0 SELECT平均响应时间。 ≥ 0 SELECT最大响应时间。 ≥ 0 SELECT最小响应时间。 ≥ 0 UPDATE总响应时间。 ≥ 0 UPDATE最大响应时间。 ≥ 0 UPDATE最小响应时间。 ≥ 0 UPDATE最小响应时间。 ≥ 0 DELETE总响应时间。 ≥ 0 DELETE平均响应时间。 ≥ 0 DELETE最大响应时间。 ≥ 0 DELETE最小响应时间。 ≥ 0 INSERT总响应时间。 ≥ 0 INSERT平均响应时间。 ≥ 0 INSERT最大响应时间。 ≥ 0 INSERT最小响应时间。 ≥ 0 单位时间SELECT数量差值。 ≥ 0 单位时间UPDATE数量差值。 ≥ 0 单位时间INSERT数量差值。 ≥ 0 单位时间DELETE数量差值。 ≥ 0 单位时间MERGEINTO数量差值。 ≥ 0 单位时间DDL数量差值。 ≥ 0 单位时间DML数量差值。 ≥ 0 单位时间DCL数量差值。 ≥ 0 单位时间SELECT总响应时间差值。 ≥ 0 单位时间SELECT平均响应时间差值。 ≥ 0 单位时间SELECT最大响应时间差值。 ≥ 0 单位时间SELECT最小响应时间差值。 ≥ 0 单位时间UPDATE总响应时间差值。 ≥ 0 单位时间UPDATE最大响应时间差值。 ≥ 0 单位时间UPDATE最小响应时间差值。 ≥ 0 单位时间UPDATE最小响应时间差值。 ≥ 0 单位时间DELETE总响应时间差值。 ≥ 0 单位时间DELETE平均响应时间差值。 ≥ 0 单位时间DELETE最大响应时间差值。 ≥ 0 单位时间DELETE最小响应时间差值。 ≥ 0 单位时间INSERT总响应时间差值。 ≥ 0 单位时间INSERT平均响应时间差值。 ≥ 0 单位时间INSERT最大响应时间差值。 ≥ 0 单位时间INSERT最小响应时间差值。 ≥ 0 系统状态统计 tcp协议栈重传率%。 ≥ 0.0 30s top sql统计 数据库名称。 字符串 60s 实例名称。 字符串 线程ID(会话ID、sessionID)。 字符串 语句执行使用的内部query_ID。 字符串 用于标示作业类型,可通过guc参数query_band进行设置,默认为空字符串。 字符串 这个值是从query_band的字段中取出来的,位置0。 字符串 这个值是从query_band的字段中取出来的,位置1。 字符串 连接到后端的用户名。 字符串 连接到后端的应用名。 字符串 连接到后端的客户端的ip地址,如果此字段是null,它表明通过服务器机器上unix套接字连接客户端或者这是内部进程,如autovacuum。 字符串 客户端的主机名,这个字段是通过client_addr的反向DNs查找得到。这个字段只有在启动log_hostname且使用ip连接时才非空。 字符串 客户端用于与后端通讯的tcp端口号,如果使用unix套接字,则为-1。 字符串 如果后台当前正等待锁则为true。 是/否 语句执行的开始时间。 ≥ 0 语句执行前的阻塞时间(单位:ms)。 ≥ 0 语句已经执行的时间(单位:ms)。 ≥ 0 语句执行预估总时间(单位:ms)。 ≥ 0 语句执行预估剩余时间(单位:ms)。 ≥ 0 工作负载管理资源状态。 字符串 用户使用的资源池。 字符串 job在资源池中的优先级,取值: 1:low 2:medium 4:high 8:rush ≥ 0 语句所使用的cgroup。 字符串 语句在所有DN上的最小内存峰值(单位:MB)。 ≥ 0 语句在所有DN上的最大内存峰值(单位:MB)。 ≥ 0 语句执行过程中的内存使用平均值(单位:MB)。 ≥ 0 语句在各DN间的内存使用倾斜率。 ≥ 0 语句预估使用内存(单位:MB)。 ≥ 0 语句在所有DN上的下盘信息。 字符串 若发生下盘,所有DN上下盘的最小数据量,默认为0(单位:MB)。 ≥ 0 若发生下盘,所有DN上下盘的最大数据量,默认为0(单位:MB)。 ≥ 0 若发生下盘,所有DN上下盘的平均数据量,默认为0(单位:MB)。 ≥ 0 若发生下盘,DN间下盘倾斜率。 ≥ 0 语句在所有DN上的最小执行时间(单位:ms)。 ≥ 0 语句在所有DN上的最大执行时间(单位:ms)。 ≥ 0 语句在所有DN上的平均执行时间(单位:ms)。 ≥ 0 语句在各DN间的执行时间倾斜率。 ≥ 0 语句在所有DN上的最小CPU时间(单位:ms)。 ≥ 0 语句在所有DN上的最大CPU时间(单位:ms)。 ≥ 0 语句在所有DN上的CPU总时间(单位:ms)。 ≥ 0 语句在各DN间的CPU时间倾斜率。 ≥ 0 主要显示如下几类告警信息以及SQL自诊断调优相关告警。 字符串 语句在所有DN上的每秒平均I/O峰值(列存单位是次/s,行存单位是万次/s)。 ≥ 0 语句在DN间的I/O倾斜率。 ≥ 0 语句在所有DN上的每秒最大I/O峰值(列存单位是次/s,行存单位是万次/s) ≥ 0 语句在所有DN上的每秒最小I/O峰值(列存单位是次/s,行存单位是万次/s)。 ≥ 0 查询语句。 字符串 查询计划。 字符串 当前查询语句的实时运行状态(active、IDle、IDleintransaction、IDleintransaction(aborted)、fastpathfunctioncall、disabled)。 字符串 当前查询语句在资源池上的运行状态(pending、running、finished、aborted、active、unknown)。 字符串 语句的属性(ordinary、simple、complicated、internal)。 字符串 快慢车道(fastorslow)。 字符串 是否系统查询。 是/否 适配monitor搜索,是否系统查询。 是/否 该过程开始的时间,即当客户端连接服务器时。 ≥ 0 到目前为止的执行时间。 ≥ 0 启动当前事务的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。 ≥ 0 上次状态改变的时间。 ≥ 0 语句执行的开始时间。 ≥ 0 语句当前为止的实际执行时间(单位:s)。 ≥ 0 历史查询 数据库名称。 字符串 180s 实例名称。 字符串 用户名称。 字符串 连接到后端的应用名。 字符串 连接到后端的客户端的ip地址,如果此字段是null,它表明通过服务器机器上unix套接字连接客户端或者这是内部进程,如autovacuum。 字符串 客户端的主机名,这个字段是通过client_addr的反向DNs查找得到。这个字段只有在启动log_hostname且使用ip连接时才非空。 字符串 客户端用于与后端通讯的tcp端口号,如果使用unix套接字,则为-1。 字符串 用于标示作业类型,可通过guc参数query_band进行设置,默认为空字符串。 字符串 这个值是从query_band的字段中取出来的,位置0。 字符串 这个值是从query_band的字段中取出来的,位置1。 字符串 语句执行前的阻塞时间,包含语句解析和优化时间(单位:ms)。 ≥ 0 语句执行的开始时间(单位:ms)。 ≥ 0 语句执行的结束时间(单位:ms)。 ≥ 0 语句已经执行的时间(单位:ms)。 ≥ 0 语句预估执行时间(单位:ms)。 ≥ 0 语句执行结束状态: 正常:finished 异常:aborted 字符串 语句执行结束状态为aborted时显示异常信息。 字符串 用户使用的资源池。 字符串 Job在资源池中的优先级,取值: 8:rush 4:high 2:medium 1:low ≥ 0 语句所使用的cgroup。 字符串 语句在所有DN上的最小内存峰值(单位:MB)。 ≥ 0 语句在所有DN上的最大内存峰值(单位:MB)。 ≥ 0 语句执行过程中的内存使用平均值(单位:MB)。 ≥ 0 语句各DN间的内存使用倾斜率。 ≥ 0 语句在所有DN上的下盘信息。 字符串 若发生下盘,所有DN上下盘的最小数据量,单位MB,默认为0。 ≥ 0 若发生下盘,所有DN上下盘的最大数据量,单位MB,默认为0。 ≥ 0 若发生下盘,所有DN上下盘的平均数据量,单位MB,默认为0。 ≥ 0 若发生下盘,DN间下盘倾斜率。 ≥ 0 语句在所有DN上的最小执行时间(单位:ms)。 ≥ 0 语句在所有DN上的最大执行时间(单位:ms)。 ≥ 0 语句在所有DN上的平均执行时间(单位:ms)。 ≥ 0 语句在各DN间的执行时间倾斜率。 ≥ 0 语句在所有DN上的最小CPU时间(单位:ms)。 ≥ 0 语句在所有DN上的最大CPU时间(单位:ms)。 ≥ 0 语句在所有DN上的CPU总时间(单位:ms)。 ≥ 0 语句在DN间的CPU时间倾斜率。 ≥ 0 语句在所有DN上的每秒最小I/O峰值(列存单位是次/s,行存单位是万次/s)。 ≥ 0 语句在所有DN上的每秒最大I/O峰值(列存单位是次/s,行存单位是万次/s)。 ≥ 0 语句在所有DN上的每秒平均I/O峰值(列存单位是次/s,行存单位是万次/s)。 ≥ 0 语句在DN间的I/O倾斜率。 ≥ 0 主要显示如下几类告警信息以及SQL自诊断调优相关告警。 字符串 查询ID。 字符串 执行的语句。 字符串 语句的执行计划。 字符串 语句所属用户对应的逻辑集群。 字符串 schema使用统计 数据库名称。 字符串 3600s Schema名称。 字符串 已使用容量(单位:Byte)。 ≥ 0 总容量(单位:Byte)。 ≥ 0 session统计 数据库名称。 字符串 180s 实例名称。 字符串 线程ID(可以作为sessionID,也可以作为连接ID使用)。 字符串 数据库用户名。 字符串 用户应用名称。 字符串 客户端地址。 字符串 客户端主机名。 字符串 客户端用于与后台通讯的tcp端口号,如果使用unix套接字,则为-1。 字符串 该过程开始的时间,即当客户端连接服务器时。 ≥ 0 到目前为止的执行时间。 ≥ 0 启动当前事务的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。 ≥ 0 上次状态改变的时间。 ≥ 0 如果后台当前正等待锁则为true。 是/否 该后台当前总体状态。 字符串 用户使用的资源池。 字符串 语句当前为止的实际执行时间,(单位:s)。 ≥ 0 查询语句的ID。 字符串 语句执行的开始时间。 ≥ 0 语句当前所使用的cgroups。 字符串 锁类型。 字符串 锁模式。 字符串 存在锁等待情况,是否持有锁,持有为true。 是/否 锁等待的资源。 字符串 语句类型。 字符串 查询SQL。 字符串 是否为系统查询。 是/否 查询计划。 字符串 sql探针统计 探针任务的查询ID。 字符串 30s 集群ID。 字符串 集群项目编号。 字符串 探针SQL的任务类型。 字符串 探针SQL的任务的创建时间。 ≥ 0 SQL执行时间。 ≥ 0 关联的探针SQL的probe_ID。 字符串 探针名称。 字符串 探针SQL的任务状态: 进行中:running 完成:success 失败:fail 字符串 表脏页率统计 数据库名称。 字符串 7200s 模式名称。 字符串 表名称(全名)。 字符串 表所有者。 字符串 表大小(单位:Byte)。 ≥ 0 表脏页率。 ≥ 0.0 表倾斜监控统计 数据库名称。 字符串 7200s 模式名称。 字符串 表名称(全名)。 字符串 表所有者。 字符串 表大小(单位:Byte)。 ≥ 0 表倾斜率。 ≥ 0.0 资源池统计 负载资源池。 字符串 120s 资源池cpu配额。 ≥ 0 资源池内存配额。 ≥ 0 资源池磁盘配额。 ≥ 0 资源池允许的简单作业最大并发数。 ≥ 0 资源池允许的最大并发数。 ≥ 0 资源池cpu使用率。 ≥ 0.0 资源池内存使用率。 ≥ 0.0 资源池磁盘使用率。 ≥ 0.0 资源池当前简单作业并发数。 ≥ 0 资源池当前并发数。 ≥ 0 资源池用户统计 负载资源池。 字符串 30s 用户的CPU配额。 ≥ 0 用户的内存配额。 ≥ 0 用户的磁盘配额。 ≥ 0 用户的CPU使用率。 ≥ 0.0 用户的内存使用率。 ≥ 0.0 用户的磁盘使用率。 ≥ 0.0 用户ID。 字符串 用户名称。 字符串 父主题: 数据库监控(DMS)
  • 进入告警管理页面 登录GaussDB(DWS) 管理控制台。 在左侧导航栏,单击“告警管理”,切换至“告警”页签。 进入数据仓库告警展示页面。该页面分为三个区域: 存量告警统计 最近7天的存量告警统计值(按告警级别分类),以柱状图的形式展示。用户可通过存量告警统计图,对过去一周告警发生的数量和分布有清晰的了解。 当日告警 当天的存量告警统计值(按级别分类),以列表的形式展示。重点向用户强调当天未处理的告警数量,帮助用户快速掌握目前告警的数量和分布。 告警详情 最近7天的所有告警(包括已处理和未处理)的明细信息,以表格的形式展示。可查看近7天内所有告警的告警名称、告警级别、集群名称、定位信息、详细信息、产生日期、状态等信息,帮助用户快速发现和定位问题。 告警展示页面的数据源来自EventService微服务,该微服务最多可以提供30天的告警缓存数据。
  • 概述 告警管理包含查看告警规则、告警规则配置与告警信息订阅功能。其中,告警规则可以提供过去一周的告警信息统计与告警信息明细,方便用户自行查看租户下的告警。该特性除了以默认值的形式提供一套GaussDB(DWS)告警最佳实践外,还允许用户根据自己的业务特点,个性化修改告警阈值。告警管理通过消息通知服务(Simple Message Notification,简称SMN)发送GaussDB(DWS) 告警通知,用户可订阅告警启用通知。 该特性仅8.1.1.200及以上集群版本支持。 告警管理目前暂不支持按照企业项目划分告警。
  • 操作场景 MRS的HDFS集群参数配置变更时,可能造成GaussDB(DWS)集群无法从HDFS集群导入数据。使用HDFS集群导入数据前,需要执行MRS数据源配置的更新操作。 表1 参数说明 参数名 参数解释 dfs.client.read.shortcircuit 是否开启本地读。 dfs.client.read.shortcircuit.skip.checksum 本地读时是否跳过数据校验。 dfs.client.block.write.replace-datanode-on-failure.enable 向HDFS写数据块发生失败时,是否替换新的节点作为副本存储位置。 dfs.encrypt.data.transfer 是否开启数据加密。设置为“true”表示加密,默认不加密。 说明: 此参数仅对启用Kerberos认证的集群有效。 仅当hadoop.rpc.protection设置为privacy时使用。 dfs.encrypt.data.transfer.algorithm 指定密钥传输的加密解密算法。 只有在dfs.encrypt.data.transfer配置项设置为“true”,此参数才会生效。 默认值为“3des”,表示采用3DES算法进行加密。 dfs.encrypt.data.transfer.cipher.suites 指定实际存储数据传输的加密解密算法。 如果不指定此参数,则使用“dfs.encrypt.data.transfer.algorithm”参数指定的加密算法进行数据加密。默认值为“AES/CTR/NoPadding”。 dfs.replication 默认数据副本个数。 dfs.blocksiz 默认数据块大小。 hadoop.security.authentication 安全认证模式。 hadoop.rpc.protection RPC通信保护模式。 默认值: 安全模式(启用Kerberos认证):privacy 普通模式(未启用Kerberos认证):authentication 说明: “authentication”:只进行认证,不加密。 “integrity”:进行认证和一致性校验。 “privacy”:进行认证、一致性校验、加密。 dfs.domain.socket.path 本地使用的Domain socket路径。
  • 经典变更规格对系统的影响 经典变更规格前,需退出创建了临时表的客户端连接,因为在经典变更规格过程中及成功之前创建的临时表将会失效,操作临时表也会失败。但是经典变更规格后创建的临时表不受影响。 经典变更规格过程中,进入数据重分布阶段集群将会变成“只读”状态,变更过程中业务可能长期被阻塞,建议您在工程师的协助下进行,避免业务受影响。 经典变更规格后内网IP会变更,如果业务侧有使用IP地址进行连接,需要更新连接IP地址。 经典变更规格后域名会保持不变,域名内绑定IP地址会发生切换,过程中会出现短暂的连接中断,请注意在变更时间窗内尽量避免业务语句写入。如果业务侧有使用域名进行连接,则需要更新域名相应缓存信息避免变更结束后连接失败。 如果集群有绑定弹性负载均衡(ELB),经典变更规格后业务侧连接地址保持不变,继续使用ELB地址;ELB内部服务器地址会更新为新的连接地址。 为防止数据丢失,在变更完成后、删除老集群前会对老集群做一次全量快照(若不支持快照功能将跳过此步骤),可在快照列表中查看,确认无误后需手动删除快照。 经典变更规格过程中,集群只读会影响智能运维中相关运维任务的功能使用。建议在经典变更规格前,将智能运维任务暂停,或错开智能运维与经典变更规格的时间窗。
  • 监控面板 用户通过定义监控面板来配置相关的监控视图,监控面板与用户绑定,登录后可看到自定义的监控面板。 创建监控面板:用户可单击“创建监控面板”按钮定义自己的监控面板。 修改监控面板:用户可单击“修改”按钮修改监控面板的名称。 删除监控面板:用户可单击“删除”按钮删除监控面板,默认监控面板无法被删除。 共享监控面板:用户可单击“共享”按钮共享监控面板,被共享用户则可以看到该面板,但无法修改。 图1 监控面板
  • 添加监控视图 目前DMS提供集群、数据库两和节点三种维度的监控视图,用户可根据需求单击“添加监控视图”按钮添加。监控指标如下所示: 集群维度的监控指标:CPU使用率、内存使用率、磁盘使用率、磁盘I/O、网络I/O、状态、CN异常数量、只读、会话数量、查询数量、死锁数量、DN异常数量、DN实例CPU使用率、平均每秒事务数、平均每秒查询数。 数据库维度的监控指标:查询等待队列长度、会话数量、查询数量、插入行数、更新行数、删除行数、容量。 节点维度的监控指标:CPU使用率、CPU使用情况、内存使用率、内存使用情况、平均磁盘使用率、磁盘I/O、TCP协议栈重传率、网络IO、磁盘容量、磁盘使用率、磁盘读速率、磁盘写速率、I/O等待时间、I/O服务时间、I/O使用率、网卡状态、接收包数、发送包数、接收丢包数、接收速率、发送速率。 图2 添加监控视图 每个监控面板上最多可以添加20个监控视图,添加过多的视图会导致页面请求数据增多,所需的渲染时间增大,因此请合理的控制监控视图规模。 节点维度中最多可以勾选20个监控对象,该特性仅8.1.3.310及以上集群版本支持。
  • 约束和限制 逻辑集群的创建、扩容和缩容必须以环为单位,最少3个物理节点,DN的主备从必须在同一环所包含的物理节点内。 逻辑集群切换期间,如果原物理集群有数据,则会进行锁集群操作。用户可执行增删改查等简单DML语句,但执行操作数据库对象等复杂DDL语句会阻塞业务出现报错,请谨慎操作。 逻辑集群不支持单独备份和恢复。 逻辑集群不支持单独升级。 物理集群转换为逻辑集群模式之后不支持回退到物理集群。 逻辑集群模式下,只能创建逻辑集群,不支持创建普通的NodeGroup,逻辑集群内部也不支持创建子NodeGroup。 逻辑集群的OM操作(创建、删除、编辑、扩容、缩容、重启)不支持并行执行。 由于公共数据库对象(除系统表之外的表、外表和视图)会分布在物理集群所有节点,当某个逻辑集群节点重启后,其他逻辑集群对这些公共数据库对象进行的DDL操作将会中断。 在逻辑集群模式下,由于每个DN只包含所属逻辑集群下的表,而自定义函数要在所有DN上创建,因此创建的函数体中不能使用%type引用表字段类型。 在逻辑集群模式下,WITH RECURSIVE语句不支持下推。 在逻辑集群模式下,只有在相同逻辑集群下支持交换分区,不同逻辑集群下的分区表和普通表不支持交换分区。 在逻辑集群模式下,创建函数时如果函数参数或返回值有表类型,这些表类型必须属于同一个逻辑集群。 在逻辑集群模式下,通过CREATE TABLE ... LIKE方式创建外表时,源表和要创建的外表必须是在同一个逻辑集群中。 在逻辑集群模式下,不支持创建Schema同时创建表语句,即CREATE SCHEMA ... CREATE TABLE语句,用户需要首先创建Schema,再创建表到该Schema下。 逻辑集群不支持一主多备,逻辑集群只在主备从的部署形态下生效。 某个逻辑集群用户不能访问另一个逻辑集群用户创建的全局临时表。
  • 权限说明 在逻辑集群模式下: 逻辑集群创建权限(CREATE ON NODE GROUP)允许授予任何用户/角色,创建权限后可在对应的逻辑集群上进行创建表等相关操作。 如果创建的表指定的schema是某个用户私有schema(即该schema和用户同名且schema的owner是该用户),则新创建的表会将owner自动变更为该用户,不需要进行关联逻辑集群操作。 和逻辑集群关联的用户在创建表时不一定指定to group,如果没有指定to group子句,用户创建的表在用户关联的逻辑集群上;支持变更用户关联的逻辑集群。 如果用户没有关联逻辑集群,该用户创建表时会将表创建到default_storage_nodegroup指定的逻辑集群上;如果default_storage_nodegroup为installation,则将表创建到第一个逻辑集群中。在逻辑集群模式下,将oid最小的逻辑集群设置为第一个逻辑集群。通常用户没有显示设置default_storage_nodegroup的时候,默认值为installation。 DWS 3.0版本支持创建只读逻辑集群,如果用户关联到只读逻辑集群,只能在只读逻辑集群上创建会话级临时表(本地临时表和volatile临时表,不包括全局临时表);该用户如果创建其他常规表和外表,要遵循没有关联逻辑集群的用户建表规则,即表会创建到default_storage_nodegroup指定的逻辑集群上,如果default_storage_nodegroup是installation,则将表创建到第一个逻辑集群中。 系统管理员可以通过ALTER ROLE命令为每个用户设置默认的default_storage_nodegroup,具体语法参考ALTER ROLE。 建表规则 用户表在没有指定to group时,如果设置了default_storage_nodegroup参数,则会将表创建到指定的逻辑集群中。 如果default_storage_nodegroup参数设置为installation时,则会将表创建到第一个逻辑集群中(即所有逻辑集群中oid最小的一个)。 允许修改表的owner为任何用户,但对表进行操作时,需要检查对应的schema和nodegroup权限。 系统管理员可以关联到特定逻辑集群,并在多个逻辑集群中创建表。 系统管理员如果关联了逻辑集群,那么创建表时如果未指定to group,那么会默认创建到关联的逻辑集群中;如果指定了to group,则可将表创建到指定的逻辑集群中。 系统管理员如果没有关联逻辑集群,没有指定to group,则创建在由default_storage_nodegroup参数指定的逻辑集群中,详情参见建表规则。 允许将系统管理员权限授予关联了逻辑集群的用户,但同样遵循建表规则。 非表对象(schema/sequence/function/trigger等)的访问不再检查逻辑集群权限。 系统中的资源池必须关联到特定逻辑集群。 在一个逻辑集群下可以创建多个资源池,同一个资源池不能属于多个逻辑集群。 由于资源池定义了资源使用量,因此关联特定资源池的逻辑集群用户发起的作业将受到该资源池的资源约束。 逻辑集群下不需要创建负载组来定义并发作业的数量。因此,逻辑集群模式不再支持负载组。 逻辑集群删除时只删除表、外表,资源池对象,其他对象不会删除。 如果有对象依赖逻辑集群下的表(部分依赖表的sequence/function/triggers)同样也会删除。 逻辑集群删除过程会取消用户关联关系,删除已有的父子租户关系,该集群用户将会绑定默认的installation nodegroup,关联全局默认资源池。 逻辑集群用户如果有创建数据库权限也可创建数据库。
  • 应用场景 场景一:将不同资源要求的数据隔离 图3 基于不同资源要求划分逻辑集群 如上图所示,不同资源要求的数据就分开存放到不同逻辑集群中,同时不同逻辑集群之间也支持互访,在保证资源隔离的基础上也可以保证功能不受影响。 T1和T2表主要用于大批量数据计算,并生成报表数据(比如银行跑批)。这个过程由于需要大批量导入和大数据查询,所以对节点的内存和IO资源消耗比较高,且耗时比较长,但这类查询对实时性要求不高,因此可以将这些数据划分到一个独立的逻辑集群中。 T3和T4表包含了一些计算数据和实时数据,主要用于业务点查和实时查询,这类查询要求实时性高,为避免其他高负载操作影响,可以将这些数据划分到独立的逻辑集群中。 T5和T6表主要用于大并发OLTP类操作,数据更新非常频繁,对IO非常敏感,为了避免大数据查询对其影响,可以将这类表划分到独立的逻辑集群中。 场景二:不同业务要求的数据隔离,扩展数据集群多租户的能力 图4 逻辑集群多业务数据和多租户管理 大规模数据库集群往往同时包含很多业务的数据,不同业务有不同的数据表,为了对不同业务进行资源隔离,可以通过创建多租户来实现。将不同业务用户分配给不同租户,以便减少业务之间资源竞争。但随着业务规模不断扩大,集群系统中的业务数目越来越多,通过划分多租户来管理越来越难以控制资源竞争。由于每个表都会分布在数据库集群的所有DN节点上,因此每次数据表操作都可能会涉及所有DN节点,这会导致网络压力增大和系统资源消耗,单纯通过扩大集群规模也很难解决。所以可通过划分多个逻辑集群解决业务数量扩大问题,如上图所示。 通过划分独立的逻辑集群,将新增的业务分配到独立的逻辑集群上,这样新增业务对原有业务的影响会很小。而原有逻辑集群中的业务规模如果扩大,也可以通过对原有逻辑集群扩容来解决。 逻辑集群不适合将多个独立的数据库系统合并在一起管理,独立的数据库系统往往对独立运维要求很高,需要能够单独管理、监控、备份和升级,同时集群之间要求故障隔离,逻辑集群无法做到独立运维和完全的故障隔离。
  • 逻辑集群架构 图2展示了物理集群划分成多个逻辑集群的架构示意图。物理集群的所有节点被分成多个逻辑集群节点组。业务用户1和业务用户2的作业分别在不同的逻辑集群上执行。用户1和用户2可以在本逻辑集群内部定义资源池来控制不同作业的资源(CPU,内存,I/O)。如果业务用户1的某些作业需要访问业务用户2的数据,在获得授权后可以跨逻辑集群访问。逻辑集群可以配置跨逻辑集群访问的资源来保证逻辑集群内部作业的资源充足。 图2 逻辑集群架构 将物理集群的所有节点分成多个逻辑集群,每个子集群都可以根据业务情况定义资源池。由于用户表不会跨逻辑集群分布,如果业务不跨逻辑集群访问,业务之间就不存在资源竞争。同一逻辑集群内部的作业可以通过资源池来分配资源。如果某些业务需要访问其他逻辑集群的数据,可以跨逻辑集群访问,被访问的逻辑集群可以对来自其他逻辑集群的访问请求进行资源控制,以减少对逻辑集群内部作业的资源竞争。 用户在创建完成物理集群后就要确定是否划分逻辑集群,如果在划分逻辑集群前已经创建了用户表,由于这些用户表已经分布在所有物理节点,就无法再划分逻辑集群了,具体限制条件请参见约束和限制。对于已经在使用的集群(例如8.1.0.100之前版本构建的数据库集群),如果希望转换为逻辑集群管理,可以在集群升级到支持逻辑集群(8.1.0.100及以上版本)后,将整个集群全部节点转换为一个逻辑集群。然后通过添加新节点对物理集群扩容,并在新增节点上创建新的逻辑集群。 逻辑集群支持如下管理操作: 添加/删除逻辑集群: 添加逻辑集群:物理集群转换为逻辑集群后,可指定逻辑集群名称和物理节点列表,将这些物理节点划分为一个逻辑集群。 删除逻辑集群:删除指定名称的逻辑集群,逻辑集群删除后释放的节点会落入弹性集群中。 管理逻辑集群: 编辑逻辑集群:根据需求向逻辑集群中添加节点或减少节点。 资源管理(逻辑集群模式):对指定逻辑集群进行资源管理(仅8.1.3.101及以上版本支持)。 扩容逻辑集群:该操作将扩大逻辑集群物理节点数目,并对逻辑集群内的表进行重分布到扩容后的物理节点上。 重启逻辑集群:该操作将逻辑集群包含的所有DN重新启动,考虑到对整个物理集群的影响,逻辑集群并不支持单独的停止和启动。 缩容逻辑集群:从弹性集群中选择指定的主机环,缩容选定的主机环。 定时增删DWS 3.0逻辑集群:支持在计划时间段内,动态创建、删除计算逻辑集群,实现计算资源动态伸缩。
  • 复制表节点组 复制表节点组是逻辑集群模式下一种特殊的节点组,它可以包含一个或多个逻辑集群,但只能创建复制表。典型应用场景是用来创建公共维度表。如果多个逻辑集群都需要一些相同的公共维表,可以创建复制表节点组,并将这些公共维表创建在这个节点组中。复制表节点组包含的逻辑集群都可在本DN上直接访问这些维度表,而不需访问其他DN节点上的表。如果复制表节点组包含的逻辑集群中有任何一个发生了扩容或缩容操作,复制表节点组也会随之扩容或缩容。如果包含的逻辑集群被删除了,复制表节点组会随之缩容。但如果复制表节点组只包含一个逻辑集群,这种情况下如果逻辑集群被删除,则复制表节点组也会删除。通常情况下用户不应该创建这样的复制表节点组,而是应该将表创建到逻辑集群内。 复制表节点组通过SQL语句CREATE NODE GROUP创建,通过DROP NODE GROUP语句删除,删除前需要将该节点组上的表对象都删。 8.1.2及以上版本支持创建复制表节点组。
  • 基本概念 逻辑集群是通过Node Group机制来实现资源和数据的隔离。通过把物理集群的所有物理节点划分成多个逻辑集群,每个逻辑集群本质上是一个Node Group,每个物理节点只能属于一个逻辑集群,用户数据表只能分布在一个逻辑集群范围内。这样不同逻辑集群的用户数据是隔离的,逻辑集群所属节点的资源主要提供给逻辑集群内数据表的操作,同时供其他逻辑集群的作业交互查询使用。企业将不同的业务部署在不同的逻辑集群上,既可以实现业务统一管理,也能保证业务之间数据隔离和资源隔离。 逻辑集群从物理节点层次将大集群进行划分,和数据库形成交叉。一个数据库中的表可以按逻辑集群来分配到不同的物理节点,而一个逻辑集群也可以包含多个数据库的表。在划分逻辑集群后,整个数据库中对象间的层次关系如图1所示。 其中Elastic_group弹性集群是指在逻辑集群模式下,非逻辑集群节点组成的集群并且总是存在,是一个特殊的Node Group,可以包含多个或不包含任何DN节点。弹性集群不能用户手动创建,在物理集群下第一次创建逻辑集群时自动创建弹性集群,物理集群中所有不属于逻辑集群的物理节点都会加入弹性集群。后续逻辑集群创建所需的DN节点都是来自弹性集群中。因此,为了能够创建新的逻辑集群,需要保证弹性集群中有DN节点存在(在物理集群模式下第一次创建逻辑集群时不需要)。用户可以通过扩容向弹性集群添加新的物理节点。 图1 逻辑集群、数据库、表层次关系 逻辑集群支持8.1.0.100及以上版本。 在实际业务场景中,建议用户尽可能将同一个数据库的表创建到同一个逻辑集群中。 逻辑集群不是独立子集群,可以实现数据隔离,资源隔离和权限隔离,但不支持独立运维。 逻辑集群不支持经典变更规格。 DWS 3.0物理集群切换逻辑集群时,如果原物理集群有数据则不支持切换。用户请确保切换时原物理集群数据为空。
  • 相关GUC参数设置 SQL诊断指标采集的相关GUC参数如下,具体请参见《数据仓库服务开发指南》中“GUC参数”章节: enable_resource_track 取值范围:布尔型 默认值:on DMS期望值:on(仅供参考) 作用:控制是否开启资源实时监控功能。 仅开启该参数,但没有正确配置其他相关联GUC参数,将不能记录实时资源消耗情况。 resource_track_cost 取值范围:整型,-1~INT_MAX 默认值:100000 DMS期望值:0(仅供参考) 作用:设置对当前会话的语句进行资源监控的最小执行代价,该参数只有当参数enable_resource_track为on时才有效。 当该值设置过小,会导致更多的语句被记录,引起记录膨胀,记录过程也会影响集群性能。 resource_track_level 取值范围:枚举类型 默认值:query DMS期望值:query(仅供参考) 作用:设置当前会话的资源监控的等级;该参数只有当参数enable_resource_track为on时才有效。 设置operator级别的资源监控会显著影响性能。 resource_track_duration 取值范围:整型,0~INT_MAX,单位为秒(s) 默认值:60 DMS期望值:0(仅供参考) 作用:设置资源监控实时视图中记录的语句执行结束后进行历史信息转存的最小执行时间。即,只有当执行时间超过该时间的语句才会被记入到历史视图中。该参数只有当enable_resource_track为on时才有效。 当该值设置的过小,会导致内核语句转存的批处理机制失效,对内核性能产生影响。 topsql_retention_time 取值范围:整型,0~3650,单位为天 默认值:30 DMS期望值:14(仅供参考) 作用:视图pgxc_wlm_session_info数据老化时间。 该时间设置为0时表示不会老化,这会导致存储膨胀。 enable_resource_record 取值范围:布尔型 默认值:off DMS期望值:on(仅供参考) 作用:是否开启资源监控记录归档功能;开启时,对于history视图(GS_WLM_SESSION_HISTORY和GS_WLM_OPERATOR_HISTORY)中的记录,每隔3分钟会分别被归档到相应的info视图(GS_WLM_SESSION_INFO和GS_WLM_OPERATOR_INFO),归档后history视图中的记录会被清除。 开启该功能时建议同时设置合适的topsql_retention_time参数值配置老化时间。否则,将会引起GS_WLM_SESSION_INFO或GS_WLM_OPERATOR_INFO表的数据膨胀。
  • 约束与限制 非细粒度灾备集群在数据同步期间,无法提供读写服务。 灾备集群在容灾任务停止或者异常但灾备集群正常的情况下,可以提供读服务,灾备切换成功后可以提供读写服务。 容灾创建后,生产集群快照功能正常使用,但是灾备集群禁用快照功能,以及生产、灾备集群均禁用恢复功能。 不支持逻辑集群。 不支持资源池。 使用冷热表后,冷数据同步依赖OBS。 容灾不支持同步配置的外部数据源数据。 容灾管理为同一租户下的双集群容灾。 创建容灾需要生产集群与灾备集群类型、版本号一致且逻辑同构。 Region内容灾生产集群和灾备集群需要在同一个VPC内。 Region内容灾在生产集群与容灾集群切换后绑定的弹性负载均衡(ELB)会自动切换到新的生产集群,过程中会有短暂的连接中断,请注意在变更时间窗内尽量避免业务语句写入。 Region内容灾在生产集群与容灾集群,原生产集群所在的EIP和内网域名,连接IP地址不会自动切换,业务系统中如果有使用EIP、域名或者IP方式连接,需要切换到新集群。
  • 概览 容灾,即在另一个可用分区(Region内)部署一个同构的GaussDB(DWS)灾备集群,如果生产集群所处的地理位置发生自然灾害,或者集群内部出现了故障从而导致生产集群无法正常对外提供读写服务,那么灾备集群可以切换为生产集群,从而保障业务连续性。架构图如下所示: Region内容灾特性仅8.1.1及以上集群版本支持。 实时数仓(单机部署)不支持容灾功能。 DWS 3.0集群和多AZ集群暂不支持容灾功能。 若用户灾备集群使用包周期套餐,则会在包周期到期冻结一段时间后自动删除,请用户及时续费,以免删除灾备集群导致容灾异常。
  • 删除容灾 登录GaussDB(DWS)管理控制台。 在左侧导航栏中,单击“容灾管理”。 在容灾列表中,在指定容灾所在行的“操作”列,单击“删除”按钮。 在弹出框单击“确定”。 此时容灾的“容灾状态”显示为“删除中”,删除需要时间请耐心等待。 容灾状态为“创建失败”、“未启动”、“启动失败”、“已停止”、“停止失败”和“异常”时可以执行删除容灾操作。 删除后,将无法进行数据同步,且不可恢复,请谨慎操作。
  • 启动容灾 登录GaussDB(DWS)管理控制台。 在左侧导航栏中,单击“容灾管理”。 在容灾列表中,在指定容灾所在行的“操作”列,单击“启动”按钮。 在弹出框单击“确定”。 此时容灾的“容灾状态”显示为“启动中”,启动需要时间请耐心等待。启动成功后“容灾状态”显示为“运行中”。 容灾状态为“未启动”、“启动失败”和“已停止”时可以执行启动容灾操作。 启动容灾后,生产集群和灾备集群将无法进行恢复、扩容、升级、重启、节点变更、节点管理、更新密码等操作,此外,灾备集群将无法进行备份操作,请谨慎操作。 当容灾启动后,如果灾备集群容灾正常运行且容灾处于恢复状态中,此状态的集群会计费。
  • 查看最大连接数 方式一:集群创建成功后,用户可在GaussDB(DWS)管理控制台上单击指定集群名称,切换至“参数修改”模块查看数据库参数max_connections的取值。 方式二:使用SQL客户端工具连接集群中的数据库后,通过SQL命令的方式查看数据库参数max_connections的取值。 1 SHOW max_connections; 界面显示的结果与以下信息类似,表示数据库默认支持的最大连接数为200。 max_connections ----------------- 200 (1 row)
  • 查看已使用的连接数 使用SQL客户端工具连接集群中的数据库。 支持查看如表2所示的连接数场景。 除了创建的时候用双引号引起的数据库和用户名称外,以下命令中用到的数据库名称和用户名称,其中包含的英文字母必须使用小写。 表2 查看连接数介绍 描述 命令 查看指定用户的会话连接数上限。 执行如下命令查看连接到指定用户dbadmin的会话连接数上限。 1 SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='dbadmin'; 查询结果类似如下信息,其中“-1”表示没有对用户dbadmin设置连接数的限制。 rolname | rolconnlimit ----------+-------------- dwsadmin | -1 (1 row) 查看指定用户已使用的会话连接数。 执行如下命令查看指定用户dbadmin已使用的会话连接数。 1 SELECT COUNT(*) FROM V$SESSION WHERE USERNAME='dbadmin'; 查询结果类似如下信息,其中,“1”表示dbadmin已使用的会话连接数。 count ------- 1 (1 row) 查看指定数据库的会话连接数上限。 执行如下命令查看连接到指定数据库gaussdb的会话连接数上限。 1 SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='gaussdb'; 查询结果类似如下信息,其中“-1”表示没有对数据库gaussdb设置连接数的限制。 datname | datconnlimit ----------+-------------- gaussdb | -1 (1 row) 查看指定数据库已使用的会话连接数。 执行如下命令查看指定数据库gaussdb上已使用的会话连接数。 1 SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='gaussdb'; 查询结果类似如下信息,其中,“1”表示数据库gaussdb上已使用的会话连接数。 count ------- 1 (1 row) 查看所有用户已使用会话连接数。 执行如下命令查看所有用户已使用的会话连接数。 1 2 3 4 5 SELECT COUNT(*) FROM PG_STAT_ACTIVITY; count ------- 10 (1 row)
  • 支持的连接数规格 集群支持的连接数与集群节点规格有关: 表1 支持连接数规格 参数 参数描述 CN连接数 DN连接数 max_connections 允许和数据库连接的最大并发连接数。 800 max(VCPU核数/单节点DN数量*120+24, 5000) max_pool_size CN的连接池与其它某个CN/DN的最大连接数。 max_prepared_transactions 设置可以同时处于预备状态的事务的最大数。 CN及DN概述详情请参见集群逻辑架构。
  • 告警解释 GaussDB(DWS)开启实时查询监控时,默认每60秒通过GS_WLM_SESSION_STATISTICS视图检测CN上正在执行作业的排队状态。 如果10分钟(可配置)内检测集群中处于排队等待状态的SQL语句数量超过10个(可配置),则上报查询语句堆积数量超阈值告警;当集群处于等待状态的SQL语句数量小于10时,自动消除该告警。 如果一直存在能够引发告警的查询语句堆积数量,那么在24小时(可配置)后将再次发起告警。
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称,告警的详细分类。 集群名称 产生告警的集群。 定位信息 产生告警的集群ID,集群名称。 详细信息 CloudService表示产生告警的云服务,依次为服务名,资源标识,资源名称,首次告警时间;格式化告警信息。示例:CloudServiceDWS,resourceId=xxxx-xxxx-xxxx-xxxx,resourceIdName=test_dws,first_alarm_time:2023-01-11:19:02:09;集群test_dws在10分钟内堆积的查询语句数量平均值为30,超过阈值10。 产生日期 产生告警的时间。 状态 当前告警的处理状态。
  • 在“连接客户端”页面获取集群连接地址 登录GaussDB(DWS)管理控制台。 在左侧导航栏中,单击“连接客户端”。 在“数据仓库连接信息”区域,选择一个可用的集群名称。 只能选择状态为“可用”的集群。 图1 数据仓库连接信息 查看并获取集群的连接信息。 “内网IP” “公网IP” “弹性负载均衡地址” “JDBC连接字符串(内网)” “JDBC连接字符串(公网)” “ODBC连接字符串” 如果创建集群时没有自动绑定弹性IP,“公网IP”显示为空。如果您想使用公网访问地址(由弹性IP和数据库端口组成)从互联网访问集群,可以单击“绑定弹性IP”为集群绑定弹性IP。 如果创建集群时绑定了弹性IP,如果您不想使用公网访问地址访问集群,可以单击“解绑弹性IP”为集群解绑弹性IP。弹性IP解绑后,“公网IP”显示为空。 如果创建集群时没有绑定弹性负载均衡,“弹性负载均衡地址”显示为空,可以单击“绑定弹性负载均衡”进行绑定,解决CN单点故障。 如果集群绑定了弹性负载均衡,为保证集群高可用,请优先使用弹性负载均衡地址连接集群。 如果集群开启了IPV6双栈网络功能,则内网IP既有IPV4,也有IPV6,您可根据需要选择IPV4或IPV6进行DWS集群的连接。
共100000条