VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

锁管理

在Vastbase中,并发执行的事务由于竞争资源会导致死锁。本节介绍的参数主要管理事务锁的机制。

  • deadlock_timeout

    参数说明: 设置死锁超时检测时间,以毫秒为单位。当申请的锁超过设定值时,系统会检查是否产生了死锁。

    • 死锁的检查代价是比较高的,服务器不会在每次等待锁的时候都运行这个过程。在系统运行过程中死锁是不经常出现的,因此在检查死锁前只需等待一个相对较短的时间。增加这个值就减少了无用的死锁检查浪费的时间,但是会减慢真正的死锁错误报告的速度。在一个负载过重的服务器上,用户可能需要增大它。这个值的设置应该超过事务持续时间,这样就可以减少在锁释放之前就开始死锁检查的问题。

    • 如果要通过设置log_lock_waits来将查询执行过程中的锁等待耗时信息写入日志,请确保log_lock_waits的设置值小于deadlock_timeout的设置值(或默认值)。

    该参数属于SUSET类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,1~2147483647,单位为毫秒(ms)。

    默认值: 1s

  • lockwait_timeout

    参数说明: 控制单个锁的最长等待时间。当申请的锁等待时间超过设定值时,系统会报错。

    该参数属于SUSET类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,0 ~ INT_MAX,单位为毫秒(ms)。

    默认值: 20min

  • update_lockwait_timeout

    参数说明: 允许并发更新参数开启情况下,该参数控制并发更新同一行时单个锁的最长等待时间。当申请的锁等待时间超过设定值时,系统会报错。

    该参数属于SUSET类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,0 ~ INT_MAX,单位为毫秒(ms)。

    默认值: 2min

  • max_locks_per_transaction

    参数说明: 控制每个事务能够得到的平均的对象锁的数量。

    • 共享的锁表的大小是以假设任意时刻最多只有max_locks_per_transaction*(max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在数据库启动的时候设置。

    • 增大这个参数可能导致Vastbase请求更多的System V共享内存,有可能超过操作系统的缺省配置。

    • 当运行备机时,请将此参数设置不小于主机上的值,否则,在备机上查询操作不会被允许。

    该参数属于POSTMASTER类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,10 ~ INT_MAX

    默认值: 256

  • max_pred_locks_per_transaction

    参数说明: 控制每个事务允许断定锁的最大数量,是一个平均值。

    • 共享的断定锁表的大小是以假设任意时刻最多只有max_pred_locks_per_transaction*(max_connections+max_prepared_transactions)个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在服务器启动的时候设置。

    • 增大这个参数可能导致Vastbase请求更多的System V共享内存,有可能超过操作系统的缺省配置。

    该参数属于POSTMASTER类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,10 ~ INT_MAX

    默认值: 64

  • gs_clean_timeout

    参数说明: 控制DBnode周期性调用gs_clean工具的时间,是一个平均值。

    • Vastbase数据库中事务处理使用的是两阶段提交的方法,当有两阶段事务残留时,该事务通常会拿着表级锁,导致其它连接无法加锁,此时需要调用gs_clean工具对Vastbase中两阶段事务进行清理,gs_clean_timeout是控制DBnode周期性调用gs_clean的时间。

    • 增大这个参数可能导致Vastbase周期性调用gs_clean工具的时间延长,导致两阶段事务清理时间延长。

    该参数属于SIGHUP类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,0 ~ INT_MAX / 1000,单位为秒(s)。

    默认值: 5min

  • partition_lock_upgrade_timeout

    参数说明: 在执行某些查询语句的过程中,会需要将分区表上的锁级别由允许读的ExclusiveLock级别升级到读写阻塞的AccessExclusiveLock级别。如果此时已经存在并发的读事务,那么该锁升级操作将阻塞等待。partition_lock_upgrade_timeout为尝试锁升级的等待超时时间。

    • 在分区表上进行MERGE PARTITION和CLUSTER PARTITION操作时,都利用了临时表进行数据重排和文件交换,为了最大程度提高分区上的操作并发度,在数据重排阶段给相关分区加锁ExclusiveLock,在文件交换阶段加锁AccessExclusiveLock。

    • 常规加锁方式是等待加锁,直到加锁成功,或者等待时间超过lockwait_timeout发生超时失败。

    • 在分区表上进行MERGE PARTITION或CLUSTER PARTITION操作时,进入文件交换阶段需要申请加锁AccessExclusiveLock,加锁方式是尝试性加锁,加锁成功了则立即返回,不成功则等待50ms后继续下次尝试,加锁超时时间使用会话级设置参数partition_lock_upgrade_timeout。

    • 特殊值:若partition_lock_upgrade_timeout取值-1,表示无限等待,即不停的尝试锁升级,直到加锁成功。

    该参数属于USERSET类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,最小值-1,最大值3000,单位为秒(s)。

    默认值: 1800

  • fault_mon_timeout

    参数说明: 轻量级死锁检测周期。该参数属于SIGHUP类型参数,请参考表11-2中对应设置方法进行设置。

    取值范围: 整型,最小值0,最大值1440,单位为分钟(min)

    默认值: 5min

  • enable_online_ddl_waitlock

    参数说明: 控制DDL是否会阻塞等待pg_advisory_lock/pgxc_lock_for_backup等Vastbase锁。主要用于OM在线操作场景,不建议用户设置。

    该参数属于SIGHUP类型参数,参考表11-2中对应设置方法进行设置。

    取值范围: 布尔型

    • on表示开启。

    • off表示关闭。

    默认值: off

  • xloginsert_locks

    参数说明: 控制用于并发写预写式日志锁的个数。主要用于提高写预写式日志的效率。

    该参数属于POSTMASTER类型参数,参考表11-2中对应设置方法进行设置。

    取值范围: 整型,最小值1,最大值1000

    默认值: 8