云服务器内容精选

  • 系统视图 表6 系统视图 变更类型 序号 名称 变更描述 新增 1 SHOW_TSC_INFO 用于查看当前节点TSC换算信息。 2 SHOW_ALL_TSC_INFO 用于查看所有节点TSC换算信息。 3 GET_TSC_INFO 用于重新获取一次当前节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 4 GET_ALL_TSC_INFO 用于重新获取一次所有节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 5 PGXC_WLM_TABLE_DISTRIBUTION_SKEWNESS 用于展示实体表在DN所占磁盘空间倾斜率。 6 PGXC_STAT_OBJECT 查询全集群所有节点的pg_stat_object信息。 7 PG_GLOBAL_TEMP_ATTACHED_PIDS 查看全局临时表在当前节点占有资源的会话信息。 8 PGXC_GLOBAL_TEMP_ATTACHED_PIDS 查看全局临时表在所有节点占有资源的会话信息。 9 PG_STATS_EXT_EXPRS 用于查询保存在系统表pg_statistic_data中的表达式统计信息数据。 10 PV_RUNTIME_EXPRSTATS 基于pg_stat_get_runtime_exprstats函数建立,用于查询动态采样生成的表达式统计信息。 11 PG_PLAN_BASELINE 新增系统视图,保存sql和plan之间的绑定关系。 12 PG_STAT_OBJECT_EXT 新增系统视图,通过在pgxc_parallel_query内层为视图添加查询条件,从而加速返回pgxc_stat_object相应查询条件返回的结果。 修改 13 GS_WLM_SESSION_STATIS TICS 新增列stmt_type标识语句类型。 14 PGXC_WLM_SESSION_STATISTI CS 新增列stmt_type标识语句类型。 15 GS_WLM_SESSION_HISTORY 新增列stmt_type标识语句类型。 16 GS_WLM_SESSION_INFO 新增列stmt_type标识语句类型。 17 PGXC_WLM_SESSION_HISTORY 新增列stmt_type标识语句类型。 18 PGXC_WLM_SESSION_INFO 新增列stmt_type标识语句类型。 19 GS_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 20 PGXC_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 21 PG_TOTAL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 22 PGXC_TOTAL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 23 PGXC_RESPOOL_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 24 PGXC_WLM_USER_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 25 GS_WLM_SESSION_STATISTICS/PGXC_WLM_SESSION_STATISTICS 新增except_info显示语句触发的异常规则信息。 26 GS_WLM_SESSION_INFO/PGXC_WLM_SESSION_INFO 新增except_info显示语句触发的异常规则信息。 27 GS_WLM_SESSION_HISTORY/PGXC_WLM_SESSION_HISTORY 新增except_info显示语句触发的异常规则信息。 28 REDACTION_COLUMNS redaction_columns修改视图定义,新增字段policy_name。 29 PG_STATS PG_STATS视图中增加partname来表示分区。 30 PV_RUNTIME_A TTS TATS pg_catalog.pv_runtime_attstats视图中增加partname来表示分区。 31 GS_WLM_OPERATOR_STATISTICS 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 32 PGXC_WLM_OPERATOR_STATISTICS 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 33 PGXC_STAT_OBJECT 跟随pg_stat_object一起更改,预留字段extra1改名为last_autovacuum_csn。
  • 行为变更 表7 行为变更 变更类型 序号 名称 变更描述 新增 1 分区视图依赖变化 8.2.1以前版本,没有对select partition()或者partition for()语句的视图建立视图依赖,造成查询报错。 8.2.1版本后新增分区oid依赖,对于drop分区或者修改分区范围值在视图解耦场景下引发视图重建,非视图依赖场景下会报错。 修改 2 增加GTM上gtm_max_trans参数取值上限。 先将线程最大限制调大,可以给现网一个逃生通道,解决某些局点集群规模大,业务并发高,可能存在达到线程上限进而无法连接的问题。 3 max_process_memory CN调整为DN的一半。 4 Catchup流程 去掉了数据页Catchup的事务锁,Catchup不再和DDL之间有互等关系;增加了LwLock,通过事务提交的LwLock进行Catchup以及DDL业务之间的串行操作,避免Catchup访问到空文件。 5 备DN checkpoint时机 备DN的checkpoint不再等待15min按周期运行,而且redo到checkpoint点后,会强制执行一次checkpoint,避免大数据xlog导入场景下,备DN的Rto过长。 6 备DN文件关闭时机 备DN执行heap_xlog_newpage以及seq_redo时,首页面写入数据后,会强制关闭。 7 indexscan hint可包含indexonlyscan indexscan hint可包含indexscan和indexonlyscan;与indexonlyscan hint同时存在时,indexonlyscan优先生效。 8 大小写表达式不支持roughcheck 大小写表达式不再支持roughcheck,因cu的minmax基于C排序计算,下推会有结果集问题。 9 多count(distinct)重写时,使用CTE进行重写 重写行为发生变化,非share scan场景不影响后续展开过程,share scan场景生成stream CTE的计划。 10 TopSQL子语句监控 TopSQL子语句监控规格从递归打开,变更为仅记录第一层子语句。 11 ArrayLockFreeQueue 无锁队列初始化分配内存不会超过1GB。 12 Explain Explain结果集新增显示unique sql id。 13 Explain Explain+查询语句的unique sql id与查询语句相同。 14 GS/PGXC_WLM_SESSION_STATISTICS视图 GS/PGXC_WLM_SESSION_STATISTICS视图新增unique sql id字段。 15 GROUP BY后不需体现所有非聚合函数查询字段 8.1.3版本处理时会将非聚合函数查询字段补位min(xx)的形式,8.2.0及以上版本修改为取该列随机值。 8.2.0版本对于多列非聚合函数查询字段取值时取该列非NULL值,会出现结果集不同行场景,8.2.1版本修改为结果集为相同行。 16 alter function owner to superuser 禁止了sysadmin用户修改函数/存储过程的owner到系统用户的场景。保留系统用户change到系统用户的场景。 17 (+)连接顺序变化,会导致带有nvl等表达式的结果集产生变化 (+)连接顺序与Oracle看齐,原(+)连接顺序与join关联顺序相关,改写后带有nvl等相关表达式的关联条件顺序及结果集会有变化。 18 hstore表并发更新同一行会直接报错,不再等待后报错 hstore表并发更新同一行会直接报错,不再等待。 之前的行为是:(1)并发update同一行等待后报错;(2)并发delete同一行等待后成功;(3)并发delete和update同一行等待后报错。修改为统一的行为。 19 Catchup不再拿一级锁 Catchup不再拿一级锁。 20 连续的failover逻辑中,只有首次会进行从DN到备DN的数据同步 连续的failover逻辑中,只有首次会进行从DN到备DN的数据同步。 21 不同session同名临时表执行相同SQL语句时unique sql id一致 8.2.1以前版本不同session同名临时表schema name不同,直接使用后生成的unique sql id就也不同。8.2.1版本修改后不同session同名临时表根据schema name替换固定字符串,保证执行相同SQL语句时unique sql id一致。 22 细粒度容灾支持主集群degraded状态下备份 细粒度容灾在支持主集群degraded状态下备份,例外场景主集群主节点无正常CN导致的degraded不支持。 23 视图解耦 当访问到无效视图时,不触发自动重建动作,即不更新系统表,而是在本地展开
  • 系统表 表4 系统表 变更类型 序号 名称 变更描述 新增 1 PG_STAT_OBJECT autovacuum线程记录统计信息和autovacuum效果信息到系统表pg_stat_object中。 2 PG_PLAN_BASELINE 保存sql和plan之间的绑定关系。 3 PG_PROC_REDACT 新增系统表,记录手动不脱敏函数。 修改 4 GS_WLM_SESSION_INFO 新增字段stmt_type标识语句查询类型。 5 GS_RESPOOL_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 6 GS_WLM_USER_RESOURCE_HISTORY 新增网络收发速率监控(send_speed/recv_speed)。 7 PG_REDACTION_POLICY 新增policy_order字段,记录同一个表对象关联的脱敏策略的优先级次序,序号越大表示越后创建,优先级更高。 8 PG_REDACTION_COLUMN 新增policy_oid字段,记录当前脱敏列信息对应的是哪个脱敏策略。8.2.1版本后,脱敏策略的脱敏列是一对多的关系,脱敏策略的表对象是多对一关系。 9 PG_STAT_OBJECT 将预留字段extra1改名为last_autovacuum_csn。 10 GS_WLM_SESSION_INFO 增加unique_plan_id、sql_hash、plan_hash、use_plan_baseline字段。
  • 系统函数 表5 系统函数 变更类型 序号 名称 变更描述 新增 1 SHOW_TSC_INFO() 用于查看当前节点TSC换算信息。 2 GET_TSC_INFO() 用于重新获取一次当前节点的TSC换算信息,仅用于判断是否稳定,不更新内存信息。 3 TEST_TSC_INFO(time double, loops int) 用于测试TSC换算时间的准确性,其中时间不得大于60s,循环次数范围值[1,10]。 4 GET_FIRST_VALUE 返回当前列第一行值。 5 READ_GLOBAL_VAR 用于读取例如my.var的全局session级变量。 6 GS_QUERY_PENALTY(query_id) 新增手动降级函数,入参为query_id。 7 CURRENT_TEMP_SCHEMA 显示当前会话的临时schema。 8 GS_WAIT_CURRENT_ACTIVE_DDL_COMPLETE 等待所有线程的guc参数生效。 9 PGXC_WAIT_CURRENT_ACTIVE_DDL_COMPLETE 等待所有线程的guc参数生效。 10 GS_SWITCH_PART_RELFILENODE 用于交换两个指定分区的filenode。 11 REFRESH_HOT_STORAGE(text) 用于将指定冷热表的所有分区数据全部刷到OBS上。返回的数值为执行完该函数后,当前多温表中在DN上冷分区的个数。 12 REFRESH_HOT_STORAGE(text,text) 用于将指定冷热表的分区数据刷到OBS上。返回的数值为执行完该函数后,当前该分区在DN上冷分区的个数。 13 PG_QUERY_AUDIT_DETAILS 通过调用pgxc_query_audit或pg_query_audit来解析object_details、object_name字段。 14 PGXC_HSTORE_DELTA_INFO 提供系统函数pgxc_hstore_delta_info('relname'), 从CN上查询HStore表的Delta表上各种类型记录的数量、表的大小等信息,用于辅助定位问题。 15 COPY_PARTITION_STATS 将一个表的分区统计信息复制给另外一个不存在统计信息的分区。 16 UPDATE_PARTITION_RELSTATS 更新分区表的统计信息relpages和reltuples。 17 PG_GET_STAT_EXPRESSIONS 用于获取创建的表达式统计信息中表达式的文本表示形式。 18 GS_HSTORE_COMPACTION 手动触发hstore表的compaction,不受autovacuum_compaction_rows_limit控制,第一个参数传入表名,第二个参数设置小CU行数的阈值,第二个参数不设置则默认100。 19 PG_SCAN_RESIDUALFILES 新增残留文件扫描系统函数。 20 PG_GET_SCAN_RESIDUALFILES 新增获取已扫描的残留文件列表系统函数。 21 PGXC_LOCK_WAIT_STATUS() 集群锁等待关系查询。 22 PG_CANCEL_BACKEND(pid, msg) 中断pid会话时支持传入指定消息作为报错信息提示。 23 PG_GET_STATISTICSOBJDEF 新增pg_get_statisticsobjdef函数来获取表达式统计信息的创建语句。 24 PG_STAT_GET_ALL 输入namespace.relname,返回当前CN哈希表中pg_stat_object中该表对应的tuple。 25 PGXC_STAT_GET_ALL 输入namespace和relname,返回所有CN上哈希表中pg_stat_object中该表对应的tuple。 26 PGXC_STAT_OBJECT_BYNAME 新增系统函数,通过输入namespace.relname,加速返回pgxc_stat_object相应relname限定的记录。 27 PG_DUMP_PLANMGMT_INFO 实时刷入待保存计划,便于下一步处理bind、unbind、drop等操作。 28 PG_FOREIGN_INSERT_COMMIT 用于对extrenal schema表对象执行insert时CN给DN下发rename计划。 29 PG_SYSTEM_WITH_TOAST_CREATE 为pg_external_namespace系统表创建toast表。 30 PG_GET_EXTERNAL_SCHEMA_TABLE_OPTIONS 获取external schema表对象的option。 31 PG_GET_EXTERNAL_SCHEMA_TABLE_COL 获取external schema表对象的列元数据。 修改 32 GS_WLM_REBUILD_SCHEMA_HASH(oid) 修改入参从int改为OID。 33 GS_WLM_ALL_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 34 GS_GET_RESPOOL_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed)。 35 GS_WLM_USER_RESOURCE_INFO 新增网络收发速率监控(send_speed/recv_speed),新增入参username。 36 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增except_info显示语句触发的异常规则信息。 37 GS_TABLE_DISTRIBUTION 增加字段relpersistence: t:本地临时表 g:全局临时表 u:unlogged表 p:普通表 增加字段sessionid全局临时表的会话线程id。 38 PG_FAST_TABLE_SIZE 增加字段relpersistence: t:本地临时表 g:全局临时表 u:unlogged表 p:普通表 增加字段sessionid全局临时表的会话线程id。 39 PG_LIFECYCLE_TABLE_DATA_DISTRIBUTE 修改函数使得非管理员用户可以使用。 40 PG_QUERY_AUDIT 审计日志中新增object_details、result_rows、error_code列,修改pg_query_audit输出参数,新增输出三列。 41 PGXC_QUERY_AUDIT 审计日志中新增object_details、result_rows、error_code列,修改pgxc_query_audit输出参数,新增输出三列。 42 GET_COL_CU_INFO 新增参数dirty_percent,取值范围1-100,默认值70。 新增返回列dirty_cu_count,返回删除率大于dirty_percent的CU数量。 43 PG_STAT_GET_WLM_REALTIME_OPERATOR_INFO 新增字段:父节点id、执行次数、进度、网络、磁盘读写。 44 PG_STAT_GET_WLM_REALTIME_OPERATOR_INFO 新增入参queryid,查询指定queryid的语句信息。 45 TRUNC(timestamp with time zone)函数修改稳定性类型 该函数之前定义的为immutable,但是根据实际函数的应用场景应该是stable的,修改前在某些条件下会性能差。 46 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增列stmt_type字段标识语句类型。 47 PG_STAT_GET_WLM_REALTIME_SESSION_INFO 新增unique_sql_id字段。
  • 8.2.1.119 表4 8.2.1.119新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 窗口函数last_value支持ignore nulls功能,兼容Redshift。 - - - 解决问题 列存表使用try_cast函数报错。 try_cast函数未适配向量化执行引擎,导致列存表执行时报错。 8.2.1.100及以下版本 升级到8.2.1.119。 重启集群后,insert过慢长时间无法结束。 重启集群后,insert时需要使用索引扫描全量数据而影响性能。 8.2.1.100及以下版本 CCN计数异常时,未触发校准机制,导致CCN排队加剧。 CCN计数异常时,由于代码处理bug,未触发校准机制。 8.2.1.100及以下版本 JDBC中使用PBE协议插入数据,因主键冲突报错导致CN内存泄漏。 此场景下使用CN轻量化流程进行处理,事务结束后轻量化对象未释放造成内存堆积。 8.2.1.100及以下版本 SQL语句中设置了enable_stream_ctescan的GUC HINT,生成计划时CTE估算内存超阈值后,生成计划有误导致执行失败。 SQL语句中设置了enable_stream_ctescan的GUC HINT后,生成计划时CTE估算内存超阈值后,回退成非share scan的计划,但由于包含Hint回退不彻底,生成的计划包含错误节点,导致后续执行失败。 8.2.1.100及以下版本 备份metadata元数据到OBS上超过64MB时,恢复时概率性解压元数据报错,导致恢复失败。 备份metadata元数据超过64MB时,从OBS下载需要分段下载,下载最后一段buffers由于代码漏洞导致被丢弃,下载的metadata损坏,导致无法解压。 8.2.1.100及以下版本 hstore delta表analyze采样占用内存高。 hstore delta表analyze采样时,delta合并I记录占用内存较多,需要即时释放toast数据及delta数据反序列化占用的空间。 8.2.1.100及以下版本 CTE查询中有volatile函数,且只被引用一次时,不能下推,导致查询性能差。 821版本增加CTE查询中有volatile函数时不能下推的约束,但针对CTE只被引用一次的场景,需要放开约束,支持其下推。 8.2.1.100及以下版本 复杂查询的临时文件下盘,xfs系统预占空间过大,下盘文件多时导致集群只读。 复杂查询的临时文件下盘,xfs系统每个下盘文件预占16MB,下盘文件多时导致集群只读,需要减少下盘文件预占磁盘量。 8.2.1.100及以下版本
  • 8.2.1.223 表2 8.2.1.223新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 无 - - - 解决问题 集群hang检测触发集群切换。 信号重构前线程之前主要使用SIGUSR2这个不可靠信号用于IPC,重构后使用了可靠信号34、35两个信号。 在信号发送数量巨大的情况下,可靠信号的使用加大了timer创建失败的概率。 8.2.1.220 升级到8.2.1.223版本。 业务并发pgxc_cgroup_reload_conf出现core:GsCgroupIsClass。 指针访问未加锁,当reload函数重新加载该访问变量后,指针被修改,导致访问到野指针,导致core问题。 8.2.1.220 gs_table_distribution函数获取的表大小与真实值差距较大。 在分批读取pg_refilenode_size系统表的数据后进行计算时,当前批次计算得到的表大小会重复累加前面几批计算得到的表大小,导致gs_table_distribution函数获取的表大小与真实值差距较大。 8.2.1.220 执行SQL语句报错:Could not open file "pg_clog/000000000075"。 列存表进行VACUUM FULL后可能提前回收clog,导致主备切换后进行ANALYZE时无法访问clog文件。 8.2.1.119 修复临时变量未初始化导致的freememory大负数问题。 临时变量声明后,未赋值导致参数值非预期,后续再去扣减内存,出现大负数。 8.2.1.220 智能运维配置VACUUM FULL后,VACUUM FULL实际执行时间超过配置的时间区间。 调度器kill VACUUM FULL任务时插入了新的running任务,导致kill没有执行干净。 8.1.3.x
  • 8.2.1.220 表3 8.2.1.220新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 MERGE INTO支持指定分区。 支持plan management。 GDS导出外表支持容错参数compatible_illegal_chars。 窗口函数last_value支持ignore nulls功能。 - - - 解决问题 SQL执行性能不稳定,查询很慢,查询pgxc_thread_wait_status状态长时间是HashJoin - nestloop。 执行nestloop时每组partition行数有近10000,由于数据都不一样,但是仍继续执行nestloop。 8.1.3.300 升级到8.2.1.220版本。 数据库下有大量对象,普通用户查询该数据下的对象时,出现性能慢,且占用大量内存。 性能慢主要因为:列存模式下,有大量的internal_mask选项的表,导致权限校验函数被无效调用;列权限校验耗时长,导致计算量大。 8.2.1.119以前版本 表达式过多的场景,LLVM编译时间长导致CPU高。 启用LLVM时,在表达式过多的场景下,执行需要几个小时,关闭LLVM后只需十几分钟。当表达式个数多于1000时,会产生编译时间指数级递增的问题。 8.1.3.320 业务查询游标每次fetch2000笔数据,每次获取都比上次估算内存大了24MB,总数据量2000W条,查询无法执行。 PBE场景会复用之前生成的计划,导致估算内存每次递增一个固定值,估算内存不断膨胀导致CCN排队。 8.1.3.323 JSON类型查询内存泄露,导致重分布占用大量内存。 在jsonb的out函数中存在内存未释放问题,数据量大时出现堆积造成使用内存高。 8.1.3.x 执行客户业务sql,只要执行select * from with子句就会出现CN core。 ProjectionPushdown更新了rte,但是未基于新的rte更新var,导致后面处理quals的时候core。 8.1.3.323 DELETE语句WHERE条件数超过上限导致溢出。 DELETE语句WHERE条件数超过int16上限(32767)导致溢出,越界产生core。 8.1.2.x 扩容时重新拉起重分布进程,生成表清单的时候,卡住1小时以上。 生成表清单语句是查询系统表后插入pgxc_redistb,pgxc_redistb是分布式表,查询系统表都是在CN上执行,再插入分布式表时每条记录都要执行一个INSERT INTO ... VALUES语句,如果表数量非常大会非常耗时。 8.1.3.110 主键冲突事务回滚导致CN内存泄漏。 JDBC中使用PBE协议插入数据走CN轻量化,因主键冲突等原因执行报错。 一个事务内包含多个交叉CN轻量化查询,或者JDBC发送的unnamed statement,执行前会将全局的LightProxy对象保存到Portal上,事务结束场景LightProxy对象未释放造成内存堆积。 表现为CN的pv_session_memory_detail视图中查询到大量CachedPlanQuery内存上下文。 8.2.0.103 count distinct和union all场景下,实际使用内存大量超过估算内存。 多分支串行执行场景只考虑了下层算子返回数据时的内存,未考虑下层算子实际执行过程中的内存,导致内存估算偏小。 8.1.3.321 重启集群后,只有首次使用SQL调试的会话连接可以正常进行SQL调试,其他会话连接无法正常调试。DataStudio调试SQL打断点不生效。 调度入口变量在与数据库断开连接后会被释放,后续为空指针,无法进入调试逻辑。 8.1.1.x 8.1.3.x with recursive语句长时间运行未结束。 ARM环境下线程信息同步问题,导致变量更新不同步。 8.1.3.323 执行INSERT OVERWRITE指定分区,会覆盖全表。 PBE逻辑中拷贝计划信息时,没有拷贝INSERT OVERWRITE中的分区信息,导致最终对全表进行了FILENODE交换。 8.2.1.220以前版本 包含windowagg的子查询结果集异常。 生成bloomfilter过程中,没有考虑windowsagg,在join关联列非windowsagg分组列的场景下会减少分组数据,进而对窗口函数该分组的结果产生影响。 8.1.3.x 业务出现大量内存不足报错,视图显示占用内存高的SQL均为VACUUM FULL操作。 分区表在对每个分区分别进行VACUUM FULL时,漏掉了一部分内存的释放操作,导致内存不断累加和膨胀,直至报错。 8.1.3.x 逻辑集群执行重启超时。 CM内部默认使用了10个ip,需要动态适配。 8.2.1.200 更新版本后出现大量Wait poll time out错误。 LibcommCheckWaitPoll函数在传入-1时行为与预期不一致。 8.2.1.200
  • 8.2.1.225 表1 8.2.1.225新增功能/解决问题列表 类别 功能或问题描述 问题原因 问题出现版本 修复建议 新增功能 无 - - - 解决问题 GDS非法字符替换异常 GDS非法字符替换为特殊字符(�)时出现异常,替换过程中由于字符串长度发生变化,在后续处理时仍使用原长度,导致部分字符被截断,无法正确替换。 8.2.1.225以前版本 升级到8.2.1.225版本。 并发压测过程中,概率性出现gather性能劣化 当语句中存在stream算子时,在DN上会根据计划生成多个stream线程,其中最顶层的父线程为topConsumer线程,负责将子stream线程的数据整合并发送往CN。当语句执行结束时,topConsumer线程必须等待所有的子stream线程退出后才可以执行stream线程组的清理动作。 8.2.1.225以前版本