GaussDB T相关参数的意义与调整
调整一: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]。单位:秒。
默认值:100FILE_OPTIONS
参数描述:在支持的平台上,支持文件系统开启或关闭Direct I/O或异步I/O功能,以及设置文件的打开方式。该参数别名为FILESYSTEMIO_OPTIONS。
取值范围:
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文件。
默认值:NONEINSTANCE_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频道
- 点赞
- 收藏
- 关注作者
评论(0)