GaussDB T相关参数的意义与调整

网友投稿 1030 2022-05-28

调整一:GS-00104:Session stack overflow

错误原因:执行INSERT、SELECT或UPDATE等命令时,会占用线程数据栈用于消息缓存,该线程数据栈的大小受_AGENT_STACK_SIZE参数控制,

当VALUE中的字段值大小超过_AGENT_STACK_SIZE取值时,上报此错误。

解决办法:请按照如下方法估算一次参数可处理的数据量:

_AGENT_STACK_SIZE = 每个字段值大小 × 参数个数 + 两次push行数据 + 类型转换

说明:

单行数据最大为64000字节,类型转换共需要1600字节。_AGENT_STACK_SIZE参数详情请参见8.1.5.4 线程处理。

根据估算结果,分批次处理适量数据。

2 )执行如下命令调整_AGENT_STACK_SIZE参数取值,并重启数据库使其生效:

ALTER SYSTEM SET _AGENT_STACK_SIZE = value;

调整二:CBO (Cost-Based-Optimize)

参数描述: 成本优化器开关。 ON开启,OFF关闭。

当CBO为ON时,并且表有统计信息时,SQL会根据CBO的规则生成执行计划,否则根据RBO的规则生成执行计划。

当CBO开关发生切换时,SQL-POOL中所有缓存的执行计划全部失效。

取值范围:

ON:开启

OFF:关闭

默认值: OFF

调整三:UNDO_RETENTION_TIME

参数描述:UNDO的保留时间,保留时间设置过短会导致查询出现“快照太旧”错误。

取值范围:整数,(0,2^32-1]。单位:秒。

默认值:100

调整四:线程参数调整

1)_THREAD_STACK_SIZE

参数描述:设置线程栈的大小。

取值范围:正整数,[256K,7.5M],单位为字节。

默认值:512K

2)_AGENT_STACK_SIZE

参数描述:设置线程数据栈的大小,线程数据栈用于消息缓存,可缓存的最长消息为该值的1/2。

取值范围:正整数,[512k,4G),单位为字节。

默认值:1MB

3)_LOB_MAX_EXEC_SIZE

参数描述:设置lob操作长度大小。

l 用于支持LOB类型进行表达式运算(字符处理函数、LIKE、排序等),内存从线程数据栈上申请。 配置大小不能超过_AGENT_STACK_SIZE。

取值范围:正整数,[0,4G),单位为字节。

默认值:65534字节

4)OPTIMIZED_WORKER_THREADS

参数描述:设置最优工作线程个数。

l 当会话数超过该参数设置值,会切换成会话和线程分离的模式,否则为绑定模式。

l OPTIMIZED_WORKER_THREADS可设置为小于或等于MAX_WORKER_THREADS的任意数,重启数据库服务器后MAX_WORKER_THREADS值不变。

l 设置OPTIMIZED_WORKER_THREADS大于现有MAX_WORKER_THREADS时须同时手动设置MAX_WORKER_THREADS参数值。

l 最大值不建议超过SESSIONS的配置值,否则会造成线程资源浪费。

l 当该值设置过大时,会占用更多的CPU和线程资源,在资源不足的情况下可能会导致数据库异常。

l 每个线程占用内存0.5M+。

l 由于安全函数有传入内存2G的限制,设置该线程数上限为10000。

取值范围:正整数,[2,10000]。

默认值:100

调整五:会话级调整参数

1)_SPIN_COUNT

参数描述:SPIN LOCK获取的等待次数,属于内部的高级参数,在业务并发冲突率较高的应用场景情况下,提高等待次数,有利于减少并发事务失败的概率。

取值范围:整数,[0,2^32-1]。

默认值:1000

2)_INDEX_BUFFER_SIZE

参数描述:设置单个session上的索引缓冲区大小,调大有利于减少索引在磁盘的读取次数。

索引缓冲区缓存page数量 = _INDEX_BUFFER_SIZE / PAGE_SIZE。

取值范围:正整数,[16K,32T] ,单位为字节。

默认值:8M

3)_PRIVATE_KEY_LOCKS

参数描述:每个session最多保留的key锁数量。

事务结束时,session最多保留_PRIVATE_KEY_LOCKS个key锁,并将剩下的锁释放并还给全局锁区,以备该session执行新的事务时复用。

取值范围:整数,[8,128]。

默认值:8

4)_PRIVATE_ROW_LOCKS

参数描述:每个session最多保留的行锁数量。事务结束时,session最多保留_PRIVATE_ROW_LOCKS个行锁,并将剩下的锁释放并还给全局锁区,以备该session执行新的事务时复用。

取值范围:整数,[8,128]。默认值:8

5)MERGE_SORT_BATCH_SIZE

参数描述:merge join算法中,每批次参与sort join的记录数。

取值范围:正整数,[100000,2^32-1]

默认值: 100000

6)LONGSQL_TIMEOUT

参数描述:慢查询的时间阈值,仅当慢查询日志打开时有效。DML语句执行时间超过此配置项,将被记录到慢查询日志中。

取值范围:整数,单位可支持毫秒、秒。

单位为秒时,取值范围是[0s,2^32-1s]。

单位缺省时默认为秒,取值范围是[0,2^32-1] 。

单位为毫秒时,取值范围是[0s,2^32-1s] ,即[0ms,(2^32-1)*1000ms]。

默认值:10

7)INTERACTIVE_TIMEOUT

参数描述:ZSQL连接会话的超时时长。当一个ZSQL会话在超时时长内没有任何操作时,该会话将被关闭。

取值范围:正整数,[1,2^32-1] ,单位:秒。

默认值:1800

8)UPPER_CASE_TABLE_NAMES

参数描述:只读参数,是否将对象名称转为大写。

对象名包括:表名、列名、视图名、存储过程名、自定义函数名、触发器名、表空间名、索引名、约束名。

取值范围:

TRUE:转为大写,此时SQL语句大小写不敏感。

FALSE:不转为大写,此时SQL语句大小写敏感。

默认值:TRUE

9)MAX_ALLOWED_PACKET

参数描述:通信允许的最大报文大小

取值范围:[96K,64M],单位为字节。

默认值:64M

调整六:软解析

1)_DISABLE_SOFT_PARSE

参数描述:是否禁用软解析功能。

取值范围:

l TRUE:禁用软解析功能。禁用情况下8.2.4.52 DV_SQLS视图功能不可用。

l FALSE:启用软解析功能。启用情况下会缓存SQL的解析树,以提速相同SQL语句执行速度,同时支持8.2.4.52 DV_SQLS视图功能。

默认值:FALSE

2)_HINT_FORCE

参数描述:是否打开强制优化开关。

取值范围:整型。

0:禁用所有强制优化功能。

1:启用ordered强制优化。

2:启用nested loop强制优化。

4:启用merge强制优化。

8:启用hash强制优化。

如果需要同时启用以上多种强制优化,则配置为多项之和。比如同时启用ordered和

hash,则配置为9。

默认值:0

调整七:实例级其他参数

UNDO_RETENTION_TIME

参数描述:UNDO的保留时间,保留时间设置过短会导致查询出现“快照太旧”错误。

取值范围:整数,(0,2^32-1]。单位:秒。

默认值:100

FILE_OPTIONS

参数描述:在支持的平台上,支持文件系统开启或关闭Direct I/O或异步I/O功能,以及设置文件的打开方式。该参数别名为FILESYSTEMIO_OPTIONS。

取值范围:

GaussDB T相关参数的意义与调整

l NONE:禁用Direct I/O和异步I/O,并以O_SYNC方式打开redo文件。

l DIRECTIO:redo文件启用Direct I/O,并以O_SYNC方式打开redo文件。

l FULLDIRECTIO:所有文件启动DIRECT I/O,并以O_SYNC方式打开redo文件。

l ASYNCH:启用异步I/O,并以O_DSYNC方式打开redo文件。如果参数值配置为ASYNCH,必须保证系统安装了libaio库。

l DSYNC:以O_DSYNC方式打开DATAFILE文件,并以O_DSYNC方式打开redo文件。

l FDATASYNC:以默认方式打开DATAFILE文件,即二进制和读写方式,并以O_DSYNC方式打开redo文件。

l SETALL:启用Direct I/O和异步I/O,并以O_DSYNC方式打开redo文件。

默认值:NONE

INSTANCE_NAME

参数描述:实例名称。

取值范围:字符串。

默认值:zenith

4)BUF_POOL_NUM

参数描述:设置data buffer的分区数。

取值范围:正整数[1, 128]

默认值:1

CR_MODE

参数描述:表/索引的MVCC机制。

取值范围:

l ROW:采用行级MVCC。

l PAGE:采用页级MVCC。

默认值:PAGE

调整八:流控开关

_ENABLE_QOS

参数描述:是否打开流控开关。在并发性能要求较高的场景下,打开流控开关,可以让数据库达到最优性能。

取值范围:

TRUE:打开流控开关。

FALSE:关闭流控开关。

默认值:FALSE

_QOS_CTRL_FACTOR

参数描述:设置单个CPU的并发线程最大个数,当并发线程数达到最大个数时,之后的线程会进入睡眠模式,排队等待进入激活模式。

并发线程的最大个数=FACTOR*CPU核数。此参数只在流控开关打开时有效。

取值范围:浮点型,(0,5]。

默认值:0.75

调整九: 日志目录

LOG_HOME

参数描述:日志的根目录。

更改日志根目录时,RUN日志(即运行日志)、DEBUG日志(即调试日志)、AUDIT日志(即审计日志)、LONGSQL日志(即慢查询日志)的目录也随之改变。例如,

LOG_HOME = /home/omm/data/log

,则RUN日志的目录为/home/omm/data/log/run

,DEBUG日志的目录为/home/omm/data/log/debug

,AUDIT日志的目录为/home/omm/data/log/audit

,LONGSQL日志的目录为/home/omm/data/log/longsql。

但是,ALARM日志(即告警日志)有单独的日志目录(ALARM_LOG_DIR),不受日志根目录影响。

取值范围:字符串。最大长度163。

默认值:$GAUSSLOG/db_log

调整10:事务

1)DB_ISOLEVEL

参数描述:设置事务的隔离级别,保证不读脏数据。

取值范围:

l RC:Read Committed,一个sql语句内读取到的数据,是同一个版本的快照数据。

l CC:Current Committed,一个sql语句内读取到的数据,每一行都是读取时刻的最新已提交数据,所有读取出来的数据不再是一个快照数据。

默认值: RC

2)COMMIT_MODE

参数描述:COMMIT_MODE是一个高级参数,用于设置日志写入磁盘的方式,包括立即处理、批量处理两种。

取值范围:

l IMMEDIATE:立即处理。对事务不进行缓存,接收到后立即写入磁盘。此方式可以减少事务的吞吐量。

l BATCH:先缓存,再批量处理。先缓存事务的redo到Log Buffer中,达到一定量后再批量写入磁盘。

默认值:IMMEDIATE

3)COMMIT_WAIT_LOGGING

参数描述:进行事务操作时,是否等待相关redo日志写入磁盘。

取值范围:

l WAIT:待相关redo日志写入磁盘后,再进行事务操作。

l NOWAIT:无需等待相关redo日志写入磁盘,即可进行事务操作。

默认值:WAIT

4)LOCK_WAIT_TIMEOUT

参数描述:设置事务等待的阈值,等待时间超过该阈值则报错。

取值范围:整数,[0,2^32-1],单位:毫秒。

默认值: 0,表示无限等待。

5)_UNDO_SEGMENTS

参数描述:undo段数量,其决定并发能力以及总事务的数量。

该参数只能在新建数据库时设置,其他情况请勿修改。

启动数据库后该参数为只读,如需修改参数,需停止数据库后修改配置文件,重新建

库后生效。

取值范围:整型,(1,1024]。

默认值:32

本文转自“墨天轮”社区GaussDB频道

数据库 GaussDB

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【网络通信与信息安全】之深入解析从输入一个URL到页面加载完成的过程
下一篇:2020-06-19:多线程消费kafka的时候,开发、测试环境都能每秒10w+,但是正式环境只能1w/s,正式环境不能重启,看
相关文章