版本介绍
Vastbase G100 V2.2 Build 17是Vastbase于2024年6月6日发布的先行版,新增了大量语法、函数、功能以及兼容性特性。本章将介绍新增特性概览,其它功能请参考Vastbase G100 V2.2 Build 15和Vastbase G100 V2.2 Build 16。
新特性
兼容性 | 功能模块 | 新增特性 |
---|---|---|
通用 | 安装 | 支持在数据库实例初始化时设置page size。 |
SQL语法 | 新增支持在线DDL,可有效避免因DDL等锁造成DML和查询语句阻塞的情况。 | |
查询语法新增支持PRIOR,用于构建递归查询,与 CONNECT BY 一起使用,允许根据父子关系来遍历数据,形成一个层级结构的结果集。 | ||
函数 | 新增支持天干地支纪年法函数TO_LUNAR、FROM_LUNAR。 | |
系统表 | 自定义类型增减字段操作支持同步到系统表PG_OBJETC_TYPE。该系统表所有兼容模式下可查,仅Oracle兼容模式下支持更新。 | |
支持统计字段值超过1024 bytes的列信息并记录在PG_STATISTIC系统表中。 | ||
新增系统表VB_USAGE_STATISTIC,用于存储数据库历史统计数据,该系统表每隔10分钟会定期记录系统时间和当前xid的max值。 | ||
对象 | 支持通过内置命令查询对应机器在某个时间段内的每日在线时长和每日事务数,详见vb_ctl。 | |
SQL引擎 | 支持单线程INSERT批量插入功能。新增GUC参数enable_heap_multi_insert_for_insert_select,开启该参数可提升批量INSERT执行效率至少10% 。 | |
安全 | 支持对带有可变长字段的表,并且可变长字段作为索引的列进行逻辑数据校验。 | |
密态数据库新增OPE保序加密算法,支持表密文列排序操作。 | ||
PL/pgSQL | 支持在触发器函数中使用自治事务。详见触发器支持自治事务。 | |
插件 | 新增支持pg_bigm插件,该插件提供了全文搜索功能,并允许创建二元语法(2-gram)的GIN索引,以加速搜索过程,从而提高了Vastbase的全文搜索性能。 | |
新增支持pg_prewarm插件,允许管理员手动预加载指定的表或索引数据到数据库的共享缓冲区(shared buffers),这个过程也被称为“预热”。预热后,查询可直接从内存中访问数据,有效提高数据库重启后首次查询时的性能。目前Vastbase仅实现对pg_prewarm的语法兼容,无法保证预热后对查询性能存在提升效果。 | ||
新增支持pgvector插件,该插件引入了专用的向量数据类型、运算符和函数,可以直接在 Vastbase数据库中高效存储、操作和分析矢量数据。可以基于向量字段创建IVFFlat和HNSW类型的索引,以在高维向量空间内进行有效快速的搜索。 | ||
新增支持TimescaleDB时序插件,以插件化的形式方便用户处理时序数据。 | ||
GUC参数 | 新增GUC参数enable_ignore_dquotes_for_char_convert,用于控制定长向变长转换时是否加双引号,开启时转换不加双引号。 | |
新增GUC参数enable_je_enhanced,用于控制是否启用JOIN ELIMINATION子表消除功能。 | ||
新增GUC参数enable_nonblocking_ddl用于控制是否启用在线DDL。 | ||
新增GUC参数log_max_size,用于设置日志空间所能容纳的日志总量的最大值,为0时表示不对日志空间容量进行限制,目前仅对服务器日志文件所在的文件夹生效。 | ||
新增GUC参数new_sort,用于控制是否开启自适应排序。 | ||
新增GUC参数new_sort_msdradix_size_threshold,用于在开启自适应排序的情况下,当排序的位宽超过该参数设置的值时,使用 MsdRadixSort 排序算法;反之使用 LsdRadixSort 排序算法。 | ||
新增GUC参数new_sort_store_strxfrm_var,用于在开启自适应排序的情况下,对于 TEXT、BPCHAR、VARCHAR 类型,在 collate 不为 “C” 时是否保存 strxfrm()后的字符串,以提高字符串比较的性能。开启后可以提升字符串比较与排序性能,但会占用更大的工作内存。 | ||
新增GUC参数new_sort_string_prefix_length,用于设置在开启自适应排序的情况下,TEXT、BPCHAR、VARCHAR 类型放入排序空间的数据长度。 | ||
新增GUC参数scalar_array_filter_pushdown_threshold,用于设置标量数组筛选器下推为索引或表扫描的阈值。 | ||
新增GUC参数time_record_level,用于控制对每个会话中当前正在执行的SELECT、INSERT、UPDATE、DELETE、MERGE INTO语句的耗时级别。 | ||
新增GUC参数wdr_usage_statistic_retention_days,该参数用于设置VB_USAGE_STATISTIC系统表中记录的存储时间。当参数设置为0时,表示在删除之前的数据后,不会向表中插入新的记录。 | ||
Oracle兼容性 | SQL语法 | 物化视图支持使用ON COMMIT语法,在事务提交的同时更新物化视图。 |
函数 | 新增支持以下函数:
|
|
TABLE函数新增支持cast入参。 | ||
FIRST_VALUE、LAST_VALUE函数新增支持IGNORE NULLS选项,用于忽略空值。 | ||
DBMS_SQL.DEFINE_COLUMN函数新增了对DATE、CHAR、和VARCHAR三种数据类型的支持。 | ||
系统视图 | 动态性能视图V$SESSION新增osuser 和 machine字段,用于查询客户端操作系统用户名以及执行的机器。 | |
PL/pgSQL | 自定义函数中支持嵌套函数,定义的嵌套函数可在函数内部调用,详见子程序。 | |
GUC参数 | 新增GUC参数enable_on_commit_matview用于控制是否支持物化视图的ON COMMIT选项。若开启则支持设置ON COMMIT修饰物化视图,从而设置事务提交时更新物化视图。 | |
MySQL兼容性 | SQL语法 | DECLARE HANDLER语句支持使用NOT FOUND参数,触发一个特定的处理程序,而不是立即退出游标循环。详见DECLARE HANDLER。 |
支持在PREPARE FROM语法后使用变量,可通过GUC参数b_format_behavior_compat_options进行配置,当取值包含b_format_plpgsql_execute时,将EXECUTE statement中的statement为PREPARE处理过的语句,而不是将statement视作一个sqlstring模板执行动态sql。 | ||
支持使用RETURNS CHARSET和RETURN ()语法创建函数,详见CREATE FUNCTION。 | ||
支持使用DECIMAL UNSIGINED ZEROFILL语法,创建一个只能存储非负数值,并且显示时总用零填充到指定长度的列。 | ||
函数 | 新增支持以下函数:
|
|
PostgreSQL兼容性 | SQL语法 | 支持CREATE SEQUENCE IF NOT EXISTS语法,当创建同名的SEQUENCE时不会报错,仅提示该Relation已存在。 |
支持临时表/全局临时表的ON COMMIT DROP语法。 | ||
数据类型 | 支持在类型转换时指定目标name数据类型的排序规则。详见COLLATE。 | |
SQL Server兼容性 | 字符集 | 支持字符集排序规则chinese_prc_ci_ai,从而达到在查询数据时忽略大小写的效果,详见排序规则。 |
PL/pgSQL | 支持在对表创建的语句级after触发器所关联的触发器函数中,查询inserted 和 deleted中间表。 |
特性优化
兼容性 | 功能模块 | 优化特性 |
---|---|---|
通用 | SQL引擎 | ROWNUM查询性能优化,原始ROWNUM查询在执行时会整表扫描,然后再判断ROWNUM的条件,执行效率较低,对于特定场景优化为LIMIT节点可以提前结束执行,以提高执行效率。 |
支持自适应排序,能够将不同数据类型的数据进行解析,并根据实际情况选择合适的排序算法。 | ||
SQL语法 | 在查询语句中,支持对左外连接进行优化,消除不需要的右表,提升查询效率。详见JOIN ELIMINATION。 | |
支持在特定场景下消除不影响最终查询结果的ORDER BY子句,从而增强优化器的能力,提高执行效率。详见ORDER BY ELIMINATION。 | ||
支持在查询语句中使用FOR UPDATE OF语法,仅做语法兼容,支持后跟列名,形如table_name.column_name的写法,但不支持schema.table_name、schema.table_name.column_name。 | ||
安全 | 审计日志强制保留180天,仅初始用户可进行删除。 | |
插件 | 适配pgcrypto插件升级至1.2版本。提供了对PGP加密数据进行armor相关操作的能力。 | |
Oracle兼容性 | PL/pgSQL | PL/pgSQL全局缓存性能提升,目前全局缓存会作为二级缓存,并且仅存储类型和语法树,提升了单会话中多次查询的性能及稳定性。 |
GUC参数 | 当参数behavior_compat_options取值为'proc_outparam_override'时,将出参也作为包函数重载的依据。即包内创建重载函数时,只要满足出参个数、出参名称、出参类型中的任意一点不同,即可创建成功。 |