2024.11 |
M兼容隔离框架-集中式大行客户语法兼容条目 |
此特性在现有M兼容隔离框架的基础上,补充语法条目支持:
- 支持field函数。
- 支持DML:
- INSERT、UPDATE、DELETE语句支持ignore功能。
- 支持LOAD DATA功能。
- 支持ALTER TABLE table_name TRUNCATE PARTITION语法。
|
关键规格及约束:
- 支持field函数。
- 支持DML:
- INSERT、UPDATE、DELETE语句支持ignore功能。
- 支持load data功能。
- 支持ALTER TABLE table_name TRUNCATE PARTITION语法。
交付形态:
集中式 |
M兼容隔离框架-集中式语法条目补充 |
此特性在现有M兼容性隔离框架的基础上,进行了语法条目补充和驱动兼容性支持,主要包括:
- ODBC驱动适配M兼容性隔离框架。
- 新增支持部分系统函数:支持JSON_MERGE_PRESERVE()、JSON_MERGE_PATCH()、JSON_ARRAY()、JSON_OBJECT()、JSON_QUOTE()、JSON_CONTAINS()、JSON_CONTAINS_PATH()、JSON_EXTRACT()、JSON_UNQUOTE()、JSON_KEYS()、JSON_SEARCH()、JSON_APPEND()、JSON_ARRAY_INSERT()、JSON_INSERT()、JSON_MERGE()、JSON_REMOVE()、JSON_REPLACE()、JSON_SET()、JSON_DEPTH()、JSON_LENGTH()、JSON_TYPE()、JSON_VALID()、JSON_ARRAY_APPEND()、benchmark()、FROM_BASE64()、TO_BASE64()、make_set()、mid()、ord()、conv()、crc32()、system_user()、password()、IS_IPV4()、IS_IPV6()、sleep()、bin()、CHAR()、format()、LOCATE()、POSITION()、CEIL()、md5()、default()、ELT()、RANDOM_BYTES()、std()、found_rows()、row_count()、SQL_CALC_FOUND_ROWS、export_set()、ROW_NUMBER、LEAD()等。
- 新增支持部分GUC参数:foreign_key_checks、sql_mode、autocommit等。
- 新增支持部分数据类型:支持set、enum、binary、zerofill、JSON等。
- 新增支持部分DML语法:支持SHOW STATUS、SHOW ENGINES、SHOW INDEX INDEXES KEYS、SHOW TABLE STATUS、SHOW TABLES,show支持查询字符集和字符序,upset 语句支持对同一列的值set多次,insert 语句支持values子句中参数为空,group by支持with rollup功能,update语句支持使用dbname.tblname.colname方式引用列,支持STRAIGHT_JOIN语法,支持show命令查看相关信息,支持except语法,支持select函数返回的列名按照mysql的格式返回,支持select表达式按照mysql格式返回,支持desc table语句,支持用户变量。
- 新增支持部分DDL语法:支持视图相关DDL语句、ALTER TABLE tbl_name ANALYZE PARTITION {partition_names | ALL}、create database指定缺省字符集和字符序、虚拟生成列、START TRANSACTION WITH CONSISTENT SNAPSHOT语句、RENAME TABLE tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2]…语法、ALTER TABLE tbl_name DROP {INDEX | KEY} index_name、通过create table AS select语法建立新表、通过create table select语法建立新表、升级脚本中需要使用来进行升级的语法。
- 新增支持部分视图和字符集:information_schema.character_sets视图功能补充、information_schema.collation_character_set_applicability视图功能补充、information_schema.collations视图功能补充、information_schema.tables视图功能补充、information_schema.columns视图功能补充、information_schema.global_status视图功能补充、information_schema.global_variables视图功能补充、information_schema.partitions视图功能补充、information_schema.processlist视图功能补充、information_schema.schemata视图功能补充、information_schema.session_status视图功能补充、information_schema.session_variables视图功能补充、information_schema.statistics视图功能补充、information_schema.table_constraints视图功能补充、information_schema.engines视图功能补充,支持latin1字符集的latin1_bin、latin1_swedish_ci字符序。
|
关键规格及约束:
- SQL语法参考MySQL5.7,原则上保持一致。
- 性能规格:
- SQL语句执行性能总体与MySQL5.7持平(create table as select语句性能持平现有GaussDB)。
- 系统函数性能与MySQL持平(Numeric数据类型场景例外,该类型和MySQL Decimal类型运算逻辑差异大,性能劣化10%)。
- 包含zerofill属性的列,对integer输入性能无影响。输出时m宽度越大,对integer(m)输出性能劣化越大,整体性能不劣于MySQL5.7。
- 操作符执行性能与MySQL5.7持平。
交付形态:
集中式 |
M兼容隔离框架-集中式JDBC协议兼容适配 |
支持JDBC协议兼容,支持集中式场景下以MySQL JDBC驱动连接GaussDB数据库,GaussDB实现协议兼容。 |
关键规格及约束:
- 需要在jdbc连接串url中明确指定连接的database。
- MySQL JDBC依赖的系统参数,GaussDB仅支持查询功能,功能不完全对齐MySQL对应参数。
- 性能规格:相比连接MySQL数据库基本持平。与505.1版本交付的驱动相比不劣化。
- 需要指定m_format_dev_version为s2。
- 支持的接口类包括:java.sql.Connection、java.sql.Statement、java.sql.PreparedStatement、java.sql.ResultSet、java.sql.DatabaseMetaData、java.sql.ResultSetMetaData。不支持java.sql.CallableStatement接口类。
- java.sql.Connection类中,不支持prepareCall接口。
- java.sql.Statement类中,不支持getWarnings、setMaxFieldSize、setMaxRows、cancel接口。
- java.sql.PreparedStatement类中,不支持getMetaData接口。
- java.sql.ResultSet类中,不支持insertRow、updateRow接口。
- java.sql.DatabaseMetaData类中,不支持getColumnPrivileges、getColumns、getCrossReference、getExportedKeys、getFunctionColumns、getFunctions、getProcedureColumns、getProcedures、getTablePrivileges、getTables、getUserName接口。
- 不支持服务端PBE报文。
- 支持的MySQL Connector/J版本:>=5.1.47。
交付形态:
集中式 |
M兼容隔离框架-周边配套工具适配 |
此特性针对M兼容性隔离框架场景使用服务端和客户端工具进行增量适配,主要包括:
- gs_rescue/gs_rescue_tui工具适配M兼容框架。
- 逻辑解码工具适配M兼容框架。
- gs_dump/gs_dumpall/gs_restore工具适配M兼容框架。
- gs_clean/gs_redis/gs_roach工具适配M兼容框架。
- DBMind工具适配M兼容框架。
- gs_om/gs_check/gs_replace/gs_upgradectl/gs_expand/gs_shrink工具适配M兼容框架。
|
关键规格及约束:
相关工具适配M兼容隔离框架后,各工具功能使用正常。
交付形态:
集中式、分布式 |
M兼容隔离框架-分布式框架基本能力具备 |
M兼容性隔离框架分布式形态下支持505.1集中式已落地的SQL语法、视图、函数、操作符、数据类型,并放开分布式必需的SQL语法。具体范围描述如下:
- OM依赖:templatem在分布式下支持创建。
- 支持SQL语法范围:
- 505.1版本M兼容框架集中式已经支持的SQL语法。
- 放开分布式上必需的SQL语法,包括CREATE TABLE与分布式相关语法、CREATE TABLE AS与分布式相关语法、CREATE TABLE LIKE与分布式相关语法、ALTER TABLE与分布式相关语法、CREATE INDEX与分布式相关语法、ALTER INDEX与分布式相关语法、ALTER COORDINATOR与分布式相关语法、CREATE/ALTER/DROP NODE与分布式相关语法、ALTER TABLE tblname TRUNCATE PARTITION的分布式能力。
- 支持视图范围:505.1M兼容框架集中式上支持的视图,在分布式上全量支持。无新增视图,已有视图功能需要完善。
- 支持函数范围:505.1M兼容框架集中式上支持的函数,在分布式上全量支持。新增支持的函数包括BIN()、ELT()、FIELD()、INSERT()、LOCATE()、MAKE_SET()、QUOTE()、DEFAULT()。
- 支持操作符范围:505.1M兼容框架集中式上支持的操作符,在分布式上全量支持。
- 支持数据类型:505.1M兼容框架集中式上支持的数据类型,在分布式上全量支持,新增新增支持SET,ENUM,JSON数据类型。
|
关键规格及约束:
- 分布式不支持创建外键约束。
- 分布式上支持全局二级索引。
- 分布式不支持自增列。
- 支持作为分布键的数据类型包括bool、char、varchar、tinytext、text、date、datetime、timestamp、datetime、year、tinyint、smallint、mediumint、int、bigint、numeric、decimal。
- 性能规格:SQL语句的执行性能,与GaussDB同功能的SQL语句性能持平。
交付形态:
分布式 |
GIS适配M兼容性单平台商用 |
GIS支持Yukon中postgis插件的部分空间数据类型以及函数在集中式MySQL兼容模式非隔离框架下单平台商用。 |
关键规格及约束:
- GIS在M兼容模式(非隔离框架)下支持ARM环境,Euler2.9操作系统。
- 支持1个空间数据类型:GEOMETRY。
- 支持84个空间数据函数。
交付形态:
集中式 |
O兼容性框架拆分 |
O兼容性框架拆分剥离出O兼容性模板库(templatea),后续建立O兼容性库时,使用templatea为模板库,template0仅用作M兼容性非隔离框架,PG兼容性,TD兼容性的模板库(为了保持前向兼容,依然保持template0中现有的O语法)。同时建立独立的O兼容性语法,词法文件,以及独立的系统函数、视图、高级包文件等。后续版本新增O兼容性功能仅在O兼容性模板库templatea及其他O兼容性库内添加(不包含template0和template1库),独立演进,与其他兼容性库互不影响。 |
关键规格及约束:
- O兼容性模板库与template0完全一致,保持前向兼容。
- 用户侧平滑升级无感知,升级前的用户O兼容性,升级后也可以正常使用,后续升级也可继续使用新增O兼容性功能。
- 创建O兼容性库时,若指定template0为模板库,则报notice,实际仍使用O兼容性模板库创建。
- O兼容性模板库不支持连接。
- 仅创建O兼容性数据库时支持模板库为templatea。
- 升级前,若用户原数据库与O兼容性模板库,以及升级过程中辅助数据库同名(templatea、templatea_temp),则提前检测报错,提醒用户修改名称(并在升级指导书添加说明,指导用户升级前自查)。
- 在跨本次兼容性拆分版本的升级路径场景下,分布式中template0库默认为MySQL兼容性,但为保持前向兼容,升级过程中templatea库仍以template0库为模板创建,存在部分兼容性差异。
交付形态:
集中式、分布式 |
O兼容性新增支持trunc/mod/lengthc等系统函数 |
此特性在现有O兼容性能力基础上,新增:
- 系统函数trunc对timestamp类型入参支持函数式索引。
- USERENV系统函数支持获取sid和instance参数。
- 支持mod函数。
- 支持系统函数sys_connect_by_path。
- 支持lengthc函数。
- 支持wm_concat函数。
- 支持keep窗口函数及语法。
- 支持systimestamp系统函数。
- jdbc支持getBytes/setBytes对Blob类型进行读写。
|
关键规格及约束:
- 性能规格与系统中已有对应系统函数持平。
- 函数不消耗大量资源,资源占用与O*持平。
交付形态:
集中式、分布式 |
O兼容性新增支持insert all into语法 |
此特性在现有O兼容性能力基础上,新增insert all into多表插入语法。 |
关键规格及约束:
- 多数据插入(10w-100w数量级别)不消耗大量资源,性能与INSERT INTO单表批量插入基本持平,差距在10%以内,表类型包括普通表、临时表、分区表。
- 多表插入(1k张表以内)不消耗大量资源,性能与多次执行INSERT INTO单表插入基本持平,差距在10%以内,表类型包括普通表、临时表、分区表。
- 只在O兼容模式下使用。
- 不支持error_logging_clause子句。
- into_clause中不能使用子查询的表别名。
- 仅能在表上执行,不可在普通视图或物化视图上执行,支持的表有普通表、临时表、分区表、列存表。
- values后不能跟多行。
- values内不支持聚合函数,不支持子查询。
- 不能在remote table上执行。
- 执行时在into子句内不能使用Table集合的表达式。
- 当存在IOT表或带有bitmap索引的表时不能并行执行多条into子句。
- into_clause指定sequence时,首次引用nextval会生成下一个数字,但所有后续into_clause语句引用的nextval都返回相同数字。
- 未完全继承原insert语法的功能,不支持returning子句,on duplicate key关键字,ignore关键字,upsert子句。
交付形态:
集中式、分布式 |
O兼容性新增支持分区表create table as/窗口函数ignore nulls/窗口函数range between等语法 |
此特性在现有O兼容性能力基础上,新增:
- 支持日期类型相减使用case when。
- 分布式支持start with connect by语法。
- gsql客户端支持斜杠/分割语句。
- 支持PG兼容ON UPDATE CURRENT_TIMESTAMP语法。
- 支持O兼容窗口、聚合函数支持ignore nulls和range..between语法。
- 分布式支持gs_source系统表。
- 分区表支持create table as语法。
- insert单表插入支持别名引用。
- where条件中的in后面没有括号。
- 支持在存在主键或唯一索引场景下,bpchar=text索引匹配正常。
|
关键规格及约束:
新增兼容性语法性能与原有对应语法持平。
交付形态:
集中式、分布式 |
存储过程典型场景性能提升并支持分钟级慢SQL定位能力 |
此特性在存储过程现有能力的基础上,新增:
- 存储过程动态语句执行匿名块支持缓存,存储过程支持多层PLState;集中式存储过程支持嵌套异常事务块复用。
- 存储过程运维能力增强:pg_stat_activity视图支持显示存储过程内所有正在执行的语句;asp视图支持显示存储过程语句嵌套关系;支持追踪存储过程正在执行的语句能力。
- 存储过程内存使用优化:集中式新增存储过程编译对象内存函数gs_plsql_memory_object_detail获取编译产物有效内存占用;扩展gs_glc_memory_detail视图和函数glc_memory_detail;集中式支持识别包和函数及包的编译searchpath、失效原因追踪;重构编译产物全局变量,减少嵌套赋值场景,增强相关代码可读性及可维护性。
- 存储过程END结束符增强:新增CREATE PROCEDURE/FUNCTION,PACKAGE内PROCEDURE/FUNCTION及各种场景的嵌套子程序支持“END+名称;”结尾;CREATE PACKAGE/PACKAGE BODY时,支持以“END;”结尾。
- ECPG存储过程增强:在现有的ECPG基础上,对游标(Cursor)相关SQL语法进行兼容增强,包括如下两方面:
支持游标使用where current of语法。
支持重复打开关闭游标。
|
关键规格及约束:
- 编译性能无劣化。
- 动态语句执行匿名块场景相比505.1典型场景下性能提升50%左右。
- pg_stat_activity视图对存储过程性能影响在现有基础上无劣化。
- gs_asp视图需要生成unique_sql_id,开启相关参数后对存储过程性能影响劣化5%左右。
- 正在执行trace的语句对被trace的存储过程性能影响劣化5%左右。
交付形态:
集中式、分布式 |
支持batch error mode用法 |
批量数据操作具备BatchErrorMode错误跳过能力:
- libpq具备BatchErrorMode批量请求和错误处理接口。
- 执行批量请求的操作时,如果遇到错误,根据BatchErrorMode决定是否会立即停止当前批处理中剩余的数据操作,还是继续执行剩下的数据操作。该能力提供两种批请求错误处理模式:
- 缺省模式(STMT_DEFAULT):在这种模式下,批数据操作过程中遇到错误,则会立即停止当前批处理中剩余的数据操作,并回滚所有的更改。
- 批错误模式(STMT_BATCH_ERRORS):在这种模式下,批数据操作过程中遇到错误时,记录错误信息后,继续执行批处理中剩余的数据操作,直到执行完毕;并返回详细错误信息。
|
关键规格及约束:
仅支持在显式开启事务时,使用BatchErrorMode错误跳过能力。
交付形态:
集中式 |
分区表二级分区多列字段和partition-wise关联支持商用 |
此特性在分区表现有能力的基础上,新增:
- 支持分区表Partition-wise join和分区级算子并行能力,具体实现为分区表在分区键上的关联需要支持分区结对扫描,从而利用多线程并行处理能力提升性能,同时减少计算资源使用。
- 对于分区表和非分区表关联,支持非分区侧数据按分区表分区键进行Stream重分布,从而减少数据通信开销,提高执行效率。
- 二级Range和List分区支持多列分区键。
|
关键规格及约束:
- partition-wise join支持一级分区,支持range/hash分区,支持集中式和分布式。
- 支持分区策略完全相同的两表或多表进行Partition-wise Join。
- 支持Partition-wise Join的SMP计划,当query_dop和分区数不同时,支持将分区轮询分发给SMP线程。
- partition-wise join不支持二级分区。
- 支持Partition-wise Join基于分区SMP并行查询,SMP场景继承SMP原有约束(不支持mergejoin,不支持分布式FQS和remote join query),对于分布式stream计划,仅支持分区表不需要跨DN stream时,通过SMP对Partition-wise Join进行优化。分区数据倾斜严重场景,SMP计划性能可能会劣化。
- 性能规格:72核ARM机器,2T内存,TPC-H20用例在33X数据量,列存或IMCV格式,64分区,64并发场景下,全量用例性能对比非partition wise join场景提升40%。分区表相关场景优化器阶段生成计划额外开销不超过2%。执行阶段性能无劣化,通过分区表TPCC benchmark看护验证。性能提升只针对于DML,DDL和导入导出性能无需关注。
- 分区表二级Range和List分区支持多列分区键支持集中式。
- 最多支持16列分区键,支持静态剪枝、PBE参数动态剪枝、参数化路径动态剪枝。
- 支持list分区自动扩展,且支持autolist和list互相转换;不支持interval多列分区。
- 支持分区表分类索引。
- 性能规格:剪枝性能插入额外开销和多列一级分区一致,DDL执行性能和单列分区一致。
交付形态:
集中式、分布式 |
失效重编译重构支持商用 |
通过重构编译依赖记录和失效重编译,使开关参数ddl_invalid_mode兼容,同时简化编译记录流程。通过开关参数兼容,加锁控制系统表修改,保证无重复数据,且保证对象可级联失效。 |
关键规格及约束:
- 支持一次性入库的对象:package、function、procedure。
- 支持ddl失效依赖对象:package、function、procedure。
- 支持失效重编译和alter compile的对象:package、function、procedure。
- 视图仅支持删除或重建被依赖函数时进行rebuild。不支持视图的失效或编译或一次性入库。
- 性能规格:不影响正常执行存储过程的性能。全量编译性能不劣化。
交付形态:
集中式 |
Ustore支持高效模糊查询走GIN索引扫描 |
Ustore通过支持GIN索引来实现模糊查询的性能大幅提升,主要功能点有:
- Ustore支持GIN索引的创建和删除。
- Ustore支持GIN索引的DML。
- Ustore支持LIKE条件查询利用GIN索引进行高效模糊查询。
|
关键规格及约束:
- 只支持一种opclass:ugin_trgm_ops,且ugin_trgm_ops不是默认opclass。
- ugin_trgm_ops支持 text、varchar、nvarchar2、clob数据类型的索引键,以及这四种类型的别名数据类型,不支持char(n)类型。
- 指定了ugin_trgm_ops的索引列数据的最大字节长度为238609291。
- 指定了ugin_trgm_ops的索引键,其字符序不允许是B模式字符序,否则创建索引时将报错。B模式字符序列表参考COLLATE collation。
- 指定了ugin_trgm_ops的索引键,只有LIKE条件匹配时可以进行索引扫描。
- ugin_trgm_ops提取索引键时将每3字符作为一个分词,若索引扫描条件提取的分词少于3个字符时,索引扫描时无法定位到具体的索引键,会扫描所有的索引键。例如:“col LIKE '%ab%'”。
- 索引键数量不得超过1,索引键不支持NULLS FIRST/LAST语法,不支持INCLUDE语法。
- 只能通过Bitmap Index Scan执行计划扫描,不支持Index Scan执行计划。
- 极致RTO的备机查询时,不会选中ugin索引扫描。
- GUC参数gin_fuzzy_search_limit为非0值时,ugin索引扫描时将报错。
- 支持以下WITH选项:storage_type、gin_pending_list_limit、fastupdate。
- 不支持关闭增量缓存区(pending list区),fastupdate仅支持设置为ON,设置为OFF会报错。
- 不支持作为段页式表、本地临时表、全局临时表、unlog表、加密表的索引,不支持作为分区表的GLOBAL索引。
- 不支持作为主键,不支持作为唯一键,不支持作为虚拟索引,不支持加密。
- 不支持在线(CONCURRENTLY)重建,不支持在线(CONCURRENTLY)创建,不支持在线(CONCURRENTLY)删除。
- 不支持并行功能,如并行创建、并行扫描等。
- 不支持在sql_compatibility = 'M'的数据库中创建和使用。
- 性能规格:典型配置场景下,数据规模1000w数据,10w总分词,每行分词100,10分词内模糊查询,一万数据最多用600ms。
交付形态:
集中式 |
MergeInto和Update及Delete算子支持并行处理性能提升 |
支持并行数据更新语句功能,包括merge into、update、delete。 |
关键规格及约束:
支持在存储过程内执行。
- SMP下的update,delete,merge into计划支持范围和原先select下smp支持的范围一致,即modifytable算子下层是stream gather节点的情况。
- 不支持列存表。
- 不支持全局临时表。
- 不支持带returning的dml走smp。
- 不支持目标ustore表上有pcr索引。
- 不支持目标表上有trigger和外键。
- 目标表是分区表时,如不支持自治事务自动扩充分区,不支持。
- Update中如果set value的子句中含有子查询,不支持;delete中子查询不支持;merge into中insert或update中带子查询,不支持。
- 不支持并发update或delete或merge into冲突的tuple,会在执行过程中报错。
- 升级过程中在升级提交前不支持子事务内使用ustore表的SMP DML。
- 典型配置场景下开启SMP经调优,算子性能提升5x。
交付形态:
集中式 |
IUD基础算子端到端性能提升 |
此特性主要功能点有:
- IUDS性能提升:
- 算子底噪消除:针对主路径函数和热点函数的底噪做了一系列性能优化,诸如减少函数调用层数、消除冗余逻辑判断及运算、减少上下文切换、增强cacheline连续性等优化。
- 算子执行态缓存:将初始化阶段得到的执行态信息缓存,在计划树缓存有效时,执行阶段使用缓存的执行态信息,节约执行器时间,减少CPU时间以及内存重复申请操作,提高性能。
- 内存上下文框架优化:在GaussDB中,当sql语句执行时会有频繁的内存上下文申请和释放的操作,对性能有一定程度的影响。本功能点将对内存上下文框架进行优化。核心设计是重复使用被删除的内存上下文空间。
- 复合唯一索引针对Null值兼容性补齐:在O兼容模式下,空值与其它非空值不相等,但是与空值相等,在插入包含索引列为空且索引列与表中已存在的索引列相同的数据时,直接报错,不允许插入。
|
关键规格及约束:
- 性能规格:典型配置场景下,
- Insert算子在pbe形式下性能达到PG16 0.7倍。
- update算子在pbe形式下性能达到PG16 0.7倍。
- delete算子在pbe形式下性能达到PG16 0.6倍。
- indexscan算子在pbe形式下性能达到PG16 0.6倍。
- 不支持子计划。
- 不支持存储过程。
- 不支持GPC。
- 执行计划仅包含:INSERT节点、UPDATE节点、DELETE节点、Result节点和IndexScan节点。
交付形态:
集中式、分布式 |
分布式执行计划支持参数化路径避免查询超时取消 |
通过支持参数化的remote query,提高TP场景下非完美sharding业务(表连接、相关子链接)的性能:
- nestloop参数化计划和执行框架。
- 相关子链接计划和执行框架。
- 单语句DN多prepared statement管理。
|
关键规格及约束:
- 仅支持PGXC计划,不支持Stream和FQS计划。
- Nestloop参数化路径当且仅当基表生成索引参数化路径时,才对基表生成带参数rescan的计划。
- 不支持Stream和PGXC计划自适应选择。
- 性能规格:分布式TPCC性能无影响。性能优于通过存储过程将查询拆分为多条可单节点下发语句执行。
- 典型客户场景性能百倍提升:两哈希分布表各100w行数据,c1, c2列均有索引。
交付形态:
分布式 |
分布式全局二级索引支持简单查询走非stream分布式计划性能提升 |
此特性在分布式全局二级索引现有能力基础上进行增量开发,主要包括:
- GSI性能提升:GSI支持简单查询走非Stream分布式计划、Stream支持PBE。
- GSI在线能力增强:GSI支持在线创建、GSI支持在线重建。
|
关键规格及约束:
- GSI支持简单查询走非Stream分布式计划。
- 性能规格:在典型场景下,GSI回表支持非Stream的分布式计划性能相对GSI Stream计划提升10倍。
- GSI支持简单查询走非Stream分布式计划:需要设置gsi_fastpath_level参数为partial或者strict级别,其他同非Stream分布式计划,GSI回表不支持hashbucket表类型。
- Stream PBE优化:需要开启enable_stream_pbe参数,该参数的默认值为ON。
- 无DML并发时,在GSIBUILD模式下,GSI在线创建性能(case1)相比于505.1版本(case2)提升20%以上。其中,性能为在线创建端到端耗时,计算公式为:(case2-case1)/(case1)。
- 不支持AStore。
- 不支持升级期间执行在线创建/重建GSI。
- 其他约束同普通索引在线创建和重建(比如长事务可能会阻塞在线创建GSI,建议避免在长事务存在的时候进行在线GSI创建;在线扩容期间不支持执行在线创建/重建GSI;高并发场景会导致在线GSI创建变慢,建议在业务低峰期进行在线GSI创建;严重错误(如FATAL/PANIC/数据库故障等场景)导致的在线创建/重建GSI失败会残留not ready或者not valid的索引(和临时表),需要用户手动清理)。
交付形态:
分布式 |
关键业务场景极致RTO回放速度提升20%及流控性能抖动不超过20% |
此特性在现有的极致RTO和流控机制上进行了增量开发,主要包括:
- 大表truncate/drop场景下,优化invalidPage等hash表删除机制,提升此场景下的回放速度。
- 备机读lsninfo,blockinfo等相关页面使用独立的bufferpool,独立的淘汰刷页算法淘汰页面,新增异步刷页线程。
- 流控算法优化,减少流控抖动。
- 极致RTO recovery_parse_workers参数大于1约束解除适配。
|
关键规格及约束:
- 大表(单dn大于1T)truncate/drop场景叠加dn故障重启下回放速度提升20%以上。
- 典型配置场景下(96U,内存512G,NVMe SSD盘,集中式一主两备环境,出口参数),主机1500并发update,备机50并发执行全表扫描场景下,平均回放速度提升20%以上,备机读性能不劣化。
- 典型配置场景下(ARM EulerOS 2.0 (SP9) 2路3节点一主两备,128U,内存512G,NVMe SSD盘),开启流控,TPCC场景下运行30分钟,tpmC振动幅度20%以内。
- 典型配置场景下(16U内存64G,SSD盘分布式两分片一主两备场景,单表总大小>500G),开启流控,运行sysbench insert/update/delete 叠加vacuum操作30分钟,tps波动幅度对比不开流控,幅度变化小于20%。
交付形态:
集中式、分布式 |
gs_loader并行导入性能提升5倍和非法字符容错支持商用 |
此特性在gs_loader原有功能的基础上进行增量开发,主要包括:
- gs_loader支持通过parallel参数开启并行导入,并将parallel的值作为并行度,以提升导入性能。
- gs_loader支持通过compatible_illegal_chars参数开启非法字符容错功能,导入过程中遇到数据文件中有非法字符时,不会报错,而是做一定的处理后正确导入到数据表中。
- \COPY TO、COPY TO新增命令行参数compatible_illegal_chars,支持导出过程中遇到非法字符时,不报错,而是做一定处理后成功导出。
|
关键规格及约束:
- 在开启支持约束冲突不回滚场景时:
- 无row insert触发器场景,或其他非row insert触发器场景时,性能不劣化。
- 有row insert触发器场景时,劣化60%。
- 在指定rows参数时,在总数据量不变的情况下,提交次数在1000次以内时,性能无明显劣化。
- 关闭错误表后,相比于打开错误表,错误表中数据越多,性能提升越明显。
- 开启非法字符容错时:
- 当数据文件中不存在非法字符时,性能无劣化。
- 当数据文件中存在非法字符时,字符转换性能与COPY原有字符转换性能持平,会在enable_log_copy_illegal_chars=on时额外记录转换日志,并且写日志开销与导入数据量呈线性关系。在CPU、内存不存在瓶颈,SSD场景下表现为,每记录1000w行数据的日志,写日志的开销增加不超过400s。
- 在CPU、内存不存在瓶颈,满负载时写日志行为占用的带宽为磁盘IO带宽峰值的5%左右。
- 开启并行导入时,规格如下(该性能规格要求客户端的cpu和内存、服务端的cpu内存和空闲线程以及网络带宽能满足对应的并发度,不存在瓶颈,且总数据行数足够大,skip的值小于总数据行数的1%):
- 并行度为2时,相比于串行导入,性能提升不低于1.5倍。
- 并行度为4时,相比于串行导入,性能提升不低于3倍。
- 并行度为8时,相比于串行导入,性能提升不低于5倍。
- 往后每个并行g 度所能提升的性能倍数继续衰减。
- 并行度每增加1,客户端大约增加10MB内存,服务端大约增加35MB内存。
- 在开启支持约束冲突不回滚场景时:
- 如果表带有BEFORE/AFTER ROW INSERT触发器,则每次提交行数不能超过1000万行。
- 不支持语句级触发器。
- 在指定行数提交时,考虑多次提交对性能影响,建议提交次数尽量不要超过1000次。小数据量频繁的提交会影响导入数据的性能,推荐合理配置rows参数的取值,保证每次提交的数据量大于5MB。对于常用的16U128G规格机器,一主两备部署场景下,向5个字段的表内导入13GB数据,排除网络影响,多次提交和单次提交(每次提交5MB数据)的速率基本持平,为10MB/s左右。
- 当前仅支持数据文件中存在nul字符时的兼容,不支持ctl控制文件中存在nul字符。ctl文件中存在nul字符会存在不可预期的问题。
- 指定binary参数为true后,有以下行要求:
- 数据文件必须为通过\COPY中BINARY模式导出的二进制格式数据文件,但是该模式导出的数据文件通常兼容性及可移植性较差,建议直接使用\COPY语句进行导入。
- gs_loader会将控制文件中语法转换为\COPY中BINARY模式下最简单的语法,即\COPY table_name FROM 'binary_file_path' BINARY语句,只解析控制文件中导入模式,表名信息和命令行中的control、data、binary、guc_param及数据库连接参数信息,不对其他参数语法进行解析和生效。
- 对于gs_loader的命令行及控制文件中有以下要求:不支持字符集配置,不支持WHEN条件过滤及DISCARD生成,不支持enable_copy_error_log = off下将错误数据直接写入bad文件,errors默认取值unlimited,会默认记录编码异常数据,不支持配置CSV模式,不支持指定分隔符及包裹符,不支持TRAILING NULLCOLS语法,不支持数据类型配置、POSITION配置及列表达式使用,不支持FILLER、CONSTANT、SEQUENCE、NULLIF参数,不支持skip、rows、compatible_nul参数。
- 在开启非法字符容错时:
- 若TERMINATED、OPTIONALLY ENCLOSED BY参数设置为空格或问号则会通过如"illegal chars conversion may confuse COPY escape 0x20"等报错信息提示用户修改。
- GUC参数copy_special_character_version设置为’no_error'时的优先级高于compatible_illegal_chars。copy_special_character_version='no_error'时,在不需要转码的情况下,期望将非法字符按照原样导入,而compatible_illegal_chars接口在不需要转码的场景下仍会进行编码合法性检验并进行非法字符的替换。如果想要在不需要转码的场景下使用compatible_illegal_chars,需要先将guc参数copy_special_character_version设置为空。
- 无法与compatible_nul同时开启,二者存在功能预期上的冲突。compatible_illegal_chars会将nul字符转换为空格字符,而compatible_nul=false则不希望将nul字符转换为空格字符。
- 在开启并行导入场景时:
- 并行度最大值不超过客户端CPU核数的两倍。当客户端运行在容器中时,由于获取到的是主机的cpu数量,可能比容器实际能使用的多,因此并行度最大值建议由用户自行控制在实际能使用的cpu数量的两倍范围内。
- 控制文件中不支持使用OPTIONALLY ENCLOSED BY或FIELDS CSV设置引号。
- 不支持导入二进制格式数据。
- 并行导入基于在客户端划分数据实现,无法保证数据按顺序导入。如果表中存在自增列,导入后自增列值的顺序无法保证与数据文件中顺序一致。
- COPY、\COPY导出支持非法字符容错场景下:
- 报错是发生在需要转码场景,也就是说导出过程中的compatible_illegal_chars对不需要转码的场景(文件编码/客户端编码与服务端编码一致)是不做处理的,非法字符会按照原样导出。
- 非法字符转换限GaussDB支持的编码转换。(不支持的编码转换仍然会报错)。
- gs_loader只支持集中式。
交付形态:
集中式、分布式 |
流式容灾1拖2支持商用 |
此特性在现有流式容灾能力基础上进行了增量开发,主要包括:
- 两地三中心高可用方案可支持1个生产集群 + 2个容灾集群的星型组网形式,即同城(<=100km)或异地部署(≥1000km)或者多个异地部署同时采用异步物理日志传输的方式构建集群高可用容灾网络。
- 支持生产集群和任意容灾集群的Switchover,支持任意灾备集群failover。容灾集群升主后,支持1拖2关系重新建立。
|
关键规格及约束:
- 继承基于流式复制的异地容灾方案的现有规格。
- 支持1个生产集群 + 2个容灾集群星型组网,不支持1+1+1级联复制形式,支持的组网方式如下:
- 集中式支持5节点(4副本)+5节点(4副本)+3节点(3副本)、3节点(3副本)+3节点(3副本)+3节点(3副本)、3节点(3副本)+1(1副本)+1(1副本)。
- 分布式支持9节点(4C4D4副本)+同城5节点(4C4D4副本)+异地4节点(2C4D2副本)、3节点(3C3D3副本)+3(3C3D3副本)+3(3C3D3副本)、3(3C3D3副本)+1(1C3D单副本)+1(1C3D单副本)、5+1(4C4D单副本)+1(1C4D单副本)。
- 支持使用dorado存储作为本地盘模式。
- 不支持基于dorado的同城双中心作为主集群搭建1拖2。
- 1拖2场景下不支持基于逻辑复制的滚动升级。
- 不支持DCF模式。
- 容灾集群低成本部署时升主后需要在容灾状态下支持升副本。
- 1拖2企业级能力(RTO、RPO、生产集群扩容、生产与容灾集群间断联重建、容灾集群低成本部署等)继承基于流式复制的异地容灾方案的现有约束。
- 支持单集群到1个主集群+1个备集群再到1个主集群+2个备集群的容灾搭建,1个主集群+2个备集群到1个主集群+1个备集群再到单集群的容灾解除。
- 不支持容灾演练增强功能,streaming_disaster_recovery_simulation接口。
- 主集群和备集群必须使用不同的集群名称且名称的字符长度不可超过36位。
交付形态:
集中式、分布式 |
集中式应用无损透明支持面向主备切换在途交易连续不超过60秒且性能劣化不超过5% |
计划外应用无损透明(ALT,Application Lossless and Transparent)的目的就是在集中式部署形态发生failover时,能向应用屏蔽可恢复故障,通过驱动透明地自动切换连接到新主,恢复会话状态,并重新执行被中断的事务,让应用在事务处理上感知不到I/O异常和数据的不一致,只是中间停顿了一下,像是执行了一条慢SQL。会话执行时,驱动需要缓存会话级的语句以及正在执行中的事务语句。为了保证事务重放时的数据一致性,需要保留已执行语句的快照并阻止数据库回收旧版本直至事务结束,从而在重放时以旧的快照来重新执行SQL。驱动会对返回的执行结果计算校验码并比较是否一致。 |
关键规格及约束:
- 仅支持JDBC驱动接口。
- 仅支持集中式主机读写,不支持备机读。
- 不支持灾备数据库实例切换。当开启计划外ALT特性时,不要同时配置灾备数据库实例地址。不支持使用备份数据恢复后的自动会话恢复。一旦切换时RPO非0,由于存在数据丢失,继续运行被中断事务可能存在未知风险。因此,使用备份进行系统恢复期间,应该关闭应用程序。
- 本特性通过重新执行被中断事务来达成应用无感知的目的,要求客户端执行SQL的超时容忍时间需要包括语句初始执行时间、故障恢复和事务重放时间。
- 本特性在JDBC驱动侧保存用于恢复的语句及相关状态,需要额外占用内存。允许在JDBC连接属性中配置内存上限属性,当超出配置阈值时相应会话将放弃当前事务重放能力,即遇错不再恢复,但不影响正常事务运行。
- 本特性需要在恢复后的会话中恢复会话状态。如果不能恢复,将在执行过程中自动检测,在准备重放前或者后续语句执行过程中显式报错。当前支持恢复绝大多数GUC参数设置,但不支持GUC以外其它会话状态的恢复,包括但不限于咨询锁、临时表、临时视图、临时序列、unlogged table、package变量、prepare statement语句、跨事务游标、以及其它跨事务存在的对象(如context、文件句柄、XML parser、xmldoc、随机数种子、application client info、自定义会话级环境变量)等。详见《特性指南》的“计划外应用无损透明”章节中对GUC参数、SQL语法和系统函数的ALT支持策略列表描述。
- 如果被中断事务未完成需要重放,要求SQL语句具备可重放条件(输入数据可重新获取),可重复执行(待重放的SQL命令对系统的影响都已撤销),否则会停止ALT重放。本特性不支持部分驱动接口:被中断事务中含有外部输入流(包括文件)、COPY、逻辑复制-Logical replication等。详见《开发指南》的“JDBC接口参考”章节中的ALT兼容描述。
- 事务未完成时无法撤销的场景包括但不限于自治事务、任务调度、文件写操作等。详见《特性指南》的“计划外应用无损透明”章节中对SQL语法和系统函数的ALT支持策略列表描述。
- 查询语句如不使用稳定排序条件或者含有可变函数(时间、序列、统计信息等),在重放执行时返回记录的顺序或者取值可能会发生调整,从而导致校验不一致,事务重放会失败报错。
- 使用本特性时应该采用事务块的方式来执行写请求。采用autocommit方式的单语句事务没有显式的commit操作,如果在提交成功时发生故障,客户端未获取到执行结果,由于无法重新执行已完成事务,不能获得执行结果,将报错。
- 当调用存储过程或者批量语句时,驱动侧不支持为内部语句保留语句粒度的精确快照。如果执行过程中内部语句访问的数据发生了并发修改,重放时由于采用单一的快照来查询,返回应用的结果会发生差异,从而重放失败;如果内部包含commit或者abort并且已执行,不支持重放,因为同一个事务操作不可重复提交,而当前无法支持在内部断点开始执行。当提交模式为autocommit时,执行executeBatch前如果驱动JDBC侧将 batchMode设置为OFF,executeBatch会将整个batch展开为单独事务执行,等同于批量语句内部包含commit或者abort,执行后不支持重放。
- 事务执行DML语句过程中,如果待访问的目标记录被其它会话并发更新/删除,重放会失败。
- 不支持密态数据库。
- 性能影响:本特性需要额外增加资源消耗,对性能存在一定影响。在推荐配置参数(alt_grace_period=60,即1min)情况,TPCC运行性能降幅可控制在5%以内。
- 数据库实例为支持在事务重放时对已执行过的SQL能返回相同的结果,将在如下场景阻止旧版本数据回收:(1)开启计划外ALT的会话中每个事务运行期间,与当前事务开始语句所对应的快照可访问位置开始延迟回收,直至事务结束;(2)开启计划外ALT的会话异常断连时,与当前事务开始语句所对应快照可访问位置开始延迟回收,直至alt_grace_period时间结束;(3)发生切换,新主实例服务启动后延迟旧版本记录的回收,直至alt_grace_period时间结束。采用旧的快照来执行事务重放,可能影响其它正常查询的性能,具体影响程度取决于系统内的单个事务运行时间和参数alt_grace_period的配置,以及在此期间同一条记录被修改的频率。alt_grace_period配置越大,单个事务运行时间越长,相同记录修改越频繁,影响越大。其中,AStore存储引擎由于采用append方式,在对相同记录频繁修改并较长时间不回收的情况下,MVCC查询效率会显著降低。因此,推荐UStore存储引擎。
交付形态:
集中式 |
支持跨介质和跨规格备份恢复 |
此特性在现有备份恢复功能的基础上,增加如下能力:
- 支持将大规格硬件产生的备份集恢复到小规格硬件环境中,支持的备份介质与部署形态与现有保持一致。
- 支持将OBS备份介质中产生的备份集传输到NAS备份介质后,仍然能够正常进行数据恢复。
|
关键规格及约束:
- 小规格底线:大于等于8U 32GB,内存跨度不超过32倍。
- 仅支持OBS备份集传输到NAS,其他均不支持。
交付形态:
集中式、分布式 |
Verifylog增强避免错误页面经xlog传播感染备机或容灾备集群 |
此特性可以快速识别错误页面,阻止产生错误xlog,防止错误通过xlog传播到备机或者容灾备集群,主要功能点包括:
- verifyLog补充字段高斯版本号。
- 支持开关等级为持久态时,anticache的校验无需等待vlog recovery完成。
- 回收校验机制优化。
- build场景功能适配。
- 增加支持段页式、UNDO、UNDO段页式和EXRTO页面校验。
|
关键规格及约束:
- 默认打开第三级持久态开关,不影响RTO,默认参数典型场景性能影响2%以内。
- 小规格机器(4核CPU/16GB内存、4核CPU32GB内存、8核CPU/64GB内存)功能默认关闭。
- 系统故障重启后重建anticache阶段,不支持校验;init db 场景不支持校验;不支持非shared_buffers页面校验;anticache内存到达上限不支持校验。
交付形态:
集中式、分布式 |
流式分布式集群容灾切换RTO优化 |
此特性对分布式流式容灾能力进行增强:
- 基于流式复制异地容灾方案分布式部署场景下,容灾倒换switchover内核时间从1min压缩至30s。
- 基于流式复制异地容灾方案分布式部署场景下,容灾升主failover内核时间从1min30s压缩至30s。
|
关键规格及约束:
- 继承流式容灾分布式形态已有约束。
- switchover规格继承原有前置条件下,无组件故障 RTO< 30s。
- failover规格继承原有前置条件下,无组件故障 RTO < 30s,少数派故障 RTO < 90s。
- 容灾升主性能优化仅支持quorum协议。
- 执行灾备升主时灾备集群要求degraded/normal态。
交付形态:
分布式 |
DCF集中式秒级和分布式分钟级容灾切换及国密算法支持商用 |
此特性在DCF现有能力的基础上,新增如下功能:
- 集中式组网下DCF支持秒级容灾切换。
- DCF支持分布式容灾组网。
- DCF支持容灾集群的quorum与DCF的模式切换。
- DCF支持国密算法。
|
关键规格及约束:
- 主集群内跨AZ网络时延要求<=2毫秒,主备集群之间异地网络时延要求<=100毫秒。该时延范围内可保证容灾的正常运行,否则会导致主备断连等情况出现。
- 容灾搭建:容灾搭建前后主集群性能恶化不超过20%。
- 灾备集群升主:
- 允许丢失一定的数据,RPO<=10秒。
- 灾备集群在没有日志积压(即容灾监控指标RPO <= 10秒,RTO <= 1秒),灾备集群实例均处于normal状态且所有组件(CN、DN、ETCD、GTM、cm_agent、cm_server)状态正常,灾备升主RTO<=90秒。
- 灾备集群在没有日志积压(即容灾监控指标RPO <= 10秒,RTO <= 1秒),灾备集群实例部分组件(CN、DN、ETCD、GTM、cm_agent、cm_server)状态异常且仍满足少数派故障的场景下,灾备升主RTO<=120秒。
- 容灾倒换:
- 在没有日志积压(即容灾监控指标RPO <= 10秒,RTO <= 1秒),sequence个数少于10,主备集群实例均处于normal状态且所有组件状态正常,启动容灾倒换可在内核时间60s内完成倒换。
- 在没有日志积压(即容灾监控指标RPO <= 10秒,RTO <= 1秒),sequence个数少于10,主备集群实例部分组件状态异常且仍满足少数派故障的情况下,启动容灾倒换可在内核时间120s内完成倒换。
- 模式切换命令支持传入切换超时的时间,默认超时时间为180秒,建议在业务小压力下进行切换。如果业务压力大,不保证在超时时间内完成模式切换。
- DCF是否启用国密算法以及加载的国密算法套和quorum保持一致。
- 国密SSL加密传输国际证书和国密证书之间不能协商通信的。
交付形态:
集中式、分布式 |
急诊室数据面拓扑链路故障分钟级告警 |
急诊室功能新增:
- 支持数据库组件基于简单sql的黑盒检测告警能力。
- 支持数据面拓扑链路故障的检测告警能力。
|
关键规格及约束:
SQL检测能力规格及约束:
- 集群中存在的CN个数小于等于参数emergence_sql_check_max_cn_count的取值才开启此功能。
- 源端和目的端状态都是正常(实例状态是Normal),急救室SQL检测才会处理链路问题。
- 集群分片数小于10,可在一分钟内上报告警。
- 只支持数据面网络检测。
- 单节点集群不做检测。
- 升级扩容阶段不做仲裁,DDB不可用时不做仲裁。
- 启动过程中不做仲裁。
- SQL检测只支持分布式。
- 灾备集群不支持SQL检测,容灾倒换过程中不做仲裁。
- 网络无问题的情况下以下场景不支持自动切换,需要手动执行:
- 全部CN只与部分DN SQL执行报错。
- 全部GTM只与部分CN,DN执行报错。
- 全部CN只与部分CN执行报错。
- DN主只与少数派DN执行报错。
数据面拓扑检测能力规格及约束:
- 支持数据面网络探测,检测数据面网络是否正常。
- 不支持容灾灾备集群数据面检测。
- 单节点集群不做检测。
- 升级扩容阶段不做仲裁。
- 启动过程中不做仲裁。
交付形态:
集中式、分布式 |
集群组件支持隔离 |
支持在某些故障场景下(比如网络隔离、磁盘hang或者CMA故障),由于故障节点上CMA无法上报,CM在下发仲裁前把故障节点从集群中隔离出去,使其不再与集群中任何实例连接,再继续下发仲裁结果。 |
关键规格及约束:
- 单实例故障隔离场景RTO<=30s。
- 实例kill失败或网络异常超过6s后开始进行隔离。
- 单实例故障隔离操作端到端时间<=7s(通信或存储:5s, CM:2s)。
- 支持范围:CN,DN隔离故障gtm;DN隔离故障CN。
- 隔离仅在无法确认进程down时使用,会伴随隔离告警,此场景需人工判断无法确认进程down的原因,必要时需手动下发kill或下电相应机器。
- 隔离动作无法完成时,后续仲裁(gtm选主、CN隔离)将无法继续,系统产生隔离失败告警,需尽快人工介入处理。
交付形态:
分布式 |
逻辑解码支持指定位点解码 |
GaussDB集中式部署下,逻辑解码的串/并行解码支持对在线WAL日志的指定位点解码。指定位点为lsn,逻辑解码会从指定lsn往后找到一个一致性点(consistency lsn),然后从consistency lsn点开始解码并输出数据。 |
关键规格及约束:
- 性能规格:
- 对逻辑解码性能影响:相比于依赖on catalog的逻辑解码任务,纯DML和DDL事务的解码性能不劣化。即在其他系统资源未瓶颈的场景下,通用规格解码速率达到100MB/s,MeteERP场景下达到300MB/s。
- 对事务影响:DML不劣化,DDL性能下降20%(性能劣化和IO能力有关,ecs:20%,BMS:10%)。
- 只支持对online wal日志的指定位点解码。
- 用户需要根据不同业务每天产生的wal日志数量,来调整GaussDB保留online wal日志文件数量的配置参数,以达到满足指定位点的wal日志的目的。
- 逻辑解码真正的开始点是一致性点(consistency lsn),一致性点(consistency lsn)具体位置和当时的并发执行事务实际情况相关,例如长事务等。一致性点及之后开启的事务所产生的数据修改才会被解码出来,用户需要确保要解码的事务开始于一致性点之后,否则可能造成数据不一致的风险。
- 逻辑解码数据字典的保留时长通过GUC参数来设置。如果用户设置的数据字典保留时长小于指定区间的wal日志产生时长,会造成由于字典缺失而无法进行数据解码的情况。
交付形态:
集中式 |
DBRepair支持秒级数据页损坏修复和DBVerify支持一致性检测能力 |
- 支持主备间数据页损坏的修复能力:
- 页面修复整体DB Repair代码框架优化,对现有的修复能力进行框架改造,实现高可用页面修复总入口,并通过代理模式对外提供修复服务。
- Auto Block Repair:支持主备间逻辑坏块自动修复能力,505.1版本已支持主备间物理坏块的自动修复能力。本版本主要在以下几点进行增强: 增加对于Hashbucket、段页式等商用数据表类型的支持; 支持备机在回放过程中发现lsn不连续、块丢失、未初始化场景下自动拉取主机页面修复;支持主机在校验发现写丢失、漏置脏等异常下自动拉取备机页面修复;支持主机执行手动页面校验过程中发现物理或逻辑坏块后获取备机页面进行自动修复。
- 坏块修复系统函数增强。由于历史主动调用视图修复函数问题较多,大多集中在入参无校验导致的逻辑错误,直接操作正确页面,手动修复错误等问题,进行整改。
- 支持手动的数据正确性以及一致性检测能力:
- 表级校验数据CT总入口框架,框架提供可扩展性,将当前所有表级校验能力(Uheap、RCR UB-tree、PCR UB-tree、URQ、Uheap一致性校验)纳入框架管理,提供统一的出口,并可灵活扩展,支持未来新的表级校验能力接口。
- 数据一致性检测系统函数,支持通过系统函数或者SQL查询来校验数据表与索引的数据一致性,堆表类型支持Astore、Ustore普通表、HashBucket表,支持B-tree、UB-tree索引。
|
关键规格及约束:
支持主备间数据页损坏的修复能力:
- 对典型场景TPCC以及Sysbench业务无性能影响。
- 为保证一致性,主机或备机修复需要等待回放到目标的LSN点才会执行修复;理想情况下,从远端获取一个待修复页面需要1s以内的额外时间,即修复一个页面相应的RTO时间会增加1s以内。
- 随着回放时,备机页面物理损坏页面数的上升,以上时间基本呈线性增加(依旧受网络和主机情况影响),可能存在大批物理受损页面在达到一定限度后,主机libpq拥塞,修复时间指数上升等极端场景。同时修复的页面数,即修复Hash表容量默认最大为100,支持扩展,扩展不设上限,极端场景下存在坏块hash表内存分配过大触发主备切换的场景。
- 自动以及手动修复支持Astore、Ustore存储引擎,支持小型化、集中式、分布式部署形态,支持普通行存表、段页式、ILM压缩、Hashbucket表数据页和索引页的自动修复。不支持MOT,临时表、全局临时表以及unlogged表不涉及主备修复;undo记录页面和事务表页面只有追加写,因此仅支持CRC损坏的修复;undo元信息页面暂不支持主备修复。
- 自动块修复依赖主备通信正常且主或备机至少有一个数据页面正常。其中,主机支持以下几种坏块的自动检测修复:
- CRC不匹配。
- Anticache/VerifyLog检测到出现写丢失。
- 执行手动校验发现数据页内损坏。
备机支持以下几种坏块的自动检测修复:
- CRC不匹配。
- 回放LSN不连续。
- 页面丢失或未初始化。
- 支持备份场景下发现CRC坏块后,自动调用内核修复函数gs_verify_and_tryrepair_page的自动修复能力。
- 自动修复为触发式修复,在访问并检测到损坏页面后进行自动修复。备机修复通过已有GUC 参数standby_page_repair进行开关控制,默认开启;主机修复无GUC参数控制,默认开启。
支持手动的数据正确性以及一致性检测能力:
- 对典型场景TPCC以及Sysbench业务无性能影响。
- 为保证校验准确性,校验会对目标表或索引加1级读锁进行读取校验。对索引的一致性校验与索引扫描性能相近,对堆表的一致性校验性能较差,与顺序扫描加逐个索引扫描效率相近,但是支持按照分区分块进行执行,支持断点续做。
- 支持后台管控定期调度能力,推荐在备机或主机的业务低峰期使用定时任务调度,防止对主机业务产生影响。使用IO资源管控能力,需开启相关资源管控GUC参数。
- 数据校验支持Astore、Ustore存储引擎,不支持MOT;支持集中式、分布式部署形态;支持备节点进行校验,不支持logger节点;堆表支持普通行存表、临时表、全局临时表、unloggged表、ILM压缩表、透明加密表、Hashbucket表的校验,索引支持B-tree、UB-tree索引的校验,暂不支持GIN和GIST索引,兼容段页式存储。
交付形态:
集中式、分布式 |
升级GUC参数自适应和多库并行升级支持商用 |
此特性对升级场景的兼容性和耗时进行了优化,主要包括:
- 升级GUC参数自适应。
- 支持多库场景并行升级。
|
关键规格及约束:
- 多库场景并行升级并行度默认为升级脚本执行机CPU核数,最大并发量32。
- 相同升级路径,100个用户库升级脚本执行时间减少为优化前50%。
交付形态:
集中式、分布式 |
数据抢救工具解析和恢复ilm表和hashbucket表 |
在无冗余极端场景:无备份、无备机、网络隔离、集群无法启动时,数据抢救工具作为兜底手段,守护客户数据安全,此版本新增如下功能:
- gs_rescue、gs_rescue_tui工具:新增支持ilm表、hashbucket表、密态表解析和恢复。
- gs_rescue_tui工具:适配解析数据文件中全部历史版本数据的功能。
- gs_rescue_tui工具:支持分布式环境端到端数据恢复的完整性。
|
关键规格及约束:
- 支持对ilm表、hashbucket表、密态表的解析和恢复的支持。
- 支持UI界面对数据的恢复和目标端的入库,对于常用数据类型在16C32G 配置SSD磁盘的服务器上恢复自动入库速度不低到40MB/s。
- 数据抢救工具支持解析恢复分布式数据库中存储在各个DN中的数据文件,完整恢复至目标端数据库。
- 仅解析落盘数据。
- 离线解析数据无法保证数据一致性。
- 不解析xlog/undo内数据。
- 数据库应处于离线状态。
- 已经支持astore、ustore、段页式、分区表的解析,新增支持ilm表、hashbucket表、密态表解析,不支持列存、透明加密表。
交付形态:
集中式、分布式 |
行存压缩特性压缩率提升及解除商用限制 |
此特性在之前版本原有行存压缩功能的基础上:
- 引入元数据压缩和常量编码,进一步提升压缩率。
- 解除分布式扩容的限制,将原表中已压缩的行扩容到新节点时执行压缩。
- 适配M兼容模式。
- 支持create table like语法复制原表的ILM策略。
|
关键规格及约束:
- 打开元数据压缩时,与505.1版本相比,典型数据集的平均压缩率提升30%。
- 常量规则编码支持存储数据类型:char,int16,int32,int64,date,timestamp,varlen(变长数据类型),编码优先级常量规则编码大于差值规则编码。
- TPCC典型场景下不开启压缩策略,对原有业务无影响。
- TPCC 典型场景下设置ILM策略,全压缩后再执行TPCC业务,1000仓500并发下,性能下降不超过10%。
- 部分解压:访问压缩表的点查场景下(数据均匀分布下的随机查询),LZ4_decompress_safe函数耗时的占比下降30%。
- 压缩表适配分布式扩容, 扩容后,对于压缩表,空间占用和原来持平; 扩容时,临时表会新增列导致容量增加,保持与非压缩情况下一致,需在老DN预留磁盘空间:最大单表的1倍,保持与原规格一致,相同数据量下和非压缩表相比扩容速度下降不超过50%。
- M兼容模式原框架使用行存压缩特性的语法与O兼容模式保持一致。
- 升级观察期禁用新增的元数据压缩、常量编码、lz4部分解压。
交付形态:
集中式、分布式 |
分布式GTM-Lite模式支持备机强一致读性能达到主机读80% |
此特性构建GTM-Lite模式下备机强一致性读的能力,主要包括:
- 分布式GTM-Lite模式支持串并行回放备机读。
- 分布式GTM-Lite模式支持极致RTO回放备机读。
|
关键规格及约束:
- 极致RTO备机读在以下几种情况下会取消查询:
- 当查询和回放有锁相关等冲突时,与串并行回放备机读相同,取消查询由参数max_standby_streaming_delay控制,报错信息是“canceling statement due to conflict with recovery”。
- 查询时间超出了参数standby_max_query_time。
- 触发了备机读文件的强制回收,由参数standby_force_recycle_ratio控制。
- 备机回放段页式物理空间收缩操作相关日志时会取消查询。
- 开启stream执行计划,查询和relmap类型日志回放有冲突。
- 当主机频繁执行DDL操作时,除了会导致备机上的查询与回放冲突被取消外,还会导致备机上的查询变慢。
- 需要开启barrier打点功能,开启该功能,会对集群性能有影响,和现有机制保持一致。
- 对于小规格(8U及以下)场景,极致RTO回放会占用较多资源,不建议打开极致RTO备机读。
- 在极致RTO备机读场景下,查询与回放冲突的日志类型主要有以下几种:
- drop database
- drop tablespace
- vacuum产生的clean日志
- reindex database。
- 资源管控:
- 磁盘空间:当前极致RTO备机读文件的空间占用已有阈值保护。
- 内存和IO:支持备机读独立BufferPool和独立刷脏。
- CPU:当前无资源管控能力,当节点的CPU使用过高时(建议不超过70%),回放和备机读性能会有明显下降。
交付形态:
分布式 |
ODBC驱动连接数据库实现备机读支持商用 |
支持通过ODBC驱动连接数据库实现备机读。 |
关键规格及约束:
- 对应场景性能与jdbc持平。
- 只支持分布式下CN的负载均衡。
- 使用分布式备机读时,内核版本需为503.0及以上。
- 不支持灾备集群的备机读。
- 分布式下不支持TargetServerType参数设置除primary的值。
交付形态:
集中式、分布式 |
透明加密功能xlog日志加密支持商用 |
此版本对透明加密特性进行增强。主要包括:
- 透明加密支持xlog加密 。
- 透明加密支持undo log加密。
- 透明加密支持toast表加密 。
- 透明加密支持库级和表级备份恢复 。
|
关键规格及约束:
- 性能规格:典型配置场景下,tpcc 1000仓,对所有表、索引、xlog加密后,相比不加密性能劣化不超过15%。
- 存储规格:加密xlog后,pg_xlog目录空间大小膨胀不超过5%。
- 支持使用aes_128_ctr加密算法和sm4_ctr加密算法。
- 使用第三方密钥服务时,不支持加密xlog和undo-log。
交付形态:
集中式、分布式 |
libpq静态调用openssl库和支持SSL证书全局加载 |
本特性对libpq的功能进行了增强,主要包括:
- 新增libpq静态调用openssl的驱动,以满足多方客户对openssl版本冲突的实际诉求。
- 支撑SSL全局加载能力,仅在服务器启动时完成SSL上下文环境初始化,后续所有会话连接共享该上下文。
|
关键规格及约束:
- 相比于动态链接openssl的Libpq,静态链接openssl的libpq占用空间变大,在接口和功能上保持一致。
- SSL全局加载功能开启后,替换/吊销证书后需要重启集群生效。
交付形态:
集中式、分布式 |
gs_guc工具支持私钥密码长度延长至128位 |
gs_guc encrypt工具支持的密码长度延长至128位,并保持前向兼容。 |
关键规格及约束:
- 将gs_guc encrypt工具支持的私钥密码最大长度延长至128位。
- 功能保持前向兼容。
交付形态:
集中式、分布式 |
JDBC负载均衡参数autoBalance新增分组策略 |
此需求在JDBC现有能力基础上进行增量开发,主要包括:
- 支持负载均衡模式autoBalance=shuffleN。
- 可定位性增强,对主要流程(如建立连接、执行SQL、结果获取和关闭连接等)进行日志统一整改和新增,以及抛出异常整改:
- 针对热点接口在关键流程添加日志,日志内容需包含唯一标识,如connectionID、sql唯一标识等,便于定位。
- 根据日志内容设置匹配的级别,并且对日志级别在Warning以下统一加开关控制。
- 对各核心接口和关键流程上的异常进行统一整改,抛出异常前需使用Error级别日志记录,对于内核侧上报的异常,可以参考Oracle,除了简单的报错信息外,还要有更详细的Cause信息,包括ErrorCode、Position、Sql、OriginalSql和ErrorMessage。
|
关键规格及约束:
- shufflen负载均衡策略支持分布式ip配置,暂不支持ipv6,性能与autoBalance=priorityN相比不劣化。
- 此版本增加的可定位性能力开启性能不劣化。
交付形态:
集中式、分布式 |
分布式逻辑解码支持DDL及提供数据找回和对比修复工具 |
此特性在逻辑解码能力的基础上进行增量开发,主要包括:
- 分布式集群逻辑解码支持DDL语句解码能力。
- 内核提供数据找回接口,通过解码本集群指定LSN区间的WAL日志,将WAL日志中记录的数据修改动作解析成SQL语句,DELETE和UPDATE操作需要展示数据全字段。
- 逻辑解码任务在运行过程中对内存和文件句柄资源做合理的优化和管控。
- 逻辑解码任务使用历史版本快照进行数据可见性判断的优化。
|
关键规格及约束:
- 逻辑解码不支持DDL(DCL)/DML混合事务,混合事务中DDL之后的DML解码不支持。
- 逻辑解码无DDL时,只有DML场景的逻辑解码性能不下降,纯DDL逻辑解码性能标准环境下约为80MB/S,DDL/DML混合事务逻辑解码性能标准环境下约为80MB/S。
- 开启逻辑解码支持DDL后,对DDL语句影响性能下降小于15%。
- 解码通用约束(串行和并行):不支持对本地临时对象做DDL解码,例如:GLOBAL临时表、LOCAL临时表、临时Schema。
- 不支持FOREIGN TABLE场景的DDL解码。
- alter table add column的default值不支持stable类型和volatile类型的函数;create table和alter table的column的check表达式不支持stable类型和volatile类型的函数;alter table如果有多条子语句,只要其中一条子语句存在上述两种情况,则该条alter table整条语句不反解析。
- 直连DN解码场景,只对当前DN中的日志进行解码。
- 不支持concurrently场景,例如:create index concurrently、reindex concurrently。
- 不支持reindex database、reindex system。
- 不支持视图/物化视图相关DDL解码,不支持视图上触发器相关DDL解码。
- 如果create function或create procedure中使用了PACKAGE中对象时,逻辑解码仍支持对create/alter/drop function或create/alter/drop procedure解码。因分布式逻辑解码不支持PACKAGE,存在执行失败的情况。
- 创建对象时语句中存在IF NOT EXIES时,如果对象已存在,则不进行解码。删除对象时语句中存在IF EXISTS时,如果对象不存在,则不进行解码。
- 不支持对使用了非全部分片的逻辑集群node group相关的DDL进行解码。
- 仅支持本版本之前版本的商用DDL语法。
- 数据找回能力约束如下:
- 要求当前网络和硬件环境正常。
- 单条元组大小建议不超过500MB,500MB~1GB之间会报错。
- 不支持数据页复制这种不落xlog的日志解码。
- 不支持VACUUM FULL之前的日志解码。
- 不能解码扩容前的xlog文件。
- 不支持CSN序复制槽。
- 逻辑解码资源使用优化规格和约束:内存管控针对逻辑解码业务实际使用的内存做管控;受当前内存上下文设计约束影响,内存上下文并不总是将空闲的内存块归还给操作系统。
交付形态:
分布式 |
表级在线DDL和在线VACUUM FULL |
此特性在历史版本已经支持的在线DDL能力的基础上,新增了支持在线修改列类型、精度、长度缩减、char类型长度扩长、表级在线移动表空间、在线加非空/检查/主键/唯一约束、在线VACUUM FULL。 |
关键规格及约束:
- 进行本特性操作时,需预留足够的磁盘空间,即剩余空间是所操作的表(及其上索引等附属品)总和的1倍。
- 本特性支持普通表,不支持数据库级、索引级、分区表、二级分区表、段页式表、hash bucket表、临时表、unlogged表等。对不支持的对象,DDL默认以历史版本方式执行。
- 若DDL语句包含本特性支持操作(包含在线修改列类型/精度/长度缩减、表级在线移动表空间、在线加非空/检查/主键/唯一约束、在线VACUUM FULL等)以外的操作,DDL默认以历史版本方式执行。
- 长事务可能会阻塞在线DDL,建议避免在长事务存在时进行在线DDL。本特性执行后期将阻塞DQL操作,对并发的DML操作进行报错。因此只支持用户业务允许报错重试的场景。对于不停重试的业务模型可能出现线程池满无法对外提供服务的严重影响,因此使用本特性前需要谨慎评估业务模型对等锁的容忍程度以及是否存在慢SQL情况来评估是否能够进行本特性操作。
- 本特性不支持在事务内执行,不支持在存储过程中执行。
- 本特性执行期间,应尽量避免与DDL并发执行,否则有一定概率出现死锁、报错等;若出现此类情况,可以重新连接客户端进行重试。
- 从不支持使用本特性的版本升级至支持新特性的版本,升级待观察期间不支持使用本特性,本次支持的在线DDL将不会生效,DDL默认以历史版本执行,并提示升级期间不支持。
- 本特性过程中会生成名为online$$ddl$$[(表所在的模式+表名)的hash值]的schema:
- Schema的属主默认为初始用户,不建议在线DDL执行中操作此schema,可能会导致中止在线DDL并产生未知错误。
- 用户不可创建online$$为前缀的schema,会有报错提示。若已存在同名schema冲突,在线DDL将不会生效,DDL默认以历史版本执行,并提示当前DDL语句是因为schema名冲突不可在线。
- 若之前版本已创建online$$为前缀的schema且属主是初始用户,则在升级到支持本特性的版本后,不可对该模式进行GRANT和REVOKE操作,不可在该schema下创建、GRANT、REVOKE前缀为online_ddl的表或序列,否则会有报错提示,建议重命名schema后重试。
- 若本特性(包含在线修改列类型/精度/长度缩减、表级在线移动表空间,在线VACUUM FULL)操作失败,表上可能会有明显存储空间膨胀。在线加非空/检查/主键约束操作无论失败与否, 表上可能会有明显存储空间膨胀。其中膨胀程度与DDL执行时长以及并发写操作量成正比,建议避免在长事务存在时进行在线DDL。
- 本特性执行过程中发生严重故障,如FATAL、PANIC、数据库故障和节点断连等故障时,创建的临时模式和表的追加状态可能残留,需要手动清理和恢复,通过online_ddl_cleanup()进行手动清理。
- 本特性存在用户业务与在线DDL资源的争抢,不适合大业务背景下做在线DDL。对于资源有限的场景,建议采用细粒度资源管控进行操作。本特性支持开启多线程加速DDL执行。当用户开启或使用资源负载管理时,比如启用IO资源管理 (如io_limits>0或io_priority = high/medium/low),若本特性同时开启多线程加速,将忽略用户/会话下的资源负载管理,并给出提示当前资源负载管理无效并开启多线程加速。在线DDL多线程执行过程实际遵循初始用户的资源负载管理。
- 本特性操作的表上包含GSI或DDL语句中包含BY GLOBAL INDEX语法时,本次支持的在线DDL将不会生效,DDL默认以历史版本执行。
- 本特性继承CREATE TABLE LIKE的使用约束(参见《开发指南》中的“SQL参考> SQL语法 > CREATE TABLE”章节)。
- 本特性操作不支持M-Compatibility模式。
- 本特性中在线修改列类型,不支持将类型修改、转换为SET数据类型。
- 本特性在线修改列类型char类型扩展时,不会修改重写底层数据。在线DDL操作后,已有的数据底层存储仍保有旧的长度,新增修改数据的底层存储则会服从扩展后的长度。
- 若对表进行本特性操作同时包含修改列类型/精度/长度缩减、表级在线移动表空间和加非空/检查/主键/唯一约束,当出现违反约束的数据进行报错时,报错信息会存在区别于非在线DDL的情况。
- 在线DDL修改列类型/精度/长度缩减时, 若使用MODIFY [ COLUMN ]column_name data_type语法且子句包含CHARSET、COLLATE、FIRST、AFTER等任何一个关键字或column_constraint,在线DDL将不会生效,DDL默认以历史版本执行。
- 在线DDL修改列类型/精度/长度缩减时, 若使用CHANGE [ COLUMN ]column_name new_column_name data_type语法,在线DDL将不会生效,DDL默认以历史版本执行。
- 在线DDL修改列类型/精度/长度缩减或在线添加非空/检查/主键/唯一约束时,会检查数据是否满足数据类型转换、精度修改、长度缩减或约束条件等。若检查结果为不满足,DDL操作则会报错。在线DDL可并发DML,可能会出现并发DML将不满足转换或违反约束的数据删除,但DDL仍然报错的情况。例如:在线DDL扫描表修改列类型时,若表上元组A的数据并不满足数据转换,在线DDL的事务扫描到元组A时,会立即报错。如果在同一时间使用并行事务DELETE把元组A删除,但在线DDL扫描检查的事务早于并行事务DELETE,因此不会认为元组A已被删除。
- 在线添加主键和唯一约束涉及在线创建索引,若在线创建索引期间发生异常情况(如用户手动取消、唯一索引键值重复、资源不足、启动线程失败、锁超时等失
- 败场景)导致在线创建索引失败。这种情况下可能会残留下not ready或者notvalid的索引以及临时表,占用系统资源,请参考《开发指南》中的“SQL参考> SQL语法 > CREATE INDEX”章节对异常情况处理。
- 在线VACUUM FULL不支持FREEZE关键字,若同时指定FREEZE关键字与ONLINE关键字,VACUUM FULL默认以历史版本执行,并提示当前VACUUM FULL语句不支持在线执行。
- 本特性其他约束继承开发指南中关于ALTER TABLE的约束。
交付形态:
集中式、分布式 |
连续登录失败或账号锁定时上报告警 |
- 新增2种告警上报类型。一种是账户锁定后上报告警,账户解锁后告警自动恢复。另一种是在连续登录失败超过阈值后上报告警,登录失败次数阈值可通过failed_login_attempts参数进行配置,失败次数清零后告警自动恢复。
- 新增GUC参数开关enable_lock_account,控制账户连续登录失败次数达到failed_login_attempts后,是否锁定账户。
|
关键规格及约束:
不涉及,具体告警触发条件请参考产品文档。
交付形态:
集中式、分布式 |
ASP备机和定时刷盘和空闲事务超时退出 |
此特性在现有ASP和等待事件能力的基础上,新增:
- ASP支持备机和定时刷盘,利用主机可以落盘,将备机内存数据落盘至主机,并且设置定时刷盘参数,达到内存数据定时刷盘的效果。
- 基于定时器机制,新增IDLE_IN_TRANSACTION_TIMEOUT配置空闲事务超时参数,提供可配置化开启空闲事务超时能力,实现自动中断空闲长事务、解决空闲事务导致的xlog堆积和死元组不回收问题;空闲事务超时后,打印超时事务相关信息(开始时间、线程id、会话id、query语句等)。
|
关键规格及约束:
- idle in transaction timeout新下发实例默认开启5min,升级实例关闭。支持CN/DN,支持备机,不支持logger节点。
- 空闲会话超时退出,防止会话未提交占用资源。
- 用户可选择常开,开启本功能开关后对数据库性能无影响。
- 在备机开启读服务下,默认开启备机ASP服务,用户可手动关闭。
- 开启ASP支持备机功能,对数据库性能无影响。
- 允许用户自定义时间参数(1分钟-60分钟)将ASP内存数据刷盘。
交付形态:
集中式、分布式 |
错误码规范化 |
- 补充3500+条未加CAUSE、ACTION的ERROR及以上错误码的CAUSE、ACTION。
- 针对500条客户遇到频率高的错误码,比如语法错误、参数错误等错误码,精准化CAUSE、ACTION。
- 提供err_stack接口作为打印调用栈接口,对于cause是内部错误、action是联系华为工程师的问题,默认调用该接口打印调用栈。
|
关键规格及约束:
不涉及
交付形态:
集中式、分布式 |