1. 锁管理
在 GaussDB 中,并发执行的事务由于竞争资源会导致死锁。管理事务锁的机制的一些参数。
deadlock_timeout
参数说明:设置死锁超时检测时间,以毫秒为单位。当申请的锁超过设定值时,系统会检查是否产生了死锁。
- 死锁的检查代价是比较高的,服务器不会在每次等待锁的时候都运行这个过程。在系统运行过程中死锁是不经常出现的,因此在检查死锁前只需等待一个相对较短的时间。增加这个值就减少了无用的死锁检查浪费的时间,但是会减慢真正的死锁错误报告的速度。在一个负载过重的服务器上,你可能需要增大它。这个值的设置应该超过事务持续时间,这样就可以减少在锁释放之前就开始死锁检查的问题。
- 设置 log_lock_waits 时,这个选项也决定了在一个日志消息发出关于锁等待以前要等待的时间。当需要调查锁延迟时,请设置比正常 deadlock_timeout 更小的值。
取值范围:整型,最小值为1
- 默认值:1s
partition_lock_upgrade_timeout
参数说明:分区上的锁级别由允许读的ExclusiveLock升级到读写阻塞的AccessExclusiveLock时,会进行尝试性的锁升级,partition_lock_upgrade_timeout指示了尝试锁升级的超时时间。
- 在分区表上进行MERGE PARTITION和CLUSTER PARTITION操作时,都利用了临时表进行数据重排和文件交换,为了最大程度提高分区上的操作并发度,在数据重排阶段给相关分区加锁ExclusiveLock,在文件交换阶段加锁AccessExclusiveLock。
- 常规加锁方式是等待加锁,直到加锁成功,或者等待时间超过lockwait_timeout发生超时失败。lockwait_timeout参数是全局唯一的,不是会话级设置,若修改需要重启服务器程序。
- 在分区表上进行MERGE PARTITION或CLUSTER PARTITION操作时,进入文件交换阶段需要申请加锁AccessExclusiveLock,加锁方式是尝试性加锁,加锁成功了则立即返回,不成功则等待50ms后继续下次尝试,加锁超时时间使用会话级设置参数partition_lock_upgrade_timeout。
- 特殊值:若partition_lock_upgrade_timeout取值-1,表示无限等待,即不停的尝试锁升级,直到加锁成功。
- 单位:秒
取值范围:整型,最小值-1,最大值3000。
- 默认值:1800
max_locks_per_transaction
参数说明:控制每个事务能够得到的平均的对象锁的数量。
- 共享的锁表的大小是以假设任意时刻最多只有 max_locks_per_transaction*(max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在数据库启动的时候设置。
- 增大这个参数可能导致 GaussDB 请求更多的 System V 共享内存,有可能超过操作系统的缺省配置。
- 当运行备机时,请将此参数设置不小于主机上的值,否则,在备机上查询操作不会被允许。
取值范围:整型,最小值为10
- 默认值:64
max_pred_locks_per_transaction
参数说明:控制每个事务允许断定锁的最大数量,是一个平均值。
- 共享的断定锁表的大小是以假设任意时刻最多只有 max_pred_locks_per_transaction * (max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在服务器启动的时候设置。
- 增大这个参数可能导致 GaussDB 请求更多的 System V 共享内存,有可能超过操作系统的缺省配置。
取值范围:整型,最小值为10
- 默认值:64
2. 容错性
当数据库系统发生错误时,以下参数控制服务器处理错误的方式。
exit_on_error
参数说明:控制终止会话。
取值范围:布尔型
- on 表示任何错误都会终止当前的会话。
- off 表示只有 FATAL 错误才会终止会话。
- 默认值:off
说明:
当pooler_mode=on,即开启连接池功能时,请慎用此参数,打开它后如果遇到ERROR级别错误,会导致错误级别提升至FATAL,进而使连接池后台连接退出。
restart_after_crash
参数说明:设置为 on,后端进程崩溃时,GaussDB 将自动重新初始化此后端进程。
设置为 on 能够最大限度地提高数据库的可用性。但在某些情况下,比如当采用管理工具(例如 xCAT)管理 GaussDB 时,设置为 off 能够使得管理工具在后端进程崩溃时获取控制权并采取适当的措施进行处理。
取值范围:布尔型
- 默认值:on
omit_encoding_error
参数说明:设置为 on,数据库的客户端字符集编码为UTF-8时,出现的字符编码转换错误将打印在日志中,有转换错误的被转换字符会被忽略,以"?"代替。
取值范围:布尔型
- on 表示有转换错误的字符将被忽略,以"?"代替,打印错误信息到日志中。
- off表示有转换错误的字符不能被转换,打印错误信息到终端。
- 默认值:off