华为云用户手册

  • 并行解码 以下配置选项仅限流式解码设置。 decode-style: 当enable-ddl-json-format参数值为true时,DDL的格式由enable-ddl-json-format控制,decode-style仅指定DML语句的解码格式;当enable-ddl-json-format参数值为false时,decode-style指定DML和DDL语句的解码格式。 取值范围:char型的字符'j'、't'或'b',分别代表json格式、text格式及二进制格式。 默认值: 没有指定decode-style: 针对复制槽插件类型为mppdb_decoding、sql_decoding,decode-style默认值为'b'即二进制格式解码。针对复制槽插件类型为parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding,decode-style默认值分别为'b'、'j'、't',解码格式分别为二进制格式、json格式、text格式。 指定decode-style: 按照指定的decode-style进行解码。 对于json格式和text格式解码,开启批量发送选项时的解码结果中,每条解码语句的前4字节组成的uint32代表该条语句总字节数(不包含该uint32类型占用的4字节,0代表本批次解码结束),8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 例如:以mppdb_decoding插件为例,当decode-style为b类型时,以二进制格式解码,结果如下: current_lsn: 0/CFE5C80 BEGIN CS N: 2357 first_lsn: 0/CFE5C80 current_lsn: 0/CFE5D40 INSERT INTO public.test1 new_tuple: {a[typid = 23]: "1", b[typid = 23]: "2"} current_lsn: 0/CFE5E68 COMMIT xid: 78108 当decode-style为j类型时,以json格式解码,结果如下: BEGIN CSN: 2358 first_lsn: 0/CFE6220 {"table_name":"public.test1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]} COMMIT XID: 78109 当decode-style为t类型时,以text格式解码,结果如下: BEGIN CSN: 2359 first_lsn: 0/CFE64D0 table public test1 INSERT: a[integer]:3 b[integer]:4 COMMIT XID: 78110 二进制格式编码规则如下所示: 前4字节代表接下来到语句级别分隔符字母P(不含)或者该批次结束符F(不含)的解码结果的总字节数,该值如果为0代表本批次解码结束。 接下来8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 接下来1字节的字母有5种B/C/I/U/D,分别代表begin/commit/insert/update/delete。 第3步字母为B时: 接下来的8字节uint64代表CSN。 接下来的8字节uint64代表first_lsn。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次解码完成。 第3步字母为C时: 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 第3步字母为I/U/D时: 接下来的2字节uint16代表schema名的长度。 按照上述长度读取schema名。 接下来的2字节uint16代表table名的长度。 按照上述长度读取table名。 【该部分为可选项】接下来1字节字母如果为N代表为新元组,如果为O代表为旧元组,这里先发送新元组。 接下来的2字节uint16代表该元组需要解码的列数,记为attrnum。 以下流程重复attrnum次。 接下来2字节uint16代表列名的长度。 按照上述长度读取列名。 接下来4字节uint32代表当前列类型的OID。 接下来4字节uint32代表当前列值(以字符串格式存储)的长度,如果为0xFFFFFFFF则表示NULL,如果为0则表示长度为0的字符串。 按照上述长度读取列值。 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 sending-batch: 指定是否批量发送。 取值范围:0或1的int型,默认值为0。 0:设为0时,表示逐条发送解码结果。 1:设为1时,表示解码结果累积到达1MB则批量发送解码结果。 开启批量发送的场景中,当解码格式为'j'或't'时,在原来的每条解码语句之前会附加一个uint32类型,表示本条解码结果长度(长度不包含当前的uint32类型),以及一个uint64类型,表示当前解码结果对应的lsn。 在CSN序解码(即output-order设置为1)场景下,批量发送仅限于单个事务内(即如果一个事务有多条较小的语句会采用批量发送),即不会使用批量发送功能在同一批次里发送多个事务,且BEGIN和COMMIT语句不会批量发送。 parallel-queue-size: 指定并行逻辑解码线程间进行交互的队列长度。 取值范围:2~1024的int型,且必须为2的整数幂,默认值为128。 队列长度和解码过程的内存使用量正相关。 logical-reader-bind-cpu: reader线程绑定cpu核号的参数。 取值范围:-1~65535,不使用该参数则为不绑核。 默认-1,为不绑核。-1不可手动设置,核号应确保在机器总逻辑核数以内,不然会返回报错。多个线程绑定同一个核会导致该核负担加重,从而导致性能下降。 logical-decoder-bind-cpu-index: 逻辑解码线程绑定cpu核号的参数。 取值范围:-1~65535,不使用该参数则为不绑核。 默认-1,不绑核。-1不可手动设置,核号应确保在机器总逻辑核数以内且小于[cpu核数 - 并行逻辑解码数],不然会返回报错。 从给定的核号参数开始,新拉起的线程会依次递增加一。 多个线程绑定同一个核会导致该核负担加重,从而导致性能下降。 GaussDB 在进行逻辑解码和日志回放时,会占用大量的CPU资源,相关线程如Walwriter、WalSender、WALreceiver、pageredo就处于性能瓶颈,如果能将这些线程绑定在固定的CPU上运行,可以减少因操作系统调度线程频繁切换CPU,导致缓存未命中带来的性能开销,从而提高流程处理速度,如用户场景有性能需求,可根据以下的绑核样例进行配置优化。 参数样例: walwriter_cpu_bind=1 walwriteraux_bind_cpu=2 wal_receiver_bind_cpu=4 wal_rec_writer_bind_cpu=5 wal_sender_bind_cpu_attr='cpuorderbind:7-14' redo_bind_cpu_attr='cpuorderbind:16-19' logical-reader-bind-cpu=20 logical-decoder-bind-cpu-index=21 样例中1.2.3.4.5.6通过GUC工具设置,使用指令如: gs_guc set -Z datanode -N all -I all -c “walwriter_cpu_bind=1” 样例中7.8通过JDBC客户端发起解码请求时添加。 样例中如walwriter_cpu_bind=1是限定该线程在1号CPU上运行。 cpuorderbind:7-14意为拉起的每个线程依次绑定7号到14号CPU,如果范围内的CPU用完,则新拉起的线程不参与绑核。 logical-decoder-bind-cpu-index意为拉起的线程从21号CPU依次开始绑定,后续拉起的线程分别绑定21、22、23,依次类推。 绑核的原则是一个线程占用一个CPU。 不恰当的绑核,例如将多个线程绑定在一个CPU上很有可能带来性能劣化。 可以通过lscpu指令查看“CPU(s):”得知自己环境的CPU逻辑核心数。 CPU逻辑核心数低于36则不建议使用此套绑核策略,此时建议使用默认配置(不进行参数设置)。 big-transaction-limit: 指定并行逻辑解码大事务的内存限额。 取值范围:1~200的int型,默认值为10,单位MB。 用于内存资源管控时判定大事务,用于优先落盘。
  • 通用选项(串行解码和并行解码均可配置,但可能无效,请参考相关选项详细说明) include-xids: 解码出的data列是否包含xid信息。 取值范围:boolean型,默认值为true。 false:设为false时,解码出的data列不包含xid信息。 true:设为true时,解码出的data列包含xid信息。 skip-empty-xacts: 解码时是否忽略空事务信息。 取值范围:boolean型,默认值为false。 false:设为false时,解码时不忽略空事务信息。 true:设为true时,解码时会忽略空事务信息。 include-timestamp: 解码信息是否包含commit时间戳。 取值范围:boolean型,针对并行解码场景默认值为false,针对SQL函数解码和串行解码场景默认值为true。 false:设为false时,解码信息不包含commit时间戳。 true:设为true时,解码信息包含commit时间戳。 only-local: 是否仅解码本地日志。 取值范围:boolean型,默认值为true。 false:设为false时,解码非本地日志和本地日志。 true:设为true时,仅解码本地日志。 white-table-list: 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例如: select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2,*.t3,my_schema.*'); max-txn-in-memory: 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘,并行解码中该参数已废弃使用,不生效。 串行解码-取值范围:0~100的整型,默认值为0,即不开启此种管控。 并行解码-取值范围:0~max_process_memory总量的25%,默认值为max_process_memory/4/1024,其中1024为kB到MB的单位转换,0表示不开启此条内存管控项。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 串行解码-取值范围:0~100的整型,默认值为0,即不开启此种管控。 并行解码-取值范围:1~max_process_memory总量的50%,默认值为1与max_process_memory/1048576*10%较大值,其中1048576为KB到GB的单位转换。 desc-memory-limit 内存管控参数,单位为MB,逻辑解码任务维护的表元信息总内存大于该值时,触发淘汰机制清理部分表元信息。 取值范围:10~1024的整型,默认值为100。 include-user: 事务的BEGIN逻辑日志是否输出事务的用户名。事务的用户名特指授权用户——执行事务对应会话的登录用户,它在事务的整个执行过程中不会发生变化。 取值范围:boolean型,默认值为false。 false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名。 true:设为true时,事务的BEGIN逻辑日志输出事务的用户名。 exclude-userids: 黑名单用户的OID参数。 取值范围:字符串类型,指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。 exclude-users: 黑名单用户的名称列表。 取值范围:字符串类型,指定黑名单用户名,通过','分隔,不校验用户名是否存在。 dynamic-resolution: 是否动态解析黑名单用户名。如果解码某条X LOG ,且XLOG写入时,用户未创建,则认为用户不存在。 取值范围:boolean型,默认值为true。 false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码;当用户存在,黑名单功能正常过滤用户的操作。 true:设为true时,当解码观测到黑名单exclude-users中用户不存在时不报错,并正常解码;当用户存在,黑名单功能正常过滤用户的操作。 standby-connection: 仅流式解码设置,是否仅限制备机解码。 取值范围:boolean型,默认值为false。 true:设为true时,仅允许连接备机解码,连接主机解码时会报错退出。 false:设为false时,不做限制,允许连接主机或备机解码。 如果主机资源使用率较大,且业务对增量数据同步的实时性不敏感,建议进行备机解码;如果业务对增量数据同步的实时性要求高,并且主机业务压力较小,建议使用主机解码。 sender-timeout: 仅流式解码设置,内核与客户端的心跳超时阈值。如果该时间段内没有收到客户端任何消息,逻辑解码将主动停止,并断开和客户端的连接。单位为毫秒(ms)。 取值范围:0~2147483647的int型,默认值取决于GUC参数logical_sender_timeout的配置值。配置为0,表示逻辑解码不会主动断开和客户端的连接,如果设置过小,例如1ms,则可能存在解码任务中断风险。 change-log-max-len: 逻辑日志缓存长度上限参数,单位为字节,仅并行解码有效,串行解码及SQL函数解码无效。如果单条解码结果长度超过上限,则会销毁重新分配大小为1024字节的内存并缓存。过长会增加内存占用,过短会频繁触发内存申请和释放的操作,不建议设置成小于1024的值。 取值范围:1~65535,默认值为4096。 max-decode-to-sender-cache-num: 并行解码日志的缓存条数阈值,仅并行解码有效,串行解码及SQL函数解码无效。缓存中的日志条数未超过这个阈值时,使用完毕的解码日志将置入缓存,否则直接释放。 取值范围:1~65535,默认值为4096。 enable-heartbeat: 仅流式解码设置,代表是否输出心跳日志。 取值范围:boolean型,默认值为false。 true:设为true时,输出心跳日志。 false:设为false时,不输出心跳日志。 若开启心跳日志选项,此处说明并行解码场景心跳日志如何解析:二进制格式首先是字符'h'表示消息是心跳日志,之后是心跳日志内容,分别是8字节uint64代表LSN,表示发送心跳逻辑日志时读取的WAL日志结束位置;8字节uint64代表LSN,表示发送心跳逻辑日志时刻已经落盘的WAL日志的位置;8字节int64代表时间戳(从1970年1月1日开始),表示最新解码到的事务日志或检查点日志的产生时间戳。关于消息结束符:如果是二进制格式则为字符'F',如果格式为text或者json且为批量发送则结束符为0,否则没有结束符。具体解析见下图: parallel-decode-num: 仅流式解码设置有效,并行解码的Decoder线程数量;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:1~20的int型,取1表示按照原有的串行逻辑进行解码,取其余值即为开启并行解码,默认值为1。 当parallel-decode-num不配置(即为默认值1)或显式配置为1时,下述“并行解码”中的选项不可配置。 output-order: 仅流式解码设置有效,代表是否使用CSN顺序输出解码结果;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:0或1的int型,默认值为0。 0:设为0时,解码结果按照事务的COMMIT LSN排序,当且仅当解码复制槽的confirmed_csn列值为0(即不显示)时可使用该方式,否则报错。 1:设为1时,解码结果按照事务的CSN排序,当且仅当解码复制槽的confirmed_csn列值为非零时可使用该方式,否则报错。 auto-advance: 仅流式解码设置有效,代表是否允许自主推进逻辑复制槽。 取值范围:boolean型,默认值为false。 true:设为true时,在已发送日志都被确认推进且没有待发送事务时,推进逻辑复制槽到当前解码位置。 false:设为false时,完全交由复制业务调用日志确认接口推进逻辑复制槽。 enable-ddl-decoding: 逻辑解码控制参数,用于控制是否开启DDL语句的逻辑解码。 取值范围:boolean型,默认值为false。 true:值为true时,开启DDL语句的逻辑解码。 false:值为false时,不开启DDL语句的逻辑解码。 enable-ddl-json-format: 逻辑解码控制参数,用于控制DDL的反解析流程以及输出形式。 取值范围:boolean型,默认值为false。 true:值为true时,传送JSON格式的DDL反解析结果。 false:设为false时,传送decode-style指定格式的DDL反解析结果。 skip-generated-columns: 逻辑解码控制参数,用于跳过存储生成列的输出。对UPDATE和DELETE的旧元组无效,相应元组始终会输出存储生成列。 取值范围:boolean型,默认值为false/off。 true/on:值为true/on时,不输出存储生成列的解码结果。 false/off:设为false/off时,输出存储生成列的解码结果。 虚拟生成列不受此参数控制,DML的解码结果始终不会输出虚拟生成列。 restart-lsn: 逻辑解码控制参数,用于指定解码开始点,逻辑解码会从restart-lsn该点往后找到一个一致性点(consistency lsn),然后从consistency lsn点开始解码并输出数据。 取值范围:字符串类型,格式类型为"XXXXXXXX/XXXXXXXX",其中"0/0"为无效值。 1、推荐设置复制选项restart-lsn时,不设置复制参数startposition。 2、当复制选项restart-lsn和复制参数startposition同时使用时,restart-lsn必须小于startposition,且根据restart-lsn查找到的一致性点的confirm_flush也需要小于等于startposition,防止startposition点之后的事务漏发。 3、当设置复制选项restart-lsn,不设置复制参数startposition时,根据restart-lsn查找到的一致性点进行解码并输出数据,若设置复制参数startposition时,根据restart-lsn查找到的一致性点进行解码,以startposition位置向客户端发送数据。 4、仅多版本数据字典类型的复制槽才支持该选项。
  • 特性约束 不支持系统表、内存表、全局临时表、本地临时表和序列表,不支持Ustore段页式表,不支持unlogged表,不支持压缩toast数据。 支持用户为普通表、分区、二级分区设置ILM策略。 支持普通表、分区、二级分区的Astore/Ustore用户表和透明加密表。 特性仅在A兼容模式、PG模式以及B兼容模式下有效。 Ustore不支持编解码,压缩率低于Astore。 由于当前版本新增了部分解压特性,会导致部分极小的表在判断压缩收益时不通过,从而不进行压缩。但此前没有部分解压的版本可以压缩。例如:单表单字段int1类型的数据从当前版本开始无法进行压缩。 父主题: 数据生命周期管理-OLTP表压缩
  • 执行加密表的预编译SQL语句 // 调用Connection的prepareStatement方法创建预编译语句对象。 PreparedStatement pstmt = con.prepareStatement("INSERT INTO creditcard_info VALUES (?, ?, ?);"); // 调用PreparedStatement的setShort设置参数。 pstmt.setInt(1, 2); pstmt.setString(2, "joy"); pstmt.setString(3, "6219985678349800033"); // 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。 int rowcount = pstmt.executeUpdate(); // 调用PreparedStatement的close方法关闭预编译语句对象。 pstmt.close();
  • 执行密态等值密文解密 数据库连接接口PgConnection类型新增解密接口,可以对全密态数据库的密态等值密文进行解密。解密后返回其明文值,通过schema.table.column找到密文对应的加密列并返回其原始数据类型。 表1 新增com.huawei.gaussdb.jdbc.jdbc.PgConnection函数接口 方法名 返回值类型 支持JDBC 4 decryptData(String ciphertext, Integer len, String schema, String table, String column) ClientLogicDecryptResult Yes 参数说明: ciphertext 需要解密的密文。 len 密文长度。当取值小于实际密文长度时,解密失败。 schema 加密列所属schema名称。 table 加密列所属table名称。 column 加密列所属column名称。 下列场景可以解密成功,但不推荐: 密文长度入参比实际密文长。 schema.table.column指向其他加密列,此时将返回被指向的加密列的原始数据类型。 表2 新增com.huawei.gaussdb.jdbc.jdbc.clientlogic.ClientLogicDecryptResult函数接口 方法名 返回值类型 描述 支持JDBC4 isFailed() Boolean 解密是否失败,若失败返回True,否则返回False。 Yes getErrMsg() String 获取错误信息。 Yes getPlaintext() String 获取解密后的明文。 Yes getPlaintextSize() Integer 获取解密后的明文长度。 Yes getOriginalType() String 获取加密列的原始数据类型。 Yes // 通过非密态连接、逻辑解码等其他方式获得密文后,可使用该接口对密文进行解密 import com.huawei.gaussdb.jdbc.jdbc.PgConnection; import com.huawei.gaussdb.jdbc.jdbc.clientlogic.ClientLogicDecryptResult; // conn为密态连接 // 调用密态PgConnection的decryptData方法对密文进行解密,通过列名称定位到该密文的所属加密列,并返回其原始数据类型 ClientLogicDecryptResult decrypt_res = null; decrypt_res = ((PgConnection)conn).decryptData(ciphertext, ciphertext.length(), schemaname_str, tablename_str, colname_str); // 检查返回结果类解密成功与否,失败可获取报错信息,成功可获得明文及长度和原始数据类型 if (decrypt_res.isFailed()) { System.out.println(String.format("%s\n", decrypt_res.getErrMsg())); } else { System.out.println(String.format("decrypted plaintext: %s size: %d type: %s\n", decrypt_res.getPlaintext(), decrypt_res.getPlaintextSize(), decrypt_res.getOriginalType())); }
  • 调用isValid方法刷新缓存示例 // 创建连接conn1 Connection conn1 = DriverManager.getConnection("url","user","password"); // 在另外一个连接conn2中创建客户端主密钥 ... // conn1通过调用isValid刷新缓存,刷新conn1密钥缓存 try { if (!conn1.isValid(60)) { System.out.println("isValid Failed for connection 1"); } } catch (SQLException e) { e.printStackTrace(); return null; }
  • SQL函数解码性能 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s。 单次解码数据量再增大,解码性能无明显提升。 如果采用pg_logical_slot_peek_changes + pg_replication_slot_advance方式,解码性能相比采用pg_logical_slot_get_changes时要下降30%~50%。 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_get_area_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s。 单次解码数据量再增大,解码性能无明显提升。 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_binary_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能2MB/s~3MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能2MB/s~3MB/s。 单次解码数据量再增大,解码性能无明显提升。 如果采用pg_logical_slot_peek_binary_changes + pg_replication_slot_advance方式,解码性能相比采用pg_logical_slot_get_binary_changes时要下降30%~50%。
  • 分布式强一致解码 logical-receiver-num: 仅流式解码设置有效,分布式解码启动的logical_receiver数量,系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:1~20的int型,默认值为1。当该值被设置为比当前集群分片数更大时,将被修改为分片数。 slice-id: 仅连接DN解码时设置,指定当前DN所在的分片号,用于复制表解码。 取值范围:0~8192的int型,默认值为-1,即不指定分片号,但在解码到复制表时会报错。 该配置选项在尝试连接DN使用CSN序逻辑复制槽(confirmed_csn为非0值的复制槽)进行解码时使用,用来表示自己的分片号(即第几个分片,第一个分片则输入0),如果不设置该参数(即使用默认值-1)在解码到复制表时将会报错。此参数用于使用连接CN的分布式解码时,CN从DN收集解码结果时使用,CN只会收集指定DN分片的复制表解码结果。不建议在此场景下手动连接DN解码。 start-position: 仅连接DN设置,主要功能为过滤掉小于指定CSN对应的事务,以及针对指定的CSN对应的事务,过滤掉小于指定LSN的日志,且指定CSN对应事务的BEGIN日志一定被过滤掉。 取值范围:字符串类型,可以解析为以'/'分隔,左右两侧分别为代表CSN和LSN的两个uint64类型。 该配置选项用于CN解码时,CN建立与DN的连接后发送解码请求时使用此配置选项过滤可能已经被接收过的日志。不建议在此场景下手动连接DN解码使用此参数。
  • 并行解码 以下配置选项仅限流式解码设置。 decode-style: 当enable-ddl-json-format参数值为true时,DDL的格式由enable-ddl-json-format控制,decode-style仅指定DML语句的解码格式;当enable-ddl-json-format参数值为false时,decode-style指定DML和DDL语句的解码格式。 取值范围:char型的字符'j'、't'或'b',分别代表json格式、text格式及二进制格式。 默认值: 没有指定decode-style: 针对复制槽插件类型为mppdb_decoding、sql_decoding,decode-style默认值为'b'即二进制格式解码。针对复制槽插件类型为parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding,decode-style默认值分别为'b'、'j'、't',解码格式分别为二进制格式、json格式、text格式。 指定decode-style: 按照指定的decode-style进行解码。 对于json格式和text格式解码,开启批量发送选项时的解码结果中,每条解码语句的前4字节组成的uint32代表该条语句总字节数(不包含该uint32类型占用的4字节,0代表本批次解码结束),8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 例如:以mppdb_decoding插件为例,当decode-style为b类型时,以二进制格式解码,结果如下: current_lsn: 0/CFE5C80 BEGIN CSN: 2357 first_lsn: 0/CFE5C80 current_lsn: 0/CFE5D40 INSERT INTO public.test1 new_tuple: {a[typid = 23]: "1", b[typid = 23]: "2"} current_lsn: 0/CFE5E68 COMMIT xid: 78108 当decode-style为j类型时,以json格式解码,结果如下: BEGIN CSN: 2358 first_lsn: 0/CFE6220 {"table_name":"public.test1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]} COMMIT XID: 78109 当decode-style为t类型时,以text格式解码,结果如下: BEGIN CSN: 2359 first_lsn: 0/CFE64D0 table public test1 INSERT: a[integer]:3 b[integer]:4 COMMIT XID: 78110 二进制格式编码规则如下所示: 前4字节代表接下来到语句级别分隔符字母P(不含)或者该批次结束符F(不含)的解码结果的总字节数,该值如果为0代表本批次解码结束。 接下来8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 接下来1字节的字母有5种B/C/I/U/D,分别代表begin/commit/insert/update/delete。 第3步字母为B时: 接下来的8字节uint64代表CSN。 接下来的8字节uint64代表first_lsn。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次解码完成。 第3步字母为C时: 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 第3步字母为I/U/D时: 接下来的2字节uint16代表schema名的长度。 按照上述长度读取schema名。 接下来的2字节uint16代表table名的长度。 按照上述长度读取table名。 【该部分为可选项】接下来1字节字母如果为N代表为新元组,如果为O代表为旧元组,这里先发送新元组。 接下来的2字节uint16代表该元组需要解码的列数,记为attrnum。 以下流程重复attrnum次。 接下来2字节uint16代表列名的长度。 按照上述长度读取列名。 接下来4字节uint32代表当前列类型的OID。 接下来4字节uint32代表当前列值(以字符串格式存储)的长度,如果为0xFFFFFFFF则表示NULL,如果为0则表示长度为0的字符串。 按照上述长度读取列值。 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 sending-batch: 指定是否批量发送。 取值范围:0或1的int型,默认值为0。 0:设为0时,表示逐条发送解码结果。 1:设为1时,表示解码结果累积到达1MB则批量发送解码结果。 开启批量发送的场景中,当解码格式为'j'或't'时,在原来的每条解码语句之前会附加一个uint32类型,表示本条解码结果长度(长度不包含当前的uint32类型),以及一个uint64类型,表示当前解码结果对应的lsn。 在CSN序解码(即output-order设置为1)场景下,批量发送仅限于单个事务内(即如果一个事务有多条较小的语句会采用批量发送),即不会使用批量发送功能在同一批次里发送多个事务,且BEGIN和COMMIT语句不会批量发送。 parallel-queue-size: 指定并行逻辑解码线程间进行交互的队列长度。 取值范围:2~1024的int型,且必须为2的整数幂,默认值为128。 队列长度和解码过程的内存使用量正相关。
  • 串行解码 force-binary: 是否以二进制格式输出解码结果,针对不同场景呈现不同行为。 针对系统函数pg_logical_slot_get_binary_changes和pg_logical_slot_peek_binary_changes: 取值范围:boolean型,默认值为false。此值无实际意义,均以二进制格式输出解码结果。 针对系统函数pg_logical_slot_get_changes、pg_logical_slot_peek_changes和pg_logical_get_area_changes: 取值范围:仅取false值的boolean型。以文本格式输出解码结果。 针对流式解码(仅连接DN时支持): 取值范围:boolean型,默认值为false。此值无实际意义,均以文本格式输出解码结果。
  • 通用选项(串行解码和并行解码均可配置,但可能无效,请参考相关选项详细说明) include-xids: 解码出的data列是否包含xid信息。 取值范围:boolean型,默认值为true。 false:设为false时,解码出的data列不包含xid信息。 true:设为true时,解码出的data列包含xid信息。 skip-empty-xacts: 解码时是否忽略空事务信息。 取值范围:boolean型,默认值为false。 false:设为false时,解码时不忽略空事务信息。 true:设为true时,解码时会忽略空事务信息。 include-timestamp: 解码信息是否包含commit时间戳。 取值范围:boolean型,针对并行解码场景默认值为false,针对SQL函数解码和串行解码场景默认值为true。 false:设为false时,解码信息不包含commit时间戳。 true:设为true时,解码信息包含commit时间戳。 only-local: 是否仅解码本地日志。 取值范围:boolean型,默认值为true。 false:设为false时,解码非本地日志和本地日志。 true:设为true时,仅解码本地日志。 white-table-list: 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例如: select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2,*.t3,my_schema.*'); max-txn-in-memory: 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。 串行解码-取值范围:0~100的整型,默认值为0,即不开启此种管控。 并行解码-取值范围:0~max_process_memory总量的25%,默认值为max_process_memory/4/1024,其中1024为kB到MB的单位转换,0表示不开启此条内存管控项。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 串行解码-取值范围:0~100的整型,默认值为0,即不开启此种管控。 并行解码-取值范围:0~max_process_memory总量的50%,默认值为max_process_memory/2/1048576,其中1048576为kB到GB的单位转换,0表示不开启此条内存管控项。 include-user: 事务的BEGIN逻辑日志是否输出事务的用户名。事务的用户名特指授权用户——执行事务对应会话的登录用户,它在事务的整个执行过程中不会发生变化。 取值范围:boolean型,默认值为false。 false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名。 true:设为true时,事务的BEGIN逻辑日志输出事务的用户名。 exclude-userids: 黑名单用户的OID参数,该参数只支持直连DN解码任务配置,分布式CN强一致解码不支持该参数。 取值范围:字符串类型,指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。 exclude-users: 黑名单用户的名称列表。 取值范围:字符串类型,指定黑名单用户名,通过','分隔,不校验用户名是否存在。 dynamic-resolution: 是否动态解析黑名单用户名。如果解码某条XLOG,且XLOG写入时,用户未创建,则认为用户不存在。 取值范围:boolean型,默认值为true。 false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码;当用户存在,黑名单功能正常过滤用户的操作。 true:设为true时,当解码观测到黑名单exclude-users中用户不存在时不报错,并正常解码;当用户存在,黑名单功能正常过滤用户的操作。 standby-connection: 仅流式解码设置,是否仅限制备机解码,因为CN没有备机,所以该参数在仅连接DN时支持。 取值范围:boolean型,默认值为false。 true:设为true时,仅允许连接备机解码,连接主机解码时会报错退出。 false:设为false时,不做限制,允许连接主机或备机解码。 如果主机资源使用率较大且业务对增量数据同步的实时性不敏感,建议进行备机解码;如果业务对增量数据同步的实时性要求高并且主机业务压力较小,建议使用主机解码。 sender-timeout: 仅流式解码设置,内核与客户端的心跳超时阈值。如果该时间段内没有收到客户端任何消息,逻辑解码将主动停止,并断开和客户端的连接。单位为毫秒(ms)。 取值范围:0~2147483647的int型,默认值取决于GUC参数logical_sender_timeout的配置值。设置为0,表示逻辑解码不会主动断开与客户端的连接,如果设置过小,例如1ms,则可能存在解码任务中断风险。 change-log-max-len: 逻辑日志缓存长度上限参数,单位为字节。仅连接DN的并行解码有效,分布式强一致解码、串行解码及SQL函数解码无效。如果单条解码结果长度超过上限,则会销毁重新分配大小为1024字节的内存并缓存。过长会增加内存占用,过短会频繁触发内存申请和释放的操作,不建议设置成小于1024的值。 取值范围:1~65535,默认值为4096。 max-decode-to-sender-cache-num: 并行解码日志的缓存条数阈值。仅连接DN的并行解码有效,分布式强一致解码、串行解码及SQL函数解码无效。缓存中的日志条数未超过这个阈值时,使用完毕的解码日志将置入缓存,否则直接释放。 取值范围:1~65535,默认值为4096。 enable-heartbeat: 仅流式解码时设置,代表是否输出心跳日志。 取值范围:boolean型,默认值为false。 true:设为true时,输出心跳日志。 false:设为false时,不输出心跳日志。 若开启心跳日志选项,此处说明并行解码场景心跳日志如何解析:二进制格式首先是字符'h'表示消息是心跳日志,之后是心跳日志内容,分别是8字节uint64,直连DN解码场景代表LSN,表示发送心跳逻辑日志时读取的WAL日志结束位置,而在分布式强一致解码场景为CSN,表示发送心跳逻辑日志时已发送的解码日志事务CSN;8字节uint64,直连DN解码场景代表LSN,表示发送心跳逻辑日志时刻已经落盘的WAL日志的位置,而在分布式强一致解码场景为CSN,表示集群下一个提交事务将获得的CSN;8字节int64代表时间戳(从1970年1月1日开始),表示最新解码到的事务日志或检查点日志的产生时间戳。关于消息结束符:如果是二进制格式则为字符'F',如果格式为text或者json且为批量发送则结束符为0,否则没有结束符。消息内容采用大端字节序进行数据传输。具体格式见下图(考虑到前向兼容性,相关部分仍保留着LSN的命名方式,实际含义依具体场景而定): parallel-decode-num: 仅流式解码设置有效,并行解码的Decoder线程数量;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:1~20的int型,取1表示按照原有的串行逻辑进行解码,取其余值即为开启并行解码,默认值为1。 当parallel-decode-num不配置(即为默认值1)或显式配置为1时,下述“并行解码”中的选项不可配置。 output-order: 仅流式解码设置有效,代表是否使用CSN顺序输出解码结果;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:0或1的int型,默认值为0。 0:设为0时,解码结果按照事务的COMMIT LSN排序,当且仅当解码复制槽的confirmed_csn列值为0(即不显示)时可使用该方式,否则报错。 1:设为1时,解码结果按照事务的CSN排序,当且仅当解码复制槽的confirmed_csn列值为非零时可使用该方式,否则报错。 当output-order不配置(即为默认值0,按照COMMIT LSN排序)或显式配置为0时,下述“分布式强一致解码”中的选项不可配置。 在流式解码场景,DN收到来自CN的逻辑解码连接时,output-order选项失效,默认采用CSN序解码。 auto-advance: 仅流式解码设置有效,代表是否允许自主推进逻辑复制槽。 取值范围:boolean型,默认值为false。 true:设为true时,在已发送日志都被确认推进且没有待发送事务时,推进逻辑复制槽到当前解码位置。 false:设为false时,完全交由复制业务调用日志确认接口推进逻辑复制槽。 skip-generated-columns: 逻辑解码控制参数,用于跳过存储生成列的输出。对UPDATE和DELETE的旧元组无效,相应元组始终会输出存储生成列。分布式版本暂不支持存储生成列,此配置选项暂无实际影响。 取值范围:boolean型,默认值为false/off。 true/on:值为true/on时,不输出存储生成列的解码结果。 false/off:设为false/off时,输出存储生成列的解码结果。 虚拟生成列不受此参数控制,DML的解码结果始终不会输出虚拟生成列。 enable-ddl-decoding: 逻辑解码控制参数,用于控制是否开启DDL语句的逻辑解码。 取值范围:boolean型,默认值为false。 true:值为true时,开启DDL语句的逻辑解码。 false:值为false时,不开启DDL语句的逻辑解码。 enable-ddl-json-format: 逻辑解码控制参数,用于控制DDL的反解析流程以及输出形式。 取值范围:boolean型,默认值为false。 true:值为true时,传送JSON格式的DDL反解析结果。 false:设为false时,传送decode-style指定格式的DDL反解析结果。 timezone-is-utc: 逻辑解码控制参数,用于控制时间类型(携带时区)数据的输出。如ORA、MYSQL兼容下的timestamptz类型,M兼容的timestamp类型都表示带时区的时间类型,默认会输出当前数据库时区的时间,设置为true时,在解码时会强制输出为0时区的时间。该参数仅对流式解码有效,函数解码使用该参数会忽略不生效。 取值范围:boolean型,默认值为false。 true:值为true时,解码时间类型数据输出0时区的时间。 false:值为false时,解码时间类型数据输出当前数据库时区的时间。 decode-sequence: 逻辑解码控制参数,用来指定是否输出sequence值的变更日志的解码结果。 取值范围:boolean型,默认值为false。 true:暂不支持设置。 false:设为false时,不输出sequence值的变更日志的解码结果。 解码选项decode-sequence当前仅允许设置为false,设置为true会在启动解码时报错退出。
  • 特性约束 不支持系统表、内存表、全局临时表、本地临时表和序列表,不支持压缩toast数据。 仅在ORA兼容模式、PG模式以及B兼容模式下有效。 Ustore不支持编解码,压缩率低于Astore。 普通表开启压缩时,扩容空间预留需按照解压后的大小评估。 HashBucket表不支持DBE_HEAT_MAP.ROW_HEAT_MAP和DBE_COMPRESSION.GET_COMPRESSION_TYPE。 扩容期间不支持压缩调度。 扩容前请确认当前是否有正在执行的压缩任务,如果有的话,要么等待压缩任务结束,要么执行DBE_ILM.STOP_ILM或DBE_ILM_ADMIN.DISABLE_ILM停掉,扩容完成后再执行 DBE_ILM_ADMIN.ENABLE_ILM开启。 由于当前版本新增了部分解压特性,会导致部分极小的表在判断压缩收益时不通过,从而不进行压缩。但此前没有部分解压的版本可以压缩。例如:单表单字段int1类型的数据从当前版本开始无法进行压缩。 父主题: 数据生命周期管理-OLTP表压缩
  • 执行密态等值密文解密 数据库连接接口PgConnection类型新增解密接口,可以对全密态数据库的密态等值密文进行解密。解密后返回其明文值,通过schema.table.column找到解文对应的密文列并返回其原始数据类型。 表1 新增com.huawei.gaussdb.jdbc.jdbc.PgConnection函数接口 方法名 返回值类型 支持JDBC 4 decryptData(String ciphertext, Integer len, String schema, String table, String column) ClientLogicDecryptResult Yes 参数说明: ciphertext 需要解密的密文。 len 密文长度。当取值小于实际密文长度时,解密失败。 schema 加密列所属schema名称。 table 加密列所属table名称。 column 加密列所属column名称。 下列场景可以解密成功,但不推荐: 密文长度入参比实际密文长。 schema.table.column指向其他加密列,此时将返回被指向的加密列的原始数据类型。 表2 新增com.huawei.gaussdb.jdbc.jdbc.clientlogic.ClientLogicDecryptResult函数接口 方法名 返回值类型 描述 支持JDBC4 isFailed() Boolean 解密是否失败,若失败返回True,否则返回False。 Yes getErrMsg() String 获取错误信息。 Yes getPlaintext() String 获取解密后的明文。 Yes getPlaintextSize() Integer 获取解密后的明文长度。 Yes getOriginalType() String 获取加密列的原始数据类型。 Yes // 通过非密态连接、逻辑解码等其他方式获得密文后,可使用该接口对密文进行解密 import com.huawei.gaussdb.jdbc.jdbc.PgConnection; import com.huawei.gaussdb.jdbc.jdbc.clientlogic.ClientLogicDecryptResult; // conn为密态连接 // 调用密态PgConnection的decryptData方法对密文进行解密,通过列名称定位到该密文的所属加密列,并返回其原始数据类型 ClientLogicDecryptResult decrypt_res = null; decrypt_res = ((PgConnection)conn).decryptData(ciphertext, ciphertext.length(), schemaname_str, tablename_str, colname_str); // 检查返回结果类解密成功与否,失败可获取报错信息,成功可获得明文及长度和原始数据类型 if (decrypt_res.isFailed()) { System.out.println(String.format("%s\n", decrypt_res.getErrMsg())); } else { System.out.println(String.format("decrypted plaintext: %s size: %d type: %s\n", decrypt_res.getPlaintext(), decrypt_res.getPlaintextSize(), decrypt_res.getOriginalType())); }
  • 执行加密表的预编译SQL语句 // 调用Connection的prepareStatement方法创建预编译语句对象。 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO creditcard_info VALUES (?, ?, ?);"); // 调用PreparedStatement的setShort设置参数。 pstmt.setInt(1, 2); pstmt.setString(2, "joy"); pstmt.setString(3, "6219985678349800033"); // 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。 int rowcount = pstmt.executeUpdate(); // 调用PreparedStatement的close方法关闭预编译语句对象。 pstmt.close();
  • SQL函数解码性能 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s。 单次解码数据量再增大,解码性能无明显提升。 如果采用pg_logical_slot_peek_changes + pg_replication_slot_advance方式,解码性能相比采用pg_logical_slot_get_changes时要下降30%~50%。 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_get_area_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能3MB/s~5MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能3MB/s~5MB/s。 单次解码数据量再增大,解码性能无明显提升。 在Benchmarksql-5.0的100warehouse场景下,采用pg_logical_slot_get_binary_changes时: 单次解码数据量4K行(对应约5MB~10MB日志),解码性能0.3MB/s~0.5MB/s。 单次解码数据量32K行(对应约40MB~80MB日志),解码性能2MB/s~3MB/s。 单次解码数据量256K行(对应约320MB~640MB日志),解码性能2MB/s~3MB/s。 单次解码数据量再增大,解码性能无明显提升。 如果采用pg_logical_slot_peek_binary_changes + pg_replication_slot_advance方式,解码性能相比采用pg_logical_slot_get_binary_changes时要下降30%~50%。
  • 步骤三:手动安装OpsAgent 在“未纳管主机”页面,单击“部署OpsAgent”。 安装方式选择“手动安装”,Windows主机必须使用手动安装方式。 填写基本信息,OpsAgent基本信息参数说明如表1所示。 表1 OpsAgent基本信息参数说明 参数名称 参数说明 租户账号 选择租户账号,为租户VPC下的主机安装OpsAgent。 归属Region 选择租户VPC所属的Region。 OpsAgent版本 选择需要安装的OpsAgent的版本号。 VPC 选择 虚拟私有云VPC ,为该VPC下的主机安装OpsAgent。 说明: 可选VPC为已纳管VPC,如无可选VPC,请完成将VPC纳管至运维中心ENS打通网络。 接入方式 当前支持“直接接入(内网)”的接入方式,为华为云主机接入安装OpsAgent。 根据WINDOWS命令下的指引完成OpsAgent安装。 在“未纳管主机”页面,可以通过OpsAgent状态判断主机OpsAgent是否安装成功。 如果主机的OpsAgent状态为“在线”,表示已安装成功。 如果主机的OpsAgent状态为“失败”,表示未安装成功,可以在“OpsAgent任务”页面,查看安装任务日志。 如需卸载OpsAgent,在Windows控制面板卸载uniagentd应用,卸载后主机的OpsAgent状态显示为“离线”。 如需更新OpsAgent,需卸载后重新安装。
  • 监控服务 表2 监控服务基本概念 基本概念 说明 监控 是采集、汇总和分析IT基础设施、服务组件以及程序应用的运行指标,以了解其当前状态和运行状况,判断是否安全可靠的过程,是保证业务持续稳定运行的重要手段。 告警 告警是监控系统的响应组件,它根据指标值的变化按照既定的策略执行响应操作,其主要目的是引起人们对系统当前状态的关注。告警定义包含基于指标的条件或阈值以及当指标值达到或超出定义条件时要执行的操作。 告警通知 告警的通知在所有的告警处理的链路结束以后才会发生。告警处理模块会根据上报告警的上下文获取告警的值班配置,值班配置由业务预置。 告警屏蔽 为您提供短时间的屏蔽功能,可以通过设置告警屏蔽的规则,告警将在屏蔽的时间内不再触发任何通知,规则结束后,将会被再次唤醒,屏蔽期间告警被清除后,将不再触发任何通知,减少您的处理频度。 告警过滤 告警过滤是直接在接入的阶段就将告警屏蔽,告警仍然会进入Bypass的数据库但不会再向下发送给告警处理模块。 告警收敛 多个维度的告警,通过特定的条件将它们变为一条告警,只需要配置自定义的收敛规则,就可以将重复告警收敛到一起,还有默认的规则帮助用户维护告警。 告警标记 告警标记的作用是为一段时间内的告警打上标签,例如现网变更或者现网演练时,由于要模拟大量异常请求和其他操作会造成大量无用告警上报,标记的作用就是为这一段时间的告警打上标签与正常告警进行区分。 告警定义 对于繁琐复杂的告警上报字段感到困惑,使用统一定义,将会自动下发到业务对应的agent,更加人性化的界面设计,使告警上报更加统一、准确。 告警修复 设置特定的命中条件,告警在发送通知之前会执行预置的修复脚本,进行修复操作,自动帮你修复简单的告警。 语音值班配置 当告警生成时,配置对应的责任人,通过 WeLink 、短信、电话等多种形式,快速将异常情况通知到责任人。 日志 日志是指设备、系统或服务程序在运作时都会产生的事件记录,每一行日志都记载着日期、时间、使用者及动作等相关操作的描述。一般系统会有各种各样的日志文件,如应用程序日志,安全日志、系统日志、Scheduler服务日志、WWW日志、DNS服务器日志等。 日志项目 日志项目是一个包含多个日志服务配置的整体,可以看作是一个微服务实例。 同一个微服务实例下的日志服务配置应当包含在一个日志项目中。 不同微服务实例使用完全相同的日志服务配置时,也可以共用同一个日志项目。 日志空间 日志空间是日志服务为微服务的日志分配的使用空间。 业务须在日志接入页面填写日志相关信息并提交申请日志空间,日志空间支持定义空间内日志的结构化格式信息,此时要求所有使用此空间的日志都满足该日志格式。 日志采集配置 日志采集配置是日志服务采集端在采集微服务实例中日志时所需的配置,一种日志对应一项采集配置。 日志采集配置须归属于一个日志项目,并使用一个已分配好的日志空间。 日志采集配置之间可以共用日志空间,此时需要关注日志空间的日志格式要求,未定义日志格式的空间可不用关注。 事件 事件是指IT基础设施、服务组件以及程序应用等运行过程中发生的问题。事件可通过监控系统自动生成、客户报障生成或SRE主动巡检生成等。监控系统生成事件首先要采集和分析运行数据,然后根据预定规则判断是否需要生成事件。 HCW HW Cloud Watch,AppStage运维中心提供的监控系统,也称为云眼,可以提供监控、告警功能。 HCW Agent 监控系统的采集框架,需要在每台主机上部署,部署路径为/opt/huawei/HCW_Agent。 EAP 事件自动化平台(Event & Action Platform,EAP),通过集成各系统动作,解决复杂运维场景的操作编排功能。 流程 可以通过EAP平台所提供的各种动作组合来编排解决具体运维场景的流程。 动作 各服务的操作(例如部署任务、执行作业、确认告警等)封装。 标签 对某一类特定群体或对象的某项特征进行的抽象分类和概括,其值(标签值)具备可分类性。 标签树 标签树负责标签的管理,包括标签的创建,删除,修改。系统标签由系统管理员统一进行管理,业务自定义标签由业务人员进行管理。 逻辑主体 逻辑主体是业务实体的抽象,是基于物理表(MPPDB、ClickHouse、Influxdb)创建。逻辑主体和物理表之间存在映射关系,逻辑主体的字段名称和物理表可以不一样,这也是为了实现业务属性和物理表之间的解耦。 一个逻辑主体可以映射多种物理实体,当底层数据物理表变更,上层的指标逻辑定义可以不用发生变化。 指标 指标是指在被观测系统中观察和收集的资源使用或行为的测量值,可能是原始采集的数据,也可能是后期经过各种计算和统计方法得到的数值。 令牌 令牌是使用数据源的鉴权方式,只有通过对应业务的token的鉴权,才能使用对应的数据源。 视图 指标本身包含了业务计算规则,只有结合数据源才能真正被查询。视图,就是指标 + 物理表的结合,也是监控大盘上直接可被查询的对象。视图可以包含一个或多个指标,例如折线图只需要单指标的视图,但是表格就需要多指标的视图。 查询视图(Query View)。直接作用于物理表的查询视图,大多用在druid实时监控场景。 长期存储视图(Long Term View)。基于查询视图,可以创建长期存储视图。如果觉得某个查询视图值得被长期持久化,就可以使用该能力。长期存储视图会自动创建三个聚合任务,分别是5分钟粒度、小时粒度、天粒度。 持久化视图(Persistent View)。基于查询视图,可以创建持久化视图。部分视图需要出日报,就可以使用该能力。该视图会自动创建一个汇聚任务。 异常检测视图(Anomaly Detect View)。基于查询视图,可以创建异常检测视图,用来为异常检测任务提供数据。 插件 可在机器上执行并采集各项参数的二进制文件或者脚本。
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买按需计费实例时选择指定企业项目,新购云资源将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 详细介绍请参见通过成本标签维度查看成本分配。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。
  • 成本优化 成本控制 企业可以在成本中心的“预算管理”页面创建精细粒度的预算来管理成本和使用量,在实际或预测超过预算阈值时,自动发送通知给指定消息接收人。企业还可以创建预算报告,定期将指定预算进展通知给指定消息接收人。 详细介绍请参见使用预测和预算来跟踪成本和使用量。 资源优化 您可以通过 AOM 的监控功能监控资源的使用情况,评估当前配置是否过高。例如:CPU、内存、带宽等资源的利用率。寻找节约成本的机会。也可以根据成本分析阶段的分析结果识别成本偏高的资源,然后采取针对性的优化措施。
  • 套餐包抵扣顺序 抵扣顺序原则 当购买了多个相同属性的套餐包,会按照套餐包过期时间顺序进行抵扣,优先抵扣过期时间近的套餐包。 示例 场景 某客户分别购买了两个“华北-北京四”区域的转码包。 套餐包A:规格10万分钟的H.264标准转码包,2022年10月1日生效,购买时长1年,即2023年10月1日过期。 套餐包B:规格50万分钟的H.264标准转码包,2022年10月10日生效,购买时长1年,即2023年10月10日过期。 抵扣顺序 2022年10月1日~10月9日 只有套餐包A生效。 使用套餐包A抵扣,超出10万分钟的部分按需计费。 2022年10月10日~2023年9月30日 套餐包A、B同时生效,叠加使用。 优先使用套餐包A抵扣,超出10万分钟的部分使用套餐包B抵扣,超出50万分钟的部分按需计费。 2023年10月1日~10月9日 套餐包A过期,只有套餐包B生效。 使用套餐包B抵扣,超出50万分钟的部分按需计费。 2023年10月10日及以后 套餐包A、B均已过期,此时为按需计费。
  • 套餐包说明 媒体处理 服务为按需计费,您也可以通过预付费套餐包的方式,提前购买使用额度,获取更多的优惠。套餐包的有效期为1年,超出套餐包的部分自动转按需计费。如何购买套餐包? 媒体处理服务暂不支持退订套餐包,建议您在购买套餐包前提前规划资源的使用额度。 套餐包仅支持实名认证用户购买,且限本账号使用。 套餐包购买后生效时间为北京时间当日零点,有效期为1年。 购买的套餐包只能在绑定的区域使用。如果您购买“华北-北京四”区域的转码套餐包,那么在“亚太-新加坡”区域使用视频转码功能时,无法通过该套餐包抵扣转码费用。 计费时优先使用套餐包中的额度,该额度使用完后,自动转为从余额扣费。 套餐包超过有效期自动失效,失效后剩余资源将作废,自动转为从余额扣费。 支持购买多个套餐包,可叠加使用,有效期不叠加,实际抵扣时按最早过期时间依次抵扣。 套餐包中的时长为LD转码时长,FHD,HD和SD转码将按对应的比例折算,FHD/HD/SD转码时长比例为3:1.5:1。即1倍的FHD转码时长折算成3倍的SD转码时长;1倍的HD转码时长折算成1.5倍的SD转码时长。 若使用媒体处理服务进行音频转码,产生的转码时长将先按(5/22)的比例折算成“视频H.264,LD (640 x 480) 及以下”规格的时长,然后再计费。 媒体处理服务提供的套餐包如表1所示,各套餐包在不同规格下的具体价格,请参见产品价格详情。您可以通过媒体处理提供的价格计算器,根据您的业务诉求,快速计算出购买媒体处理的参考价格。 表1 套餐包说明 套餐包 作用 使用限制 转码套餐包 H.264标准转码包:用于抵扣H.264 SD标准转码,未开启高清低码产生的转码时长费用。 H.264高清低码包:用于抵扣H.264 SD标准转码,且开启了高清低码产生的转码时长费用。 H.265标准转码包:用于抵扣H.265 SD标准转码,未开启高清低码产生的转码时长费用。 H.265高清低码包:用于抵扣H.265 SD标准转码,且开启了高清低码产生的转码时长费用。 说明: 4K/2K转码暂只支持按需计费。 只能用于套餐包所属区域。
  • 计费公式 费用的计算公式为:费用=实际资源使用量*资源单价 按需计费模式下各计费项的具体价格,请参见产品价格详情。你可以通过媒体处理提供的价格计算器,根据您的业务诉求,来快速计算出购买媒体处理的参考价格。 如果需要计算每小时产生的费用,则需要将资源单价转换为以小时计费。如标准存储(单AZ)单价为0.0990元/GB/月,则每小时的单价为:0.0990元/GB/月*(1/24/30)=0.0001375元/GB/小时
  • 计费项 媒体处理服务的费用包含转码费用、转推费用、转封装费用和截图费用,具体说明如表1所示。具体价格说明请参见产品价格详情。 表1 计费组成 计费项 计费说明 付费方式 视频转码 按转码输出的视频文件时长进行计费。 说明: 转动图、视频元数据解析属于增值服务,暂不计费。 按需付费 按需预付费套餐包 音频转码 按转码输出的音频文件时长进行计费。 按需付费 按需预付费套餐包 音视频转推 按转码后输出的音视频流旁路推流至云端录制或直播CDN观看的总时长进行计费。 按需付费 音视频合流转码 按云端合流转码后输出的音视频转码时长来统计合流转码服务的用量。转码时长分为音频时长和视频时长。 视频时长会根据转码后输出的视频分辨率划分视频档位,然后分别对不同档位的视频时长进行计费。 按需付费 视频截图 按截取的图片张数进行计费,视频截图和 视频审核 均会产生该项费用。 按需付费 音视频转封装 按音视频转封装时长进行计费。 按需付费
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用 IAM 服务获取用户Token接口获取。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值。 X-Language 否 String 请求语言类型。默认en-us。 取值范围: en-us zh-cn 表3 请求Body参数 参数 是否必选 参数类型 描述 unbind_role_names 是 Array of strings 委托解绑的权限策略集合。 bind_role_names 是 Array of strings 委托绑定的权限策略集合。
  • 请求示例 指定任务设置需要迁移的用户 https://{endpoint}/v3/054ba152d480d55b2f5dc0069e7ddef0/jobs/batch-update-user { "jobs": [{ "is_migrate_user": true, "is_set_password": false, "job_id": "36c368d7-c03f-46e1-839a-b5c5bddjb105", "list": [{ "account": "admin.testuser2", "comment": "", "id": "admin.testuser2", "is_set_password": true, "is_transfer": true, "password": null, "privileges": null, "roles": ["admin.clusterAdmin"], "selected": true }], "password": "", "user_roles": [{ "comment": "", "inherits_roles": [ "admin.roletest1", "admin.roletest3", "fastunit.roletest1" ], "is_transfer": true, "privileges": "[{u'resource': {u'cluster': True}, u'actions': [u'addShard']}, {u'resource': {u'db': u'fastunit', u'collection': u'coll'}, u'actions': [u'find', u'insert', u'remove', u'update']}, {u'resource': {u'db': u'mgo', u'collection': u'mycollection3'}, u'actions': [u'insert', u'remove', u'update']}, {u'resource': {u'db': u'', u'collection': u''}, u'actions': [u'find']}, {u'resource': {u'db': u'admin', u'collection': u''}, u'actions': [u'find']}]", "role": "admin.roletest4", "selected": true }] }] } 指定任务设置不迁移用户 https://{endpoint}/v3/0549a6a31000d4e82fd1c00c3d6f2d76/jobs/batch-update-user { "jobs" : [ { "is_migrate_user" : false, "is_set_password" : false, "job_id" : "a281f62f-4631-45d6-a2d3-679a9f4jb105" } ] }
  • 响应参数 状态码: 200 表7 响应Body参数 参数 参数类型 描述 all_counts Integer 总数。 results Array of objects 迁移用户信息。 详情请参见表8 表8 results字段数据结构说明 参数 参数类型 描述 job_id String 任务ID。 is_global_password String 是否使用全局密码。 message String 错误码。 user_list Array of objects 用户列表数据。 详情请参见表9。 roles_list Array of objects 角色列表数据。 详情请参见表10。 is_success Boolean 是否成功。 表9 user_list字段数据结构说明 参数 参数类型 描述 id String 用户账号ID。 account String 账号。 comment String 说明。 is_transfer Boolean 是否迁移。 privileges Array of strings 权限。 password String 密码。 roles Array of strings 拥有的角色。 selected Boolean 是否选择。 no_privileges String 无法同步的用户权限。 parent_account String 父用户。 no_parent_account String 无法同步父子关系的父用户。 表10 roles_list字段数据结构说明 参数 参数类型 描述 role String 角色。 comment String 说明。 is_transfer Boolean 是否迁移。 privileges String 权限。 inherits_roles Array of strings 继承的角色。 selected Boolean 是否选择。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Content-Type 是 String 指定类型为application/json。 缺省值:application/json X-Auth-Token 是 String 从IAM服务获取的用户Token。 X-Language 否 String 请求语言类型。 缺省值:en-us 取值: en-us zh-cn 表3 请求Body参数 参数 是否必选 参数类型 描述 jobs 是 Array of objects 批量更新迁移用户请求列表。 详情请参见表4。 表4 jobs字段数据结构说明 参数 是否必选 参数类型 描述 job_id 是 String 任务ID。 password 否 String 全局密码。 list 否 Array of objects 用户迁移信息,迁移用户时必填。 详情请参见表5。 user_roles 否 Array of objects 角色迁移信息,迁移用户时必填。 详情请参见表6。 is_set_password 是 Boolean 是否设置密码。 is_migrate_user 是 Boolean 是否迁移用户。 is_sync_object_privilege 否 Boolean 是否同步权限,不填默认为false,PostgreSQL同步使用。 表5 list字段数据结构说明 名称 是否必选 参数类型 说明 id 是 String 用户ID。 account 是 String 用户。 comment 否 String 说明。 is_transfer 是 Boolean 是否支持迁移。 privileges 否 String 权限列表。 password 否 String 密码。 is_set_password 否 Boolean 是否重置密码。 roles 是 Array of strings 角色。 selected 是 Boolean 是否选择。 表6 user_roles字段数据结构说明 名称 是否必选 参数类型 说明 role 是 String 角色。 comment 否 String 说明。 is_transfer 是 Boolean 是否支持迁移。 privileges 是 String 权限。 inherits_roles 否 Array of strings 继承角色列表。 selected 否 Boolean 是否选择,不填默认不迁移。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 is_existed Boolean 委托是否存在。 name String 委托名称。 roles Array of AgencyRole objects 委托绑定的权限策略信息。 表4 AgencyRole 参数 参数类型 描述 name String 策略名称。 description String 策略描述。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误描述。 状态码: 500 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误描述。
  • 响应示例 状态码: 200 Success. { "is_existed" : true, "name" : "DRS_AGENTCY", "roles" : [ { "name" : "DRS FullAccess", "description" : "策略描述1" }, { "name" : "Tenant Administrator", "description" : "策略描述2" } ] }
  • 认证鉴权 KooSearch 服务支持通过Token认证进行认证鉴权。 Token的有效期为24小时,需要使用同一个Token鉴权时,可以缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。 Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用获取用户Token接口时,请求body中“auth.scope”的取值需要选择“project”,如下所示。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", //用户名 "password": "********", //登录密码 "domain": { "name": "domainname" //用户所属的账号名称 } } } }, "scope": { "project": { "name": "xxxxxxxx" //项目名称 } } } } 获取Token 后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 POST https://{endpoint}/v3/auth/projects Content-Type: application/json X-Auth-Token: ABCDEFJ.... 您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333 。 父主题: 如何调用API
共100000条