云服务器内容精选

  • 8.3.0集群版本数据库接口删除表 表1 日落系统函数和视图 类型 名称 说明 函数 pg_sync_cstore_delta(text) 列存merge delta表数据至主表,已废弃。由VACUUM DELTAMERGE xxx语法替代。 pg_sync_cstore_delta 列存merge delta表数据至主表,已废弃。由VACUUM DELTAMERGE xxx语法替代。 pgxc_pool_check 检查连接池中缓存的连接数据是否与pgxc_node一致,已废弃。 pg_delete_audit 删除审计日志函数,已废弃。不允许手动删除审计日志。 pg_log_comm_status 当前节点SCTP通信层内部结构的日志记录状态,已废弃。 pgxc_log_comm_status 所有节点SCTP通信层内部结构的日志记录状态,已废弃 signal_backend 已废弃。 pg_stat_get_realtime_info_internal 获取query级别的实时topsql信息,已废弃。由PGXC_WLM_SESSION_STATIS TICS 视图代替。 pg_stat_get_wlm_session_info_internal 获取query级别的topsql信息,已废弃。由pg_stat_get_wlm_realtime_session_info函数代替。 pg_stat_get_wlm_session_info 获取session信息,已废弃。由PGXC_WLM_SESSION_INFO视图代替。 pg_stat_get_wlm_statistics 获取session信息,已废弃。由PGXC_WLM_SESSION_INFO视图代替。 pg_user_iostat 获取用户的io信息,已废弃。由PGXC_TOTAL_USER_RESOURCE_INFO视图代替。 pg_stat_get_wlm_session_iostat_info 获取query的io信息,已废弃。由PGXC_WLM_SESSION_STATISTI CS 视图或PGXC_WLM_SESSION_INFO视图替代。 系统视图 gs_wlm_session_info_all 获取session信息,已废弃。由PGXC_WLM_SESSION_INFO代替。 pg_wlm_statistics 显示作业结束后或已被处理异常后的负载管理相关信息,已废弃。由PGXC_WLM_SESSION_INFO视图替代。 pg_session_iostat 获取session的io信息,已废弃。由PGXC_WLM_SESSION_STATISTICS视图替代。
  • 8.2.1.119 表3 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.220 表2 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.223 表1 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
  • PG_DATABASE PG_DATABASE系统表存储关于可用数据库的信息。 表1 PG_DATABASE字段 名称 类型 描述 datname name 数据库名称。 datdba oid 数据库所有者,通常为其创建者。 encoding integer 数据库的字符编码方式。 pg_encoding_to_char()可以将此编号转换为编码名称。 datcollate name 数据库使用的排序顺序。 datctype name 数据库使用的字符分类。 datistemplate boolean 是否允许作为模板数据库。 datallowconn boolean 如果为假,则没有用户可以连接到这个数据库。这个字段用于保护template0数据库不被更改。 datconnlimit integer 该数据库上允许的最大并发连接数,-1表示无限制。 datlastsysoid oid 数据库里最后一个系统OID 。 datfrozenxid xid32 用于跟踪该数据库是否需要为了防止事务ID重叠而进行清理。 为保持前向兼容,保留此字段,新增datfrozenxid64用于记录此信息。 dattablespace oid 数据库的缺省表空间。 datcompatibility name 数据库兼容模式。 datacl aclitem[] 访问权限。 datfrozenxid64 xid 用于跟踪该数据库是否需要为了防止事务ID重叠而进行清理。 父主题: 系统表
  • 应用实例 查看某数据库的所有者、兼容模式及访问权限: 1 SELECT datname,datdba,datcompatibility,datacl from pg_database where datname='database_name'; 查看指定数据库的编码方式: 1 SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname='database_name';
  • 场景介绍 GaussDB (DWS)使用对象标识符(oid)来保存对象之间的引用关系,这使得视图在定义的时候就绑定了其依赖的数据库对象的oid,不管视图名称怎么改变,都不会改变这层依赖关系。如果要对基表进行一些字段修改,会因为与视图字段存在强绑定而报错。如果要删除某个表字段或整个表,就需要连同其关联的视图一起使用cascade关键字删除,表字段删除完成或表重建后再依次重建各级视图,给用户的使用增加了很大的工作量,导致易用性较差。 为了解决这一问题,GaussDB(DWS)在8.1.0集群版本实现了视图的解耦,使得存在视图依赖的基表或其他数据库对象(视图、同义词、函数、表字段)可以单独删除,而其对应对象上关联的依赖视图依然存在,而在基表重建后,可以通过ALTER VIEW REBUILD命令重建依赖关系。而8.1.1集群版本在此基础上又实现了自动重建,可以无感知自动重建依赖关系,开启自动重建后会有锁冲突,因此不建议用户开启自动重建。
  • 使用方法 在管理控制台上创建集群,具体操作步骤请参考创建集群。 打开GUC参数view_independent参数。 视图解耦功能由GUC参数view_independent进行控制,默认关闭。使用时需要用户手动打开,可登录管理控制台后,单击集群名称,进入“集群详情”页面,单击“参数修改”页签,并在“参数列表”模块搜索view_independent参数,修改后保存。 使用DAS连接集群。在集群列表中找到所需要的集群,单击“操作”栏中的“登录”按钮,跳转至数据库管理服务(DAS)页面,填写登录用户名、数据库名称、密码信息后测试连接,测试无误后登录集群。更多详细步骤请参考使用DAS连接集群。 创建示例表t1并插入数据。 1 2 3 SET current_schema='public'; CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a); INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b'); 创建视图v1依赖表t1,创建视图v11依赖视图v1。查询视图v11。 1 2 3 4 5 6 7 8 9 CREATE VIEW v1 AS SELECT a, b FROM t1; CREATE VIEW v11 AS SELECT a FROM v1; SELECT * FROM v11; a --- 1 2 (2 rows) 删除表t1后,查询视图v11会因表t1不存在而报错,但视图是依旧存在的。 GaussDB(DWS)提供GS_VIEW_INVALID视图查询当前用户可见的所有不可用的视图。如果该视图依赖的基础表或函数或同义词存在异常,该视图validtype列显示为“invalid”。 1 2 3 4 5 6 7 8 9 10 11 DROP TABLE t1; SELECT * FROM v11; ERROR: relation "public.t1" does not exist SELECT * FROM gs_view_invalid; oid | schemaname | viewname | viewowner | definition | validtype --------+------------+----------+-----------+-----------------------------+----------- 213563 | public | v1 | dbadmin | SELECT a, b FROM public.t1; | invalid 213567 | public | v11 | dbadmin | SELECT a FROM public.v1; | invalid (2 rows) 8.3.0之前的历史版本集群,重建表t1后,视图自动重建。视图只有使用才能自动刷新。 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 CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a); INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b'); SELECT * from v1; a | b ---+--- 1 | 1 2 | 2 (2 rows) SELECT * FROM gs_view_invalid; oid | schemaname | viewname | viewowner | definition | validtype --------+------------+----------+-----------+--------------------------+----------- 213567 | public | v11 | dbadmin | SELECT a FROM public.v1; | invalid (1 row) SELECT * from v11; a --- 1 2 (2 rows) SELECT * FROM gs_view_invalid; oid | schemaname | viewname | viewowner | definition | validtype -----+------------+----------+-----------+------------+----------- (0 rows) 8.3.0及以上版本集群,重建表t1后,视图不会自动重建,执行ALTER VIEW REBUILD操作后视图才能自动刷新。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE t1 (a int, b int, c char(10)) DISTRIBUTE BY HASH (a); INSERT INTO t1 VALUES(1,1,'a'),(2,2,'b'); SELECT * from v1; a | b ---+--- 1 | 1 2 | 2 (2 rows) SELECT * FROM gs_view_invalid; oid | schemaname | viewname | viewowner | definition | validtype --------+------------+----------+-----------+-----------------------------+----------- 213563 | public | v1 | dbadmin | SELECT a, b FROM public.t1; | invalid 213567 | public | v11 | dbadmin | SELECT a FROM public.v1; | invalid (1 row) ALTER VIEW ONLY v1 REBUILD; SELECT * FROM gs_view_invalid; oid | schemaname | viewname | viewowner | definition | validtype --------+------------+----------+-----------+--------------------------+----------- 213567 | public | v11 | dbadmin | SELECT a FROM public.v1; | invalid (1 rows)
  • 步骤三:创建资源池 登录GaussDB(DWS) 管理控制台,在集群列表中单击集群名称,切换至“资源管理”页签。 单击“添加资源池”创建资源池。参见场景介绍的模型分别创建报表业务资源池pool_1和核心交易资源池pool_2。 修改异常规则。 单击创建好的pool_1资源池。 在异常规则中,修改“阻塞时间”和“执行所消耗时间”分别为1200s和1800s。 单击“保存”。 重复以上步骤,修改pool_2。 关联用户。 左侧单击“pool_1”资源池。 单击“关联用户”右侧的“添加”。 勾选报表业务对应的用户report_user,单击“确定”。 重复以上步骤,将核心交易的用户budget_config_user添加入pool_2的资源池中。
  • 步骤四:异常规则验证 使用用户report_user登录数据库。 执行如下命令查看用户report_user所属资源池。 1 SELECT usename,respool FROM pg_user WHERE usename = 'report_user'; 查询显示用户report_user所属资源池为pool_1。 校验资源池pool_1所绑定的异常规则。 1 SELECT respool_name,mem_percent,active_statements,except_rule FROM pg_resource_pool WHERE respool_name='pool_1'; 确认资源池pool_1所绑定的是异常规则rule_1。 查看当前用户异常规则的规则类型和阈值。 1 SELECT * FROM pg_except_rule WHERE name = 'rule_1'; 查询显示rule_1中所绑定的规则为3设置的“阻塞时间1200秒,运行时长1800秒”,则会终止查询。 PG_EXCEPT_RULE系统表存储关于异常规则的信息,该系统表仅8.2.0及以上集群版本支持。 同一条异常规则内的参数项相互之间为且的关系。 执行作业,当运行时长超过“阻塞时间1200秒,运行时长1800秒”时,报错提示作业被取消并提示所触发的异常规则限制。 作业执行过程中,如果出现类似“ERROR: canceling statement due to workload manager exception.”的报错信息,表示该作业超过异常规则的规则阈值限制被终止。若规则设置合理,那么就需要考虑从业务角度进行语句优化,减少执行时间。
  • 步骤二:连接集群并导入数据 参见使用gsql命令行客户端连接集群连接集群。 导入样例数据。参见导入TPC-H数据。 执行以下语句创建核心交易用户budget_config_user和报表用户report_user。 1 2 CREATE USER budget_config_user PASSWORD 'password'; CREATE USER report_user PASSWORD 'password'; 为测试需要,将tpch模式下所有表的所有权限授予两个用户。 1 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA tpch to budget_config_user,report_user; 查看当前两个用户的资源分配情况。 1 SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO where username in ('budget_config_user' , 'report_user');
  • 场景介绍 当有多个数据库用户同时在GaussDB(DWS)上执行SQL作业时,可能出现以下情况: 一些复杂SQL可能会长时间占用集群资源,从而影响其他查询的性能。例如一组数据库用户不断提交复杂、耗时的查询,而另一组用户经常提交短查询。在这种情况下,短时查询可能不得不在资源池中等待耗时查询完成。 一些SQL由于数据倾斜、执行计划未调优等原因,占用过多内存空间,导致其他语句因申请不到内存而报错,或占用过多磁盘空间,导致磁盘满而触发集群只读,无法进行写入。 为了提高系统整体吞吐量,避免坏SQL影响系统整体运行,您可以使用GaussDB(DWS)工作负载管理功能处理这类问题,例如,将经常提交复杂查询作业的数据库用户分为一类,为这类用户创建一个资源池并给这个资源池分配多一些的资源,之后将这类用户添加至这个资源池中,那么这类用户所提交的复杂作业只能使用所创建资源池拥有的资源;同时再创建一个占用资源较少的资源池分配给执行短查询的用户使用,这样两种作业就能够同时执行互不影响。 以A用户为例,该用户业务场景主要分为联机交易(OLTP)和报表分析(OLAP)两大类,其中报表服务的优先级相对较低,在合理的情况下优先保障业务系统的正常运行。业务系统中运行的SQL分为简单SQL和复杂SQL,大量复杂SQL的并发执行会导致数据库服务器资源争抢,简单SQL的大量并发对服务器不构成持续压力,短时间内可执行完成,不会造成业务堆积。其中报表服务中运行的SQL以复杂SQL居多,整体业务逻辑相对复杂,在数据库层面需要分别对核心交易和报表服务进行合理的资源管控,以保障业务系统正常运行。 报表分析类业务的优先级和实时性相对较低,但是复杂度更高,为有效进行资源管控,将报表分析和核心交易业务进行数据库用户分离,例如核心交易业务使用数据库用户budget_config_user,报表分析业务使用数据库用户report_user。针对交易用户和报表用户分别进行CPU资源和并发数控制以保障数据库稳定运行。 结合报表分析业务的负载调研、日常监控和测试验证,50并发以内的复杂报表SQL不会引起服务器资源争抢,不会引起业务系统卡慢,配置报表用户可使用20%的CPU资源。 结合核心交易业务的负载调研、日常监控和测试验证,100并发以内的查询SQL不会对系统造成持续压力,配合交易用户可使用60%的CPU资源。 报表用户资源配置(对应资源池pool_1):CPU=20%,内存=20%,存储=1024000MB,并发=20。 交易用户资源配置(对应资源池pool_2):CPU=60%,内存=60%,存储=1024000MB,并发=200。 设置单个语句最大内存使用量,超过使用量则报错退出,避免单个语句占用过多内存。 异常规则中设置阻塞时间=1200S,执行所消耗时间1800s,强制终止。
  • 使用gsql元命令导入数据 \copy命令在任何gsql客户端登录数据库成功后可以执行导入数据。与COPY命令相比较,\copy命令不是读取或写入数据库服务端的文件,而是直接读取或写入本地文件。 \copy命令不如SQL COPY命令有效,因为所有的数据必须通过客户端/服务器的连接来传递。对于大量的数据来说SQL命令可能会更好。 有关如何使用\copy命令的更多信息,请参阅使用gsql元命令\COPY导入数据 。 \COPY只适合小批量、格式良好的数据导入,容错能力较差。导入数据应优先选择GDS或COPY。
  • 使用INSERT多行插入 在导入时,如果不能使用COPY命令,可以根据情况使用多行插入。多行插入是通过批量进行一系列插入而提高性能。 下面的示例使用一条INSERT语句向一个三列表插入三行。这仍属于少量插入,只是用来说明多行插入的语法。创建表的步骤请参考创建表。 向表customer_t1中插入多行数据: 1 2 3 4 INSERT INTO customer_t1 VALUES (6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James'); 有关更多详情和示例,请参阅INSERT。
  • 使用GDS导入数据 数据倾斜会造成查询表性能下降。对于记录数超过千万条的表,建议在执行全量数据导入前,先导入部分数据,以进行数据倾斜检查和调整分布列,避免导入大量数据后发现数据倾斜而造成调整成本高。详细请参见查看数据倾斜状态。 为了优化导入速度,建议拆分文件,使用多GDS进行并行导入。单个导入任务可以拆分成多个导入任务并发执行导入;多个导入任务使用同一GDS时,可以使用-t参数打开GDS多线程并发执行导入。GDS建议挂载在不同物理盘以及不同网卡上,避免物理IO以及网络可能出现的瓶颈。 在GDS IO与网卡未达到物理瓶颈前,可以考虑在GaussDB(DWS)开启SMP进行加速。SMP开启之后会对对应的GDS产生成倍的压力。需要特别说明的是:SMP自适应衡量的标准是GaussDB(DWS)的CPU压力,而不是GDS所承受的压力。有关SMP的更多信息请参见SMP手动调优建议。 GDS与GaussDB(DWS)通信要求物理网络畅通,并且尽量使用万兆网。千兆网无法承载高速的数据传输压力,极易出现断连。即使用千兆网时GaussDB(DWS)无法提供通信保障。满足万兆网的同时,数据磁盘组I/O性能大于GDS单核处理能力上限(约400MB/s)时,方可寻求单文件导入速率最大化。 并发导入场景与单表导入相似,至少应保证I/O性能大于网络最大速率。 GDS跟DN的数据比例建议在1:3至1:6之间。 为了优化列存分区表的批量插入效率,在批量插入过程中会对数据进行缓存后再批量写盘。通过GUC参数“partition_mem_batch”和“partition_max_cache_size”,可以设置缓存个数以及缓存区大小。这两个参数的值越小,列存分区表的批量插入越慢。当然,越大的缓存个数和缓存分区,会带来越多的内存消耗。