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

性能和稳定性的保障——深入解析AntDB-T数据库锁(3)

北陌 2023-12-12
255

(四)

AntDB-T数据库常规锁使用场景

前面部分介绍了锁相关的理论部分,下面举个常规锁的例子来体会下锁。

1.数据准备:建表,构造数据,具体SQL 如下图6所示:


图6:数据准备 

2. 会话一执行开始事务和UPDATE语句如下图7所示,此时会话表上的锁模式为RowExclusiveLock 。


图7:开始事务和更新表

3. 会话二执行ALTER TABLE语句,这时看到修改表语句处于等待状态,如下图8所示:此时会话表上需要加锁的模式是AccessExclusiveLock,该模式与会话一上持有的锁模式冲突,所以此SQL语句会一直等在那里。


图8:修改表

4. 会话三查找锁等待的进程号以及锁信息,如下图9所示:


图9:查找锁等待的进程信息

这里可以看到等待的锁时一个表锁,锁模式是AccessExclusiveLock,pid为541258。

5. 会话三根据锁等待的进程pid找到当前持有锁的进程,并查看持有锁进程的详细情况,比如对应的应用、SQL、等待事件等,如下图10所示:


图10:查找锁持有的进程信息

6.验证等待锁、持有锁的进程pid是否正确,用ps查看过滤下想要的进程, 如下图11所示:


图11:验证等待锁持有锁的进程pid

从上图11中可以看出,等待锁的进程pid 为541258 在执行ALTER TABLE操作,与图9查出的进程pid一致,持有锁的进程pid为541046,处在空闲事务状态,与图10查出的进程pid一致。会话二语句目前一直等在那里,要等到会话一结束,才能执行成功。如果会话一忘记COMMIT/ROLLBACK了,也不要太担心,AntDB-T数据库提供了一些超时参数,当超过配置的参数时,就会自动结束会话。 

参数idle_in_transaction_session_timeout:在一个空闲的事务中,空闲时间超过这个值,将视为超时,0表示禁用,一般默认都是禁用。获取一个表,索引,行上的锁超过这个时间,直接报错,不等待,0为禁用。

参数lock_timeout:获取一个表,索引,行上的锁超过这个时间,直接报错,不等待,0为禁用。

参数statement_timeout:当SQL语句的执行时间超过这个设置时间,终止执行SQL,0为禁用。

参数deadlock_timeout:死锁时间超过这个值将直接报错,不会等待,默认设置为1s。

 

总结

本文主要讲述了AntDB-T数据库锁的分类、常规锁的基本概念、常规锁的设计以及常规锁具体使用的场景。限于篇幅原因,与常规锁相关的死锁检测、行锁等相关内容没有涉及,以后有机会将会进行分享。

 

关于亚信安慧AntDB数据库

亚信安慧AntDB数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔电信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

评论