暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

华为openGauss 锁管理

华为高斯 2020-06-01
1512

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

deadlock_timeout

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

  • 死锁的检查代价是比较高的,服务器不会在每次等待锁的时候都运行这个过程。在系统运行过程中死锁是不经常出现的,因此在检查死锁前只需等待一个相对较短的时间。增加这个值就减少了无用的死锁检查浪费的时间,但是会减慢真正的死锁错误报告的速度。在一个负载过重的服务器上,用户可能需要增大它。这个值的设置应该超过事务持续时间,这样就可以减少在锁释放之前就开始死锁检查的问题。
  • 如果要通过设置log_lock_waits来将查询执行过程中的锁等待耗时信息写入日志,请确保log_lock_waits的设置值小于deadlock_timeout的设置值(或默认值)。

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

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

默认值:1s

lockwait_timeout

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

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

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

默认值:20min

update_lockwait_timeout

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

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

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

默认值:2min

max_locks_per_transaction

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

  • 共享的锁表的大小是以假设任意时刻最多只有max_locks_per_transaction*(max_connections+max_prepared_transactions) 个独立的对象需要被锁住为基础进行计算的。不超过设定数量的多个对象可以在任一时刻同时被锁定。当在一个事务里面修改很多不同的表时,可能需要提高这个默认数值。只能在数据库启动的时候设置。
  • 增大这个参数可能导致openGauss请求更多的System V共享内存,有可能超过操作系统的缺省配置。
  • 当运行备机时,请将此参数设置不小于主机上的值,否则,在备机上查询操作不会被允许。

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

取值范围:整型,10 \~ INT_MAX

默认值:256

max_pred_locks_per_transaction

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

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

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

取值范围:整型,10 \~ INT_MAX

默认值:64

gs_clean_timeout

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

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

该参数属于SIGHUP类型参数,请参考表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类型参数,请参考表2中对应设置方法进行设置。

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

默认值:1800

fault_mon_timeout

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

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

默认值:5min

enable_online_ddl_waitlock

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

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

取值范围:布尔型

  • on表示开启。
  • off表示关闭。

默认值:off

xloginsert_locks

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

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

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

默认值:8

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

文集目录
法律声明
发行说明
产品描述
技术白皮书
编译指导书
快速入门
安装指南
管理员指南
开发者指南
关于本文档
概述
数据库使用
应用程序开发教程
管理数据库安全
接口参考
导入数据
导出数据
AI特性
性能调优
配置运行参数
SQL参考
用户自定义函数
存储过程
系统表和系统视图
DBE_PERF Schema
WDR Snapshot Schema
GUC参数说明
GUC使用说明
文件位置
连接和认证
资源消耗
并行导入
预写式日志
双机复制
查询规划
错误报告和日志
告警检测
运行时统计
负载管理
自动清理
客户端连接缺省设置
锁管理
版本和平台兼容性
容错性
连接池参数
openGauss事务
开发人员选项
审计
升级参数
其它选项
等待事件
Query
系统性能快照
常见故障定位指南
SQL执行计划概述
详解
工具参考
术语表
Accro
关注
暂无图片
获得了12次点赞
暂无图片
内容获得4次评论
暂无图片
获得了25次收藏
TA的专栏