华为云用户手册

  • 功能介绍 一句话识别websocket接口支持识别1min以内的音频,交互过程如图 客户端和服务端交互流程所示,主要分为开始识别、发送音频数据,结束识别、断开连接四个步骤。 websocket接口同http接口一致按次计费,只要建立连接成功,发送音频,服务开始识别,则本次调用计费生效。如果用户发送错误end请求或者持续20s未发送音频而产生了报错,该次调用依然认为生效。如果连接成功后未发送音频直接断开,或者请求字段不正确而产生异常,则认为本次调用无效,不会纳入计费次数。 图1 客户端和服务端交互流程
  • 开始识别 功能介绍 当wss握手请求收到成功响应后,客户端到服务端的通信协议会升级为Websocket协议。通过Websocket协议,客户端发送开始识别请求,用于配置一句话识别的配置信息。 请求消息 表3 参数说明 参数名 是否必选 参数类型 说明 command 是 String 表示客户端发送开始识别请求,参数值需设置为START。 config 是 Object 配置信息。结构信息请参见表 config数据结构。 表4 config数据结构 参数 是否必选 参数类型 说明 audio_format 是 String 支持语音的格式,请参见表 audio_format取值范围。 property 是 String 所使用的模型特征串。通常是 “语种_采样率_领域”的形式,例如chinese_8k_common。请参见表 property取值范围。 add_punc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digit_norm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。识别结束后,会将数字识别为阿拉伯数字。 interim_results 否 String 是否输出中间结果,可以为yes或no。默认为no,表示不输出中间结果。 vocabulary_id 否 String 热词表id,不使用热词则不填写。 创建热词表信息请参考创建热词表。 need_word_info 否 String 表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。 表5 property取值范围 property取值 说明 chinese_8k_general 支持采样率为8k的中文普通话语音识别,采用新一代端到端识别算法,识别准确率更高。 格式支持pcm8k16bit/alaw8k8bit/ulaw8k8bit,区域支持cn-east-3和cn-north-4(强烈推荐使用)。 chinese_16k_general 支持采样率为16k的中文普通话语音识别,采用新一代端到端识别算法,识别准确率更高。 格式支持pcm16k16bit/alaw16k8bit/ulaw16k8bit,区域支持cn-east-3和cn-north-4(强烈推荐使用)。 chinese_8k_common 支持采样率为8k的中文普通话语音识别。 chinese_16k_common 支持采样率为16k的中文普通话语音识别。 sichuan_16k_common 支持采样率为16k的中文普通话与四川话方言语音识别。区域仅支持cn-north-4。max_seconds参数最短时长为10s,当设置低于10s,默认按照10s处理。 cantonese_16k_common 支持采样率为16k的粤语方言语音识别。区域仅支持cn-north-4。max_seconds参数最短时长为10s,当设置低于10s,默认按照10s处理。 shanghai_16k_common 支持采样率为16k的上海话方言语音识别。区域仅支持cn-north-4。max_seconds参数最短时长为10s,当设置低于10s,默认按照10s处理。 表6 audio_format取值范围 audio_format取值 说明 pcm16k16bit 16k16bit单通道录音数据。 pcm8k16bit 8k16bit单通道录音数据。 ulaw16k8bit 16k8bit ulaw单通道录音数据。 ulaw8k8bit 8k8bit ulaw单通道录音数据。 alaw16k8bit 16k8bit alaw单通道录音数据。 alaw8k8bit 8k8bit alaw单通道录音数据。 目前仅支持裸音频格式,仅支持pcm编码的wav格式,不支其他wav头或者arm格式的编码。 示例 { "command": "START", "config": { "audio_format": "pcm8k16bit", "property": "chinese_8k_common", "add_punc": "yes", "interim_results": "yes", "need_word_info": "yes" } } 状态码 状态码请参见状态码。 错误码 错误码请参见错误码。
  • wss-URI wss-URI格式 wss /v1/{project_id}/asr/short-audio 参数说明 表1 参数说明 参数名 是否必选 说明 project_id 是 项目编号。获取方法,请参见获取项目ID。 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 用于获取操作API的权限。获取方法请参见认证鉴权。响应消息头中X-Subject-Token的值即为Token。 Enterprise-Project-Id 否 String 企业项目ID。SIS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账。 获取方法:进入“企业项目管理”页面,单击企业项目名称,在企业项目详情页获取Enterprise-Project-Id(企业项目ID)。 企业项目创建步骤请参见用户指南。 说明: 账户创建企业项目后,在传参时,有以下三类场景。 携带正确的ID,正常使用SIS服务,账单归到企业ID对应的企业项目中。 携带错误的ID,正常使用SIS服务,账单的企业项目会被分类为“default”。 不携带ID,正常使用SIS服务,账单的企业项目会被分类为“default”。
  • 示例 { "command": "START", "config": { "audio_format": "ulaw8k8bit", "property": "chinese_8k_common", "add_punc": "yes", "vad_tail": 400, "interim_results": "yes", "need_word_info": "yes" } }
  • 背景信息 很多用户在使用JDBC连接集群时只连接集群的一个CN,这就导致单个CN压力较大并且别的CN资源浪费,并且这种方式还有单点故障导致连接不可用的风险。 用户可使用JDBC连接多个CN避免以上问题。主要有以下两种方式: 使用ELB连接集群:弹性负载均衡(ELB)是将访问流量根据转发策略分发到后端多台弹性云服务器的流量分发控制服务,可以通过流量分发扩展应用系统对外的服务能力,提高应用程序的容错能力。 使用multi-host方式连接集群:使用JDBC配置多个节点的方式,也能实现类似ELB的效果。
  • 创建逻辑集群关联用户并跨逻辑集群查询数据 以系统管理员dbadmin连接数据库,执行以下SQL语句查看逻辑集群创建成功。 1 SELECT group_name FROM PGXC_GROUP; 创建两个用户u1和u2,分别关联逻辑集群lc1和逻辑集群lc2。 1 2 CREATE USER u1 NODE GROUP "lc1" password '{password}'; CREATE USER u2 NODE GROUP "lc2" password '{password}'; 切换到用户u1,创建表t1,并插入数据。 1 2 3 SET ROLE u1 PASSWORD '{password}'; CREATE TABLE u1.t1 (id int); INSERT INTO u1.t1 VALUES (1),(2); 切换到用户u2,创建表t2,并插入数据。 1 2 3 SET ROLE u2 PASSWORD '{password}'; CREATE TABLE u2.t2 (id int); INSERT INTO u2.t2 VALUES (1),(2); 同时使用u2查询u1.t1表。返回结果提示没有权限。 1 SELECT * FROM u1.t1; 切换回系统管理员dbadmin,查询表u1.t1和u2.t2分别创建到了集群lc1和lc2中,分别对应企业的两块业务,实现了基于逻辑集群的数据隔离。 1 2 3 SET ROLE dbadmin PASSWORD '{password}'; SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't1'; SELECT p.oid,relname,pgroup,nodeoids FROM pg_class p LEFT JOIN pgxc_class pg ON p.oid = pg.pcrelid WHERE p.relname = 't2'; 将逻辑集群lc1的访问权限授予用户u2,同时将SCHEMA u1访问权限、表u1.t1访问权限授予用户u2。 1 2 3 GRANT usage ON NODE GROUP lc1 TO u2; GRANT usage ON SCHEMA u1 TO u2; GRANT select ON TABLE u1.t1 TO u2; 划分逻辑集群后,相当于在原来物理集群的基础上,再增加一层逻辑集群(NODE GROUP)的权限隔离。所以跨逻辑集群访问数据,首先要授权用户有逻辑集群(NODE GROUP层)权限,其次是SCHEMA权限,最后是单张表TABLE权限。如果没有授予逻辑集群的权限,会提示类似permission denied for node group xx的错误信息。 再次切换到u2用户,查询u1.t1表,查询成功,逻辑集群既实现了数据隔离,又可以在用户授权后进行跨逻辑集群访问。 1 2 SET ROLE u2 PASSWORD '{password}'; SELECT * FROM u1.t1;
  • 在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动态库。
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称。例如: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-2-1,host_name: host-192-168-1-122,disk_name: /dev/vdb,first_alarm_time: 2022-11-26 11:14:58; 节点10分钟内的平均数据磁盘使用率为84%,超过阈值80%。 产生日期 产生告警的时间。 状态 当前告警的处理状态。
  • 告警解释 GaussDB(DWS)每30秒采集集群各节点所有磁盘的使用情况。 如果存在磁盘最近10分钟(可配置)内的最大使用率超过80%(可配置),则上报节点数据盘使用率超阈值的重要告警;如果平均使用率低于75%(即上报阈值减去5%),则消除该重要告警。 如果存在磁盘最近10分钟(可配置)内的最大使用率超过85%(可配置),则上报节点数据盘使用率超阈值的紧急告警;如果平均使用率低于80%(即上报阈值减去5%),则消除该紧急告警。 如果存在磁盘的最大使用率一直大于上报阈值,那么在24小时(可配置)后将再次发起告警。
  • 查看已使用的连接数 使用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)
  • 查看最大连接数 方式一:集群创建成功后,用户可在GaussDB(DWS)管理控制台上单击指定集群名称,切换至“参数修改”模块查看数据库参数max_connections的取值。 方式二:使用SQL客户端工具连接集群中的数据库后,通过SQL命令的方式查看数据库参数max_connections的取值。 1 SHOW max_connections; 界面显示的结果与以下信息类似,表示数据库默认支持的最大连接数为200。 max_connections ----------------- 200 (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概述详情请参见集群逻辑架构。
  • 创建OBS委托 操作场景 创建OBS数据源前需要用户提前创建好授权给GaussDB(DWS)具有OBS OperateAccess或OBS Administrator权限的委托。 操作步骤 鼠标移动至页面右上角账号,单击“统一身份认证”,进入统一身份认证服务页面。 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”。 创建委托时委托类型选择“云服务”,云服务选择“DWS”。 单击“下一步”,对委托授予OBS服务的“OBS OperateAccess”或“OBS Administrator”权限。 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。
  • 使用OBS数据源 GaussDB(DWS)使用外表方式访问OBS上的数据。委托方式与非委托方式,在外表上体现出来的差异仅在于指定了不同的SERVER。 对于非委托方式,控制台提供的SERVER包含access_key和secret_access_key参数,分别对应OBS访问协议的AK和SK值。 对于委托方式,控制台提供的SERVER包含access_key、secret_access_key和security_token参数,分别对应OBS访问协议的临时AK、临时SK和统一身份认证服务IAM中临时安全凭证的SecurityToken值。 在创建好OBS委托和OBS数据源之后,用户从控制台获得相应的包含委托信息的SERVER,假设为obs_server。用户创建和使用外表与非委托方式无差异。关于如何使用OBS数据源,具体请参见从OBS导入数据。 如下示例为通过外表读取OBS上的数据。 建立OBS外表customer_address,不包含分区列。obs_server上的文件,其格式为‘orc’,对应的存储目录为'/user/obs/region_orc11_64stripe1/'。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE FOREIGN TABLE customer_address ( ca_address_sk integer not null, ca_address_id char(16) not null, ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(36,33) , ca_location_type char(20) ) SERVER obs_server OPTIONS ( FOLDERNAME '/user/obs/region_orc11_64stripe1/', FORMAT 'ORC', ENCODING 'utf8', TOTALROWS '20' ) DISTRIBUTE BY roundrobin; 通过外表查询OBS上的数据。 1 2 3 4 5 SELECT COUNT(*) FROM customer_address; count ------- 20 (1row)
  • 前提条件 已下载Linux版本的ODBC驱动包“dws_x.x.x_odbc_driver_for_xxx.zip”和Windows版本的ODBC驱动包“dws_odbc_driver_for_windows.zip”,请参见下载JDBC或ODBC驱动。 GaussDB(DWS)也支持开源的ODBC驱动程序:PostgreSQL ODBC 09.01.0200或更高版本。 已下载开源unixODBC代码文件,支持版本为2.3.0,下载地址:https://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download 已下载SSL证书文件,请参见下载SSL证书。
  • 概述 GaussDB(DWS)提供了使用IAM认证方式访问数据库的功能。当使用JDBC应用程序连接集群时,您可以在JDBC连接中配置IAM用户名及其用户凭证等信息,在连接数据库时系统就会自动生成临时数据库凭证,从而成功连接到数据库。 当前仅支持1.3.1及以上版本的集群及其配套的JDBC驱动程序使用IAM认证方式访问数据库。请先参考下载JDBC或ODBC驱动下载JDBC驱动程序。 IoT数仓暂不支持IAM认证方式连接集群。 IAM用户凭证有密码和访问密钥(Access Key ID和Secret Access Key,简称AK和SK)两种类型,您要为JDBC连接提供 IAM 访问密钥。 如需使用IAM用户凭证访问数据库,必须先给您的IAM用户授予DWS Database Access权限,同时拥有DWS Administrator和DWS Database Access权限的用户,才能基于IAM用户生成临时数据库用户凭证以连接GaussDB(DWS)数据库。 需要注意的是,DWS Database Access是用户组级别的权限,您可以通过为用户组授权并将用户加入到用户组的方式,使用户具有用户组中的权限。 在IAM中,只有admin用户组的用户可以管理用户。如需给IAM用户授权,您的IAM账号必须属于IAM的admin用户组,否则,请联系IAM账号管理员帮您授权。 使用IAM用户凭证访问数据库的流程如下: 授予IAM用户DWS Database Access权限 创建IAM用户凭证 配置JDBC连接使用IAM认证方式连接集群
  • 创建IAM用户凭证 用户可以登录管理控制台创建访问密钥,如果您已经创建过了,也可以使用已有的访问密钥。 登录管理控制台。 将鼠标移到右上角的用户名,单击“我的凭证”。 再单击“管理访问密钥”页签,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。 访问密钥是IAM身份认证的重要凭证,只有在新增访问密钥时,用户才可以下载到含有Access Key ID(AK)和Secret Access Key(SK)的密钥文件,在管理控制台只能查看到Access Key ID,如果您未曾下载过该密钥文件,请联系您的管理员进行获取,或者重新创建。 每个用户最多可创建2个访问密钥,有效期为永久。为了账号安全性,建议您定期更换并妥善保存访问密钥。
  • 配置JDBC连接使用IAM认证方式连接集群 配置JDBC连接参数 表1 数据库连接参数 参数 描述 url gsjdbc4.jar/gsjdbc200.jar数据库连接描述符。JDBC接口不提供重试连接的能力,您需要在业务代码中实现重试连接的处理。url示例如下: jdbc:dws:iam://dws-IAM-demo:cn-north-4/gaussdb?AccessKeyID=XXXXXXXXXXXXXXXXXXXX&SecretAccessKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&DbUser=user_test&AutoCreate=true JDBC URL参数说明: jdbc:dws:iam是URL格式的前缀。 dws-IAM-demo为数据库集群名称。 cn-north-4是集群所在的区域。JDBC会根据所填写区域,访问对应DWS服务,向所在集群下发IAM证书,用于IAM用户认证。DWS服务地址已内置在JDBC配置文件中。 有关GaussDB(DWS)的区域信息,请参考地区和终端节点。 gaussdb是要连接的数据库名。 AccessKeyID/SecretAccessKey为参数DbUser指定的IAM用户所对应的访问密钥ID和秘密访问密钥。 DbUser请设置为IAM用户名,注意,当前版本暂不支持IAM用户名中含有中划线的情况。 如果数据库中已存在DbUser指定的用户,则临时用户凭证具有与现有用户相同的权限。 如果数据库中不存在DbUser指定的用户,且AutoCreate参数值为true,则自动创建一个以DbUser参数值作为用户名的新用户,默认创建的用户为数据库普通用户。 AutoCreate可以不设置,默认为false。该参数表示是否在数据库中自动创建一个以DbUser参数值作为用户名的数据库用户。 true表示自动创建。如果用户已存在则不会再创建。 false表示不会自动创建。如果数据库中不存在DbUser指定的用户名将返回失败。 info 数据库连接属性。常用的属性如下: ssl:Boolean类型。表示是否使用SSL连接。 loglevel:Integer类型。为LogStream或LogWriter设置记录进DriverManager当前值的日志信息量。 目前支持org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO。值为1时,表示只打印org.postgresql.Driver.INFO,将记录非常少的信息。值大于等于2时,表示打印org.postgresql.Driver.DEBUG和org.postgresql.Driver.INFO,将产生详细的日志信息。默认值为0,表示不打印日志。 charSet:String类型。表示在向数据库发送数据或从数据库接收数据时使用到的字符集。 prepareThreshold:Integer类型。用于确定在转换为服务器端的预备语句之前,要求执行方法PreparedStatement的次数。缺省值是5。 示例 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 //以下用例以gsjdbc4.jar为例。 //以下代码将获取数据库连接操作封装为一个接口,可通过给定集群所在的区域、集群名称、AccessKeyID、SecretAccessKey及对应的IAM用户名来连接数据库。 public static Connection GetConnection(String clustername, String regionname, String AK, String SK, String username) { //驱动类。 String driver = "org.postgresql.Driver"; //数据库连接描述符。 String sourceURL = "jdbc:dws:iam://" + clustername + ":" + regionname + "/postgresgaussdb?" + "AccessKeyID=" + AK + "&SecretAccessKey=" + SK + "&DbUser=" + username + "&autoCreate=true"; Connection conn = null; try { //加载驱动。 Class.forName(driver); } catch (ClassNotFoundException e) { return null; } try { //创建连接。 conn = DriverManager.getConnection(sourceURL); System.out.println("Connection succeed!"); } catch (SQLException e) { return null; } return conn; }
  • 监控项列表 通过数据库监控功能提供的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 是否有超线程能力。 是/否 是否开启超线程。 是/否 处于runnable状态的进程个数。 ≥ 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)
  • 使用pg_query_audit函数查看数据库审计日志 使用SQL客户端工具成功连接集群,连接方式请参考连接集群。 使用函数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_lgout | 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_lgout | 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,若关闭请参考修改数据库参数设置为OFF)。 已配置需要审计的审计项。各审计项及其开启办法,请参考设置数据库审计日志。 数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。 数据库各个节点审计日志单独记录。 只有拥有AUDITADMIN属性的用户才可以查看审计记录。
  • 查看数据库审计日志方式 方式一:由于审计日志会占用一定磁盘空间,为了防止本地磁盘文件过大,GaussDB(DWS)支持审计日志转储,用户可以开启“开启审计日志转储”功能,将审计日志转储到OBS(用户需创建用于存储审计日志的OBS桶)中进行查看或下载,详细内容请参考查看审计日志转储记录。 方式二:通过依赖于云日志服务LTS的“集群日志管理”功能查看采集的审计数据库日志或进行日志下载,详细内容请参考查看集群日志。 方式三:数据库的审计日志默认存储于数据库中,连接集群后使用pg_query_audit函数进行查看。详细内容请参考使用pg_query_audit函数查看数据库审计日志。
  • 告警解释 GaussDB(DWS)通过资源池实现对内存、IO和CPU等资源的控制,并基于优先级调度机制实现资源管理和分配,对用户业务提供资源负载管理服务。某种资源紧张时,可能出现SQL语句阻塞排队,等待其他语句执行完毕后才能执行的现象,详情请参见动态负载管理下的CCN排队。 GaussDB(DWS)固定每5分钟检查默认资源池default_pool的队列阻塞情况。如果存在长时间阻塞无法执行的SQL语句(默认20分钟,可配置),则触发集群默认资源池队列阻塞告警;当集群不存在符合告警条件的SQL语句时,自动消除该告警。 如果一直存在能够引发告警的阻塞SQL,那么在24小时(可配置)后将再次发起告警。
  • 告警参数 参数名称 参数含义 告警源 产生告警的系统名称,告警的详细分类。 集群名称 产生告警的集群。 定位信息 产生告警的集群ID,集群名称。 告警信息 CloudService表示产生告警的云服务,依次为服务名,资源标识,资源名称,首次告警时间;格式化告警信息。示例:CloudServiceDWS,resourceId=xxxx-xxxx-xxxx-xxxx,resourceIdName=test_dws,first_alarm_time:2023-01-11:19:02:09;集群test_dws在20分钟内出现默认资源池队列阻塞。 告警时间 告警的产生时间。 状态 告警当前的活动状态。
  • 创建逻辑集群关联用户并实现跨逻辑查询数据 以系统管理员连接数据库,执行以下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套逻辑集群。 业务隔离:新、老业务数据隔离在不同逻辑集群中。
  • (可选)准备ECS作为gsql客户端主机 购买弹性云服务器的操作步骤,请参见《弹性云服务器快速入门》中的购买并登录Linux弹性云服务器章节。 创建的弹性云服务器需要满足如下要求: 弹性云服务器需要与GaussDB(DWS)集群在相同的区域、可用分区。 如果使用GaussDB(DWS)提供的gsql命令行客户端连接GaussDB(DWS)集群,弹性云服务器的镜像必须满足如下要求: 镜像的操作系统必须是gsql客户端所支持的下列Linux操作系统: “Redhat x86_64”客户端工具支持在以下系统中使用: RHEL 6.4~7.6 CentOS 6.4~7.4 EulerOS 2.3 “SUSE x86_64”客户端工具支持在以下系统中使用: SLES 11.1~11.4 SLES 12.0~12.3 “Euler Kunpeng_64”客户端工具支持在以下系统中使用: EulerOS 2.8 “Stream Euler X86_64”客户端工具支持在以下系统中使用: EulerOS 2.2 “Stream Euler Kunpeng_64”客户端工具支持在以下系统中使用: EulerOS 2.8 如果客户端通过内网地址访问集群,请确保创建的弹性云服务器与GaussDB(DWS)集群在同一虚拟私有云里。 虚拟私有云相关操作请参见《虚拟私有云用户指南》中虚拟私有云和子网章节。 如果客户端通过公网地址访问集群,请确保创建的弹性云服务器和GaussDB(DWS)集群都要有弹性IP。 购买弹性云服务器时,参数“弹性公网IP”需选择“现在购买”或“使用已有”。 弹性云服务器对应的安全组规则需要确保能与GaussDB(DWS)集群提供服务的端口网络互通。 安全组相关操作请参见《虚拟私有云用户指南》中安全组章节。 请确认弹性云服务器的安全组中存在符合如下要求的规则,如果不存在,请在弹性云服务器的安全组中添加相应的规则: 方向:出方向。 协议:必须包含TCP。例如TCP、全部。 端口:需要包含GaussDB(DWS)集群提供服务的数据库端口,例如,设置为“1-65535”或者具体的GaussDB(DWS)数据库端口。 目的地址:设置的IP地址需要包含所要连接的GaussDB(DWS)集群的连接地址。其中0.0.0.0/0表示任意地址。 图1 出方向的规则 GaussDB(DWS)集群的安全组规则需要确保GaussDB(DWS)能接收来自客户端的网络访问。 请确认GaussDB(DWS)集群的安全组中存在符合如下要求的规则,如果不存在,请在GaussDB(DWS)集群的安全组中添加相应的规则。 方向:入方向。 协议:必须包含TCP。例如,TCP、全部。 端口:设置为GaussDB(DWS)集群提供服务的数据库端口。例如,“8000”。 源地址:设置的IP地址需要包含GaussDB(DWS)客户端主机的IP地址。例如,“192.168.0.10/32”。 图2 入方向的规则
  • GDS-Kafka入库模式 GDS-Kafka的数据入库都是先将数据copy至临时表,然后再根据客户的使用场景以及目标表有无主键进行merge或者insert,详见下表: 表3 GDS-Kafka入库模式 入库操作 app.insert.directly 是否主键表 入库模式 insert true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 是 根据主键从临时表merge到目标表。 否 使用insert select从临时表写入到目标表。 delete true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 说明: delete操作支持标记删除,通过配置app.del.flag参数可以指定删除标记字段,如果配置了标记删除字段,则会通过将删除字段设置为1来标记删除的记录。 是 如果设置了delflag字段,则会根据主键进行匹配merge,如果匹配到主键并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会根据主键进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 否 如果设置了delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配merge,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将delflag字段值置为1,否则将插入一条新的记录。 如果没有设置delflag字段,则会使用临时表中记录的所有字段与目标表进行匹配,如果匹配到记录并且目标表中记录的pos小于临时表记录的pos,则会将目标表中匹配到的记录删除。 update true(仅支持无主键表) 否 使用insert select从临时表写入到目标表。 false 说明: update操作会被拆分,将before或者beforeImage中的消息拆分为delete操作,将after或者afterImage中的消息拆分为insert操作,然后再按照insert和delete的行为进行入库处理。 是 相当于有主键表的insert+delete操作。 否 相当于无主键表的insert+delete操作。
共100000条