华为云用户手册

  • 在gsql客户端配置SSL认证相关的数字证书参数 GaussDB (DWS)在集群部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 登录GaussDB(DWS)管理控制台,在左侧导航栏中,进入“连接客户端”页面。 在“下载驱动程序”区域,单击“下载SSL证书”进行下载。 图1 SSL证书下载 使用文件传输工具(例如WinSCP工具)将SSL证书上传到客户端主机。 例如,将下载的证书“dws_ssl_cert.zip”存放到“/home/dbadmin/dws_ssl/”目录下。 使用SSH远程连接工具(例如PuTTY)登录gsql客户端主机,然后执行以下命令进入SSL证书的存放目录,并解压SSL证书: cd /home/dbadmin/dws_ssl/ unzip dws_ssl_cert.zip 在gsql客户端主机上,执行export命令,配置SSL认证相关的数字证书参数。 SSL认证有两种认证方式:双向认证和单向认证。认证方式不同用户所需配置的客户端环境变量也不同,详细介绍请参见SSL认证方式及客户端参数介绍。 双向认证需配置如下参数: export PGSSLCERT="/home/dbadmin/dws_ssl/sslcert/client.crt" export PGSSLKEY="/home/dbadmin/dws_ssl/sslcert/client.key" export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/dbadmin/dws_ssl/sslcert/cacert.pem" 单向认证需要配置如下参数: export PGSSLMODE="verify-ca" export PGSSLROOTCERT="/home/dbadmin/dws_ssl/sslcert/cacert.pem" 从安全性考虑,建议使用双向认证方式。 配置客户端环境变量,必须包含文件的绝对路径。 修改客户端密钥的权限。 客户端根证书、密钥、证书以及密钥密码加密文件需保证权限为600。如果权限不满足要求,则客户端无法以SSL方式连接到集群。 chmod 600 client.key chmod 600 client.crt chmod 600 client.key.cipher chmod 600 client.key.rand chmod 600 cacert.pem
  • SSL认证方式及客户端参数介绍 SSL认证有两种认证方式,如表1所示。从安全性考虑,建议使用双向认证方式。 表1 认证方式 认证方式 含义 配置客户端环境变量 维护建议 双向认证(推荐) 客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。 设置如下环境变量: PGSSLCERT PGSSLKEY PGSSLROOTCERT PGSSLMODE 该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。 单向认证 客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。 设置如下环境变量: PGSSLROOTCERT PGSSLMODE 为防止基于TCP链接的安全攻击,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。 在客户端配置SSL认证相关的环境变量,详细信息请参见表2。 客户端环境变量的路径以“/home/dbadmin/dws_ssl/”为例,在实际操作中请使用实际路径进行替换。 表2 客户端参数 环境变量 描述 取值说明 PGSSLCERT 指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。 必须包含文件的绝对路径,如: export PGSSLCERT='/home/dbadmin/dws_ssl/sslcert/client.crt' 默认值:空 PGSSLKEY 指定客户端私钥文件,用以数字签名和对公钥加密的数据进行解密。 必须包含文件的绝对路径,如: export PGSSLKEY='/home/dbadmin/dws_ssl/sslcert/client.key' 默认值:空 PGSSLMODE 设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。 取值及含义: disable:只尝试非SSL连接。 allow:首先尝试非SSL连接,如果连接失败,再尝试SSL连接。 prefer:首先尝试SSL连接,如果连接失败,将尝试非SSL连接。 require:只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。 verify-ca:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。 verify-full:GaussDB(DWS)不支持此模式。 默认值:prefer 说明: 若集群外访问客户端时,部分节点出现报错:ssl SYSCALL error。则可执行export PGSSLMODE="allow"或export PGSSLMODE="prefer"。 PGSSLROOTCERT 指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。 必须包含文件的绝对路径,如: export PGSSLROOTCERT='/home/dbadmin/dws_ssl/sslcert/certca.pem' 默认值:空 PGSSLCRL 指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。 必须包含文件的绝对路径,如: export PGSSLCRL='/home/dbadmin/dws_ssl/sslcert/sslcrl-file.crl' 默认值:空
  • 在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)集群GUC参数;然后修改一次准备使用的数据库用户的密码。 当前GaussDB(DWS)出于安全考虑,已经默认不再使用MD5存储密码摘要了,这将导致使用开源驱动或者客户端无法正常连接数据库。需要您调整密码策略后再创建一个新用户或者对老用户做一次密码修改,方可使用开源协议中使用的MD5认证算法。 数据库中是不会存储您的密码原文的,而是存储的密码的HASH摘要,在密码校验时与客户端发来的密码摘要进行比对(中间会有加盐操作)。故当您改变了密码算法策略时,数据库也是无法还原您的密码,再生成新的HASH算法的摘要值的。必须您手动修改一次密码或者创建一个新用户,这时新的密码将会采用您设置的HASH算法进行摘要存储,用于下次连接认证。 已获取GaussDB(DWS)集群的公网访问地址,含IP地址和端口。具体请参见获取GaussDB(DWS)集群连接地址。 已安装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动态库。
  • 前提条件 已下载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证书。
  • 集群升级 前提条件 8.1.1及以上集群版本支持用户自助通过console下发集群升级操作。 操作步骤 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称。 进入“集群详情”页面,切换至“升级管理”页签。 根据想要升级的操作,在“类型”一栏中选择升级或热补丁。 在升级管理页面,通过目标版本下拉菜单选择集群要升级的版本。 图2 升级集群 在升级操作前如果集群满足巡检条件,需单击“巡检”按钮先完成一次巡检,并保证巡检检查通过,通过后可进行下一步变更操作,详情请参见查看巡检。 集群安装热补丁后无法建立容灾。 单击“升级”按钮,根据提示单击“确定”按钮,下发升级操作。 查看集群是否升级成功: 如果集群升级成功:8.1.3及以上集群版本,集群升级任务完成后进入业务观察期,若用户验证业务无问题,通过升级管理页面单击“提交”按钮,完成集群升级;如果用户验证集群使用性能等有影响,可通过集群升级页面单击“回滚”按钮,下发升级回退操作。 8.1.3以前集群版本下发升级任务后,完成集群升级前不支持回滚或提交操作。 用户下发升级任务成功后,如果没有进行提交操作,则在未提交版本期间会产生wlm线程占用系统存储空间并对性能有一定影响。 图3 集群升级成功 如果集群升级失败:可单击“回滚”操作,回退到原集群版本;或单击“重试”按钮重复下发升级操作。 图4 集群升级失败
  • 升级版本说明 集群版本说明如下图所示: 图1 版本说明 服务补丁升级:表示集群版本X.X.X最后一位数字的升级更新,例如,集群版本从1.1.0升级到1.1.1。 持续时间:整个升级过程将花费不到10分钟。 业务影响:在此期间,如果升级源版本至8.1.3及以上版本,则支持在线补丁,补丁升级期间不要求用户停止业务,业务存在秒级闪断。如果在8.1.3以下版本业务会中断1至3分钟,建议在业务低峰期进行。 服务升级:表示集群版本X.X.X前面两位数字的升级更新,例如,集群版本从1.1.0升级到1.2.0。 持续时间:整个升级过程将花费不到30分钟。 业务影响:在此期间,如果升级源版本至8.1.1及以上版本,则支持在线升级,升级期间不要求用户停止业务,业务存在秒级闪断,建议在业务低峰期进行。 热补丁升级:表示在当前集群版本的基础上扩展一位版本号(格式为0001-9999)进行升级操作。 持续时间:单个热补丁升级过程中花费不到10分钟。 业务影响:热补丁升级过程中不影响业务,卸载热补丁后当前热补丁修复的问题可能再次出现。
  • 功能介绍 在GaussDB(DWS)数据库中需要运行复杂多样的业务语句,部分不合理业务会耗费大量的资源进行计算,最终可能降低整个数据库的性能。对此,GaussDB(DWS)支持用户自定义配置多种异常规则,系统会自动对满足异常规则的作业执行终止/降级操作,维持系统的稳定性。用户可以通过SQL语法配置符合集群资源情况以及业务情况的异常规则组合,关联到资源池即可对相应资源池中的作业生效。如果用户未配置自定义规则,系统支持默认异常规则来保证资源极限情况下系统的稳定性。 图1 异常规则 该特性仅8.2.0及以上集群版本支持,其中“单个DN最大带宽”异常规则仅8.2.1及以上集群版本支持。 8.2.1集群版本支持降级异常规则,所有异常规则都支持降级行为,降级后仅网络资源抢占降至低优先级:在正常查询无网络请求时,才会调度降级查询的网络请求。 默认异常规则仅8.2.0及以上集群版本中生效,升级到8.2.0及以上集群版本时默认异常规则不会生效,用户可自行创建所需规则。 9.1.0.100集群版本新增默认异常规则default_memsize,但仅在新安装的9.1.0.100及以上集群版本中生效。升级到至9.1.0.100及以上集群版本时默认异常规则不会生效,用户可自行创建所需规则。 同一个资源池可以关联多组规则,资源池关联的多组不同的异常规则以“或”的关系生效,满足其中一组的所有条件即可生效。例如,资源池关联两组规则,一组指定elapsedtime=2400, 另一组指定elapsedtime=1200,memsize=2000,那么执行中的作业,满足执行时间达到1200秒且内存使用达到2000MB时,或者执行时间达到2400秒时,都会触发规则终止作业。 同一组异常规则中的多个规则以“且”的关系生效,例如:同时设置执行时间elapsedtime=1000,内存大小memsize=500。表示一个作业,执行时间达到1000秒且内存使用达到500MB时,才会终止该作业。仅触发其中一个不会生效。 默认异常规则,当用户未关联资源池,或者用户所关联资源池未配置异常规则时默认生效;当用户所关联的资源池关联用户所指定规则时,以用户所关联规则为准。
  • 自定义异常规则和默认异常规则 GaussDB(DWS)当前版本支持的自定义异常规则和默认异常规则如下表所示: 表1 自定义异常规则类型 异常阈值类型 说明 取值范围(-1表示取消设置,不支持设置为0) 支持的异常操作 阻塞时间 作业的阻塞时间,单位秒。包括全局并发排队以及局部并发排队的总时间。如果语句中包含子语句,则每个语句排队的时间都计算在内。 -1或1~INT64_MAX-1 终止/降级 执行所消耗时间 作业的已被执行时间,单位秒。从开始执行到当前所消耗的时间。如果语句中包含子语句,则每个语句执行的时间都计算在内。 -1或1~INT64_MAX-1 终止/降级 所有DN上CPU总时间 作业在所有DN上执行时所耗费的CPU总时间,单位秒。 -1或1~INT64_MAX-1 终止/降级 所有DN上CPU总时间倾斜率 作业在DN上执行时的CPU时间的倾斜率,需要同elapsedtime一同设置。代表作业执行满足elapsedtime时间之后,开始检测作业CPU时间的倾斜率,每5s检测一次。 -1或1~100 终止/降级 DN平均消耗CPU占比 作业在所有DN上执行时的平均CPU使用率。 -1或1~100 终止/降级 单DN算子下盘大小 作业在单个DN上最大下盘的数据量,单位MB。 -1或1~INT64_MAX-1 终止/降级 单个DN上最大带宽 作业在单个DN上最大可占用的网络带宽,单位MB。 -1或1~INT64_MAX-1 终止/降级 表2 默认异常规则列表 默认异常规则名称 说明 支持的异常操作 default_cpu_percent 当集群中有多个作业在运行,资源池CPU使用率达到90%时开始检测(若未配置资源池,则该值即为整个集群CPU使用率),此时如果单个作业的运行时间达到15min并且该作业CPU平均使用率达到50%以上时触发。 终止 default_spillsize 当集群中作业运行时,单个DN的下盘大小达到整个实例空间的1/10时触发。 终止 default_memsize 作业在单个DN上使用的内存大小达到默认集群所有DN最小可用内存的80%以上时触发。该规则仅9.1.0.100及以上集群版本支持。 终止
  • 新建异常规则 登录GaussDB(DWS)管理控制台。 在集群列表中单击指定集群名称,进入“基本信息”页面。 左导航栏单击“资源管理 ”,切换至“异常规则”页签。 单击“添加”按钮添加异常规则。 图2 添加异常规则 确认无误后,单击“确定”。 异常规则新建完不会立即生效,需要绑定到相关资源池。请参见1.关联异常规则。 8.2.1集群版本支持降级异常规则,所有异常规则都支持降级行为,降级后仅网络资源抢占降至低优先级:在正常查询无网络请求时,才会调度降级查询的网络请求。
  • 快照参数详情 表1 快照参数说明 参数名称 参数类型 参数描述 默认值 parallel-process 备份参数 指定Roach备份时每个节点的并发进程。 说明: 该参数支持8.2.0之前版本集群配置。 为本节点主DN个数 compression-type 备份参数 压缩算法类型: zlib LZ4 说明: 该参数支持8.2.0之前版本集群配置。 LZ4 compression-level 备份参数 压缩级别,取值范围为0~9: 0代表快速或无压缩。 9代表慢速或最大压缩。 说明: 该参数支持8.2.0之前版本集群配置。 6 buffer-size 备份参数 指定Roach上传介质的buffer大小,取值范围为256~16384,单位是MB。 256 buffer-block-size 备份参数 指定Roach读取数据文件的数据块大小,取值范围为5242880~268435456,单位是Byte。 67108864 cpu-cores 备份参数 Roach启动多线程并发时,可以使用的CPU核数。 为节点CPU逻辑核数总和的1/2 master-timeout 备份参数 指定Roach master节点和agent节点的通信超时时间,取值范围为600~3600,单位是s。 3600 max-backup-io-speed 备份参数 指定Roach备份时的IO流控,取值范围为0~2048,单位是MB/s。必须大于buffer-block-size,0表示不限制。 0 backup-mode 备份参数 全量备份的模式: 0 :一阶段的备份 1 :两阶段的备份 0 cbm-parse-mode 备份参数 增量备份的模式: 0 :一次扫描cbm(内存占用大,性能快) 1 :多次扫描cbm(内存占用稳定,性能差) 0 parallel-process 恢复参数 指定Roach备份时每个节点的并发进程,默认当前节点主DN数 + 1 1 cpu-cores 恢复参数 Roach启动多线程并发时,可以使用的CPU核数。 默认是1/2 cpu核数 logging-level 恢复参数 日志级别: FATAL(致命):导致系统停止工作的、无法恢复的故障。该级别为最严重级别。 ERROR(错误):重大错误。 WARNING(警告):异常情况。系统在该情况下可能会继续处理任务。 INFO(提示):日志记录过程中的提示性日志。 DEBUG(调试):用于调试的详细信息。 DEBUG2(调试2):最详细的日志信息,通常会过滤不显示。该级别严重程度最轻。 INFO
  • 监控面板 用户通过定义监控面板来配置相关的监控视图,监控面板与用户绑定,登录后可看到自定义的监控面板。 创建监控面板:用户可单击“创建监控面板”按钮定义自己的监控面板。 修改监控面板:用户可单击“修改”按钮修改监控面板的名称。 删除监控面板:用户可单击“删除”按钮删除监控面板,默认监控面板无法被删除。 共享监控面板:用户可单击“共享”按钮共享监控面板,被共享用户则可以看到该面板,但无法修改。 图1 监控面板
  • 添加监控视图 目前DMS提供集群、数据库、实例和节点四种维度的监控视图,用户可根据需求单击“添加监控视图”按钮添加。监控指标如下所示: 集群维度的监控指标:CPU使用率、内存使用率、磁盘使用率、磁盘I/O、网络I/O、状态、CN异常数量、只读、会话数量、活跃会话数、死锁数量、DN异常数量、DN实例CPU使用率、平均每秒事务数、平均每秒查询数、容量、模式容量、SQL堆积、查询数量、资源池、事务数量。 数据库维度的监控指标:活跃会话数、会话数量、插入行数、更新行数、删除行数、容量。 实例维度的监控指标:实例内存使用率、动态内存使用率。 节点维度的监控指标:CPU使用率、内存使用率、平均磁盘使用率、TCP协议栈重传率、磁盘I/O、网络I/O、磁盘总量、磁盘使用率、磁盘读速率、磁盘写速率、磁盘I/O等待时间、磁盘I/O服务时间、磁盘I/O使用率、网卡状态、接收包数、发送包数、接收丢包数、接收速率、发送速率、CPU使用情况、内存使用情况。 图2 添加监控视图 每个监控面板上最多可以添加20个监控视图,添加过多的视图会导致页面请求数据增多,所需的渲染时间增大,因此请合理的控制监控视图规模。 节点维度中最多可以勾选20个监控对象,该特性仅8.1.3.310及以上集群版本支持。
  • 创建KMS委托 操作场景 转加密集群前需要用户提前创建好授权给GaussDB(DWS)具有KMS Administrator权限的委托。 操作步骤 鼠标移动至页面右上角账号,单击“ 统一身份认证 ”,进入统一身份认证服务页面。 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”。 创建委托时委托类型选择“云服务”,云服务选择“DWS”。 单击“完成”后,在弹窗中单击“立即授权”对委托授予KMS服务的“KMS Administrator”权限。 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。
  • 相关GUC参数设置 SQL诊断指标采集的相关GUC参数如下,具体请参见《 数据仓库 服务开发指南》中“GUC参数”章节: enable_resource_track 取值范围:布尔型 默认值:on DMS期望值:on(仅供参考) 作用:控制是否开启资源实时监控功能。 仅开启该参数,但没有正确配置其他相关联GUC参数,将不能记录实时资源消耗情况。 resource_track_cost 取值范围:整型,-1~INT_MAX 默认值:0 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 取值范围:布尔型 默认值:on 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表的数据膨胀。
  • 支持的连接数规格 集群支持的连接数与集群节点规格有关: 表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)管理控制台上单击指定集群名称,切换至“参数修改”模块查看数据库参数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)
  • 使用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数据源名称为obs_server。用户创建和使用外表与非委托方式无差异。关于如何使用OBS数据源,具体请参见从OBS导入数据。 如下示例为某普通用户jim通过外表读取OBS上的数据。 参见以上步骤创建OBS数据源,名称为obs_server。 使用系统管理员dbadmin连接数据库,创建普通用户,并授权该普通用户使用OBS server和OBS外表权限。 其中{Password}替换为用户实际密码,obs_server替换成实际的OBS数据源名称。 1 2 3 CREATE USER jim PASSWORD '{Password}'; ALTER USER jim USEFT; GRANT USAGE ON FOREIGN SERVER obs_server TO jim; 使用普通用户jim连接数据库,建立OBS外表customer_address,不包含分区列。 以下命令中,obs_server替换为上面实际创建的OBS数据源名称。目录/user/obs/region_orc11_64stripe1/替换为实际数据文件存放的OBS目录,user表示用户的OBS桶名称。 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)
  • 创建OBS委托 操作场景 创建OBS数据源前需要用户提前创建好授权给GaussDB(DWS)具有OBS OperateAccess或OBS Administrator权限的委托。 操作步骤 鼠标移动至页面右上角账号,单击“统一身份认证”,进入统一身份认证服务页面。 在左侧导航栏单击“委托”,在委托页面右上角单击“创建委托”。 创建委托时委托类型选择“云服务”,云服务选择“DWS”。 单击“下一步”,对委托授予OBS服务的“OBS OperateAccess”或“OBS Administrator”权限。 单击“下一步”,选择授权资源范围为“所有资源”或需要访问的资源,然后确认无误后提交。
  • 约束与限制 资源发放时默认CN数量为3,用户可以根据实际发放节点数量调整CN数量,范围为2~20。 增删CN节点过程中不允许执行其他运维操作。 增加CN过程会消耗大量的CPU和IO资源,因此会对用户作业性能影响较大,用户应该尽可能在停止业务情况下或业务轻载的情况下执行增加CN操作。 增加CN节点时发生故障且回滚失败,可以重试增加CN操作。删除CN节点不支持回滚。 增加CN失败只能重试增加CN,其他运维操作不允许执行;删除CN失败,只能重试删除CN,其他运维操作不允许执行。 删除CN节点过程中如果有DDL操作,例如创建schema,function等,这些DDL可能会因为找不到被删除的CN节点而报错,业务重试即可成功。 删除CN节点过程中,如果只有一个节点异常,只能删除这个异常的节点;如果有两个及以上节点异常,不能删除CN节点,需要先处理恢复异常的节点后,才能删除CN节点。
  • 拓扑展示逻辑 节点拓扑整体示意图如上所示,其中按照图中标注的顺序解释如下 : 集群所绑定的ELB的公网IP地址(若绑定的ELB没有绑定弹性IP则显示为服务地址)。 集群所绑定的EIP的IP地址。 搜索分类,可以按照“IP地址”或“节点名称”进行精确搜索。 该框表示集群内所有的Ring环。 该框表示Ring环,一行为一个Ring环,该Ring环内的每个图标表示其内的一个节点,如果创建的集群Ring环大于等于3,可查看CN分散部署情况。 节点以图标的形式进行表示,图标右上角为该节点的类型,暂只显示“CN”和“DN”两种类型(如果节点中有CN进程,则图标为CN;如果节点内没有CN进程,则显示DN图标)。 当鼠标悬停在节点图标上时,展示节点详细信息,包括节点名称、节点状态、节点的不同IP地址、节点进程。
  • 拓扑图专业名词解释 表1 集群结构描述 名称 描述 说明 ELB 弹性负载均衡(Elastic Load Balance,简称ELB)是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。 用户使用客户端连接GaussDB(DWS)集群时,如果用户仅连接一个CN节点地址,通过该CN节点内网IP或弹性公网IP连接时,只能连接到固定的CN节点上,存在CN单点问题。如果通过内网 域名 或公网域名连接,域名解析服务会对每个客户端随机选择一个内网/公网IP地址,其解析机制并不能保证负载均衡,同样也存在CN单点问题。因此引入了弹性负载均衡服务(Elastic Load Balance,下称ELB)解决集群访问的单点问题。详情请参见为GaussDB(DWS)集群绑定和解绑弹性负载均衡。 EIP 弹性公网IP(Elastic IP,简称EIP)提供独立的公网IP资源,包括公网IP地址与公网出口带宽服务。 可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑。 Ring 安全环,集群内部的故障隔离域,主要作用是故障隔离,环内主机出现故障,故障不会扩散到环外。 如果环内某一单节点故障,所有DN节点在环内都有副本,数据不会丢失。 例如Server1发生故障后,DN1的备节点在Server2上,DN2的备节点在Server3上,DN3的备节点在Server3上,每个Server运行4个主DN,环内的各主机性能仍然保证均衡。 整个集群可以承受的主机故障数量范围为1~安全环的数量。 说明: 集群按照安全环节点数量的倍数进行扩容,也就是以环为最小单位进行扩容。 表2 节点IP描述 名称 描述 说明 Manage IP 数据仓库节点与管理面连接通信的IP。 主要用于管理面命令下发,以及节点状态、监控信息上报。 Traffic IP 数据仓库节点对外开放的IP。 该IP用于绑定EIP、ELB或直接通过VPC内部进行连接。 Internal IP 数据仓库集群内部数据通信IP。 - Internalmgnt IP 数据仓库集群内部管理命令在节点之间通信IP。 - 表3 节点进程描述 名称 描述 说明 CMS 集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 CMS为该模块中的CM Server。 CM由CM Agent、OM Monitor和CM Server组成。 CM Agent:负责监控所在主机上主备GTM、CN、主备DN的运行状态并将状态上报给CM Server。同时负责执行CM Server下发的仲裁指令。集群的每台主机上均有CM Agent进程。 OM Monitor:看护CM Agent的定时任务,其唯一的任务是在CM Agent停止的情况下将CM Agent重启。如果CM Agent重启不了,则整个主机不可用,需要人工干预。 说明: CM Agent重启的情况很少发生,如果出现可能是因为系统资源不够用导致无法启动新进程。 CM Server:根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。 GaussDB(DWS)提供了CM Server的主备实例方案,以保证集群管理系统本身的高可用性。正常情况下,CM Agent连接主CM Server,在主CM Server发生故障的情况下,备CM Server会主动升为主CM Server,避免出现CM Server单点故障。 GTM 全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳等全局唯一的信息。 整个集群只有一组GTM:主、备GTM各一个。 CN 协调节点(Coordinator)。负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。 集群中,CN有多个并且CN的角色是对等的(执行DML语句时连接到任何一个CN都可以得到一致的结果)。只需要在CN和应用程序之间增加一个负载均衡器,使得CN对应用是透明的。CN故障时,由负载均衡自动路由连接到另外一个CN。 当前分布式事务框架下无法避免CN之间的互连,为了减少GTM上线程过多导致负载过大,建议CN配置数目≤10个。 CCN 中心协调节点(Central Coordinator)。 GaussDB(DWS)通过CCN(Central Coordinator )负责集群内的资源全局负载控制,以实现自适应的动态负载管理。CM在第一次集群启动时,通过集群部署形式,选择编号最小的CN作为CCN。若CCN故障之后,由CM选择新的CCN进行替换。 DN 数据节点(Datanode)。负责存储业务数据(支持行存、列存、混合存储)、执行数据查询任务以及向CN返回执行结果。 在集群中,DN有多个。每个DN存储了一部分数据。如果DN无高可用方案,则故障时会导致该实例上的数据无法访问。
  • 实时查询 在“实时查询”这一栏您可以根据选择的指定时间段浏览集群中正在运行的所有查询信息,可单击列表右上方的设置按钮勾选需要在列表中展示的指标信息。指标包括: 查询ID、用户名称、应用名称、数据库名称、资源池、提交时间、阻塞时间(ms)、执行时间(ms)、最小cpu时间(ms)、最大cpu时间(ms)、CPU时间(ms)、CPU时间倾斜(%)、dn下盘信息、dn上下盘的最小数据量(mb)、dn上下盘的最大数据量(mb)、平均下盘量(MB)、dn间下盘倾斜率、查询语句、接入CN、客户端IP、快慢车道、查询状态、会话ID、排队状态、作业类型、任务名称、任务实例、TCP端口、是否等待、预估总执行时间(ms)、预估剩余时间(ms)、cgroup、dn最小内存峰值(mb)、dn最大内存峰值(mb)、内存使用平均值(mb)、各dn内存使用倾斜率、预估使用内存(mb)、dn最小执行时间(ms)、dn最大执行时间(ms)、dn平均执行时间(ms)、各dn的执行时间倾斜率、告警、dn每秒平均io峰值(列存是次/s,行存是万次/s)、dn间的io倾斜率、语句运行状态、语句属性。 其中查询状态包含以下状态: idle:后台正在等待新的客户端命令。 active:后台正在执行查询。 idle in transaction:后端在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后端在事务中,但事务中有语句执行失败。 fastpath function call:后端正在执行一个fast-path函数。 单击查询ID可以显示查询监控详情。但当查询ID为0时,表示此查询出现异常,不支持单击显示详情与终止查询功能。 若用户需要终止查询,单击“终止查询”按钮,确认是否终止查询。 新增细粒度权限控制功能,只有配置了操作权限的用户才能使用终止查询按钮。只读权限用户登录后终止查询按钮为灰色。 快慢车道根据执行计划中cost进行计算,优化器估算内存大于32MB进入慢车道,反之为快车道。
  • 前提条件 查询监控中用户查看数据前需要设置相关GUC参数,若没有设置的情况下,可能会导致查询监控中的实时查询或历史查询不可用。但如果设置也可能会导致集群性能下降,所以用户需权衡相关参数配置。相关GUC参数推荐配置如下,修改参数操作请参见修改GaussDB(DWS)集群GUC参数,具体参数说明请参见相关GUC参数设置。 表1 GUC参数推荐配置 GUC参数 CN建议设置值 DN建议设置值 max_active_statements 10 10 enable_resource_track on on resource_track_level query query resource_track_cost 0 0 resource_track_duration 10 10 enable_resource_record on on session_statistics_memory 1000MB 1000MB
  • 实时会话 在“实时会话”这一栏您可以浏览到正在运行中的所有会话实时信息,可单击列表右上方的设置按钮勾选需要在列表中展示的指标信息。指标包括: 会话ID、用户名称、会话用时、应用名称、QueryBand、客户端IP、接入CN、会话状态、开始时间、锁模式、锁持有状态、锁定对象、查询SQL、锁等待、当前查询时长、当前查询开始时间。 其中会话状态包含以下状态: idle:后台正在等待新的客户端命令。 active:后台正在执行查询。 idle in transaction:后端在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后端在事务中,但事务中有语句执行失败。 fastpath function call:后端正在执行一个fast-path函数。 单击会话ID可以显示当前会话上的查询,详情参见实时查询监控详情。 用户若需要终止会话,单击“终止会话”按钮,确认是否终止会话。 用户若需要将会话状态为“idle”的空闲会话全部终止,单击“一键清理空闲会话”按钮,确认是否终止当前集群的全部空闲会话。 新增细粒度权限控制功能,只有配置了操作权限的用户才能使用终止会话按钮。只读权限用户登录后终止会话按钮为灰色。
  • 实例管理概述 数据迁移功能采用独立集群的方式为用户提供安全可靠的数据迁移服务,各集群之间相互隔离,不可互相访问。其中实例管理通过购买GDS-Kafka实例帮助用户创建、管理集群。GDS-Kafka的工作方式是从Kafka中消耗数据并缓存,当达到设置好的时间或数据量之后,通过COPY写入GaussDB(DWS)临时表,再从临时表进行插入或更新操作。 Kafka的消息生产端必须按照一定的格式要求进行数据生产,其中消息格式由“kafka.source.event.type”配置参数指定。当前支持的消息格式详见GDS-Kafka支持的消息格式。 GDS-Kafka支持直接insert(仅限无主键表)和merge覆盖更新两种入库模式,您可以根据DWS目标表的类型进行灵活配置,直接insert模式由于不涉及更新在性能上要更优一些。其中入库模式由“app.insert.directly”配置参数和有无主键共同决定,详见GDS-Kafka入库模式。 GDS-kafka只支持目标表表名和字段全小写。 GDS-Kafka的删除是根据扩展字段中的pos进行历史删除,如果入库数据中有delete操作,则必须使用扩展字段。
  • 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操作。
  • 开启敏感操作保护 操作保护默认关闭,您可以参考以下步骤开启操作保护。 登录GaussDB(DWS)管理控制台。 在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中单击“安全设置”。 在“安全设置”页面中,切换至“敏感操作”页签,单击“操作保护”区域的“立即启用”。 图1 敏感操作 在“操作保护设置”页面中,选择“开启”,单击“确定”后,开启操作保护。 用户如果进行敏感操作,将进入“操作保护”页面,选择认证方式,包括邮箱、手机和虚拟MFA三种认证方式。 如果用户只绑定了手机,则认证方式只能选择手机。 如果用户只绑定了邮箱,则认证方式只能选择邮件。 如果用户未绑定邮箱、手机和虚拟MFA,进行敏感操作时,系统将提示用户绑定邮箱、手机或虚拟MFA。 如需修改验证手机号、邮件地址,请在账户中心修改。详情请参见IAM基本信息。 当您开启操作保护,在进行敏感操作时,系统会先进行敏感操作保护。 例如在您进行删除集群操作时,会弹出敏感操作保护验证框,需要选择一种验证方式进行验证,避免误操作带来的风险和损失。
共100000条