GBase 8a最佳实践(四)参数调优(上)

原文链接:

https://www.gbase.cn/community/post/3929

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

1.1  概述

GBase 8a 集群在不同的场景应用中的优化配置方法存在差异,无法使用一套固定 的参数配置来满足所有的场景。本章节参数调优是根据积累在不同的项目中、不同的业务场景中出现的参数优化经验给出的通用设置原则。

1.2  线程池和并行度参数

1.2.1 调大线程栈大小避免进程宕机

thread_stack

在 SQL 语句较大的情况下,可能因为线程栈(thread_stack)太小导致爆栈宕机。 需要配置 gcluster 及 gnode 的线程栈大小:
推荐 gcluster 的 thread_stack 为 4M(953 版本默认值为 4M);
推荐 gnode 的 thread_stack 为 512K(默认 256K)。如依然发生爆栈问题,则继 续调大该参数。
在 gcluster 和 gnode 的配置文件中,增加配置 thread_stack = 524288,配置后需要重启服务。

1.2.2  常用并行度参数调整提升性能

线程池并行度参数在采用默认值的情况下,可能会因服务的线程池较小而单个 SQL 任务的并行度太高,造成并发场景下后发起的任务无法获得充足的线程池而单线程 执行。严重情况下,会造成较多的 sys cpu 占用。可以根据实际情况适当调整。

gcluser_max_thread_in_pool

参数含义为集群层连接集群内各节点 gnode 的连接池中连接线程的数量,即全局 连接线程池大小,默认设置为 600。
全局线程池使用较少,主要逻辑都走异步 API,通常保持默认值即可。
当集群规模较大、SQL 并发任务较多时,如发现连接池的线程数消耗越高,此时需 要调整 gcluser_max_thread_in_pool 参数,通常建议不超过 2000。取值过大也会造成性能问题。

gbase_parallel_degree

用于配置单个 SQL 执行时的并行度大小,默认取值为 0,推荐配置为 4~8。
值为 0 时,单sql 任务的并行度使用 CPU 核数的一半。当值大于线程池数量时,则使用线程池数量。
如:gbase_parallel_degree=0,CPU 核数为 32,那么单 sql 的并行度则为 16。

gbase_loader_parallel_degree

每个加载任务需要多少线程执行,gbase_loader_parallel_degree 参数用于配置单 个加载任务在 gnode 上的并行度大小,默认取值为 0,即使用 CPU 核数的一半。推荐配置为 4~8。
值为 0,则使用 CPU 核数一半,当值大于线程池数量时,则使用线程池数量。

gbase_parallel_max_thread_in_pool

指线程池中的线程总数,用于配置线程池大小,默认为 CPU 核数的 2 倍,在每个服 务器上部署 1 个 gnode 节点的情况下推荐该配置为 CPU 核数的 4~8 倍。
每个任务从线程池中获取线程并执行,当线程池中空闲线程不够时,会新创建 1 个 线程用于执行(内部串行)串行执行。

thread_pool_size

表示用于接收客户端连接的线程池个数,影响吞吐量。

1.2.3  gcluster 下发 SQL 任务数控制

gcluster_serial_exec_query

gcluster_serial_exec_query     参数默认取 值 为 0, 在打开gcluster_enable_serial_load 的情况下,gcluster_serial_exec_query 参数取值表 示的是允许 gcluster 下发的 SQL 任务个数,默认控制 select 及 insert select 的下 发数量。
此外,资源管理也具有控制 SQL 任务数下发的功能。

gcluster_enable_serial_load

gcluster_enable_serial_load 参数为开关参数,默认取值为 0 关闭,打开参数后支 持 gcluster 下发 SQL 任务数控制,即打开后 gcluster_serial_exec_query 参数才 起效。
gcluster_enable_serial_load  =  1  时打开参数 , load 下发受gcluster_serial_exec_query 参数控制。否则不受控制。

1.3  加载参数

1.3.1  提升加载性能参数

gcluster_loader_max_data_processors

gcluster_loader_max_data_processors 为单个数据加载任务中最大加载机的个 数,默认取值为 16。通常建议 gcluster_loader_max_data_processors 取值为 4~8。
在使用 sftp 加载时,需要特别关注 ssh 连接个数限制,可能因为加载需要连接sftp 的加载机个数太多造成超过 ssh 允许的最大连接数而导致加载失败问题。可以调整 sshd 的配置文件,调整 maxstartup、maxsession 等参数。

1.3.2  加载任务负载均衡设置

gcluster_load_rebalance_seed

gcluster_load_rebalance_seed 参数表示不同 data 节点上的加载任务数最大差值 大于等于参数值时会启动 node 加载任务负载均衡,默认值为 5。如果取得更好的 均衡效果,可以将参数 gcluster_load_rebalance_seed 设置为 2 或者 1。
集群每个加载任务会随机选取不超过 gcluster_loader_max_data_processors 个 data 节点作为加载机。在 gcluster_load_rebalance_seed 取默认值 5 的情况下, 如果并发了 5 加载任务,都随机选取第10个节点作为加载机。此时第 10 个data节点上 load 任务数为 5,同时也存在部分节点上 load 任务数为 0,data 节点间最 大任务数之差为 5。当第 6个加载下发时,根据 gcluster_load_rebalance_seed 参 数条件,不再选取第 10 个节点作为加载机,而是选取加载任务差值小于 5 的节点 作为加载机。

1.3.3  加载单行最大长度设置

gbase_loader_max_line_length

gbase_loader_max_line_length 参数用于指定数据加载文件中允许的单行的最大 长度,默认为 4M。
GBase 8a 集群能够加载的最大的数据行长度为 4M,当待加载的数据文件中存在 超过 4M 大小的行时,加载任务将失败并报错“Line length xxxx is more than gbase_loader_max_line_length(4194304)”,通过调整gbase_loader_max_line_length 参数为更大取值,可以让加载任务执行成功,超过4M 大小的行则作为错误数据跳过。

1.3.4  加载读超时时间参数设置

gbase_loader_read_timeout

gbase_loader_read_timeout 参数用于指定读取 FTP/HTTP/SFTP 文件的超时时间,如果填充一个数据块(8M)的时间超过此参数值,加载任务将报错停止。0 表示永不超时。默认取值为 300 秒。
在较差网络环境下可调大概参数,避免出现 read operation timeout 超时错误。

1.4  数据传输参数

1.4.1  结果集传输参数调整避免写文件失败

gcluster_send_client_data_timeout

gcluster_send_client_data_timeout 参数为集群向客户端发送结果集数据时的超 时参数,取值范围[0,100000],单位秒,默认为 30 秒。当参数设置为 0 时表示不 设置超时,结果集发送无限等待,只有发送成功或失败才返回。
在网络环境较差场景下,或通过JDBC等开发接口获取结果集时增加了处理逻辑造成耗时较长时,如JAVA程序遍历RESULT后再将结果写到文件中,JAVA 写文件的过程可能超过3秒 , 就会出现连接失败问题 (报错“com.gbase.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure” ) 。此时可 以通过调 大gcluster_send_client_data_timeout 参数规避。

1.4.2  Insert values 一次写入超大数据设置

max_allowed_packet

在进行超大数据的写入时,如通过 insert values 方式一次性写入数万行记录,需要调大 max_allowed_packet 参数。
可通过 set global max_allowed_packet = 134217728 的方式配置该参数。
注意:max_allowed_packet 参数必须写在配置文件的[gbased]下,[gbasedump] 之上。

1.4.3  节点间数据传输参数

_gbase_sis_ctq_threads

用于 insert select,load 接收端数据处理的线程数,缺省值未 0,使用 CPU 核数, 当该线程数不够用时,会创建临时线程协助处理,可以使用 show engine express status 查看各个节点间的连接和session 情况,以及发送和接收任务的情况。

_gbase_sis_ctq_threads 参数用于指定 CTQ 的个数(CommanTaskQueue 的简 写,待执行的命令队列),一个 CTQ 对应一个任务执行器(Executor),即该参数可理解为 Executor 个数。参数默认取值为 CPU 核数的 2 倍。建议配置为 512。
在大规模集群并发场景下,CTQ 数不足会造成没有充足的任务执行器进行 SQL 提交等操作,需要反复进行 CTQ 数的判断和生成临时的执行器,两次判断之间间隔 60 秒,从而出现性能问题。

_gbase_rep_receive_buffer_size

用于 insert 和 load 在节点间传输数据使用,表示某个节点与其它所有节点的连接 中,最大等待处理的数据大小,单位为 M。
_gbase_gns_queue_size表示每个发送端 session  的消息队列长度,满了之后会等待并重试。默认取值为 4096,在出现 GNS 数据发送性能异常时,可调大该参数。

1.5问题排查时使用参数

1.5.1   中间临时结果保留参数

gcluster_executor_debug

gcluster_executor_debug 参数打开后,可以保留 SQL 执行过程中的临时表(位 于 gctmpdb 数据库下)。该参数用于进行问题分析排查。默认关闭。

1.5.2   临时文件存储路径参数配置

tmpdir

tmpdir 参数用于指定计临时文件的存储路径,默认为/tmp 路径,建议调整到安装 目录的独立目录下,比如/opt/tmp_gcluser 和 /opt/tmp_gnode。(单机安装路径可配置/opt/gnode/tmp 目录下。)
注意:tmpdir 修改的目录需要已经存在并且系统 DBA 用户 gbase 拥有读写权限,

但是不要放到$GCLUSTER_BASE 和$GBASE_BASE 目录下,否则节点替换会因为 tmp 目录不存在而【失败】, 在节点替换时,需要提前在新机器上创建 tmpdir 目录并赋予系统用户 gbase 的读写权限,否则节点替换操作会失败。
 

原文链接:

https://www.gbase.cn/community/post/3929

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值