如何在 PostgreSQL 中使用轻量级锁。

分类:编程技术 时间:2024-02-20 15:50 浏览:0 评论:0
0
本文主要介绍《如何在PostgreSQL中使用轻量级锁》。在日常操作中,相信很多人对PostgreSQL中如何使用轻量级锁存在疑问。小编查阅了各种资料,整理出了一个简单又好的解决方案。使用的操作方法,希望能帮助您解答“PostgreSQL中如何使用轻量级锁”的疑惑!接下来就请跟随小编一起来学习吧!

简介
PG中的轻量级锁(LWLock,其他数据库中称为Latch)用于控制内存访问。只有两级锁。 :共享和独占。
可以通过系统视图pg_stat_activity查看Lock/Wait的相关信息

[local]:5432 pg12@testdb=# select * from pg_stat_activity where pid = 5914;- [记录1]----+---------------------------------------- --------达迪德5914usesysid | 5914usesysid 10用户名 | pg12application_name |psqlclient_addr |客户端主机名 |客户端端口 | -1后端_开始 | 2023-08-22 11:40:58.504462+08xact_start | 2023-08-22 12:16:02.528978+08que ry_start | 2023-08-22 12:16:04.372427+08state_change | 2023-08-22 12:16:04.374888+08wait_event_type |客户端等待事件 |客户端读取状态 | transactionbackend_xid 中空闲 | 716backend_xmin | 716backend_xmin查询 |从 t_prewarm 中删除 ete,其中 id = 1;backend_type |客户端 backendTime: 14.262 ms[local]:5432 pg12@testdb=# select * from pg_stat_activity where pid = 5964;-[ RECORD 1 ]----+------------ --- ------------------------------- datid                                                                                                                                                 client_hostname |客户端端口 | -1后端_开始 | 2023-08-22 11:41:10.420664+08xact_start | 2023-08-22 12:16:11.812598+08query_start | 2023-08-22 12:16:18.718567+08state_change | 2023-08-22 12:16:18.718572+08wait_event_type | Lockwait _事件 |交易状态 | activebackend_xid|后端_xmin | 716查询 | select * from t_prewarm 其中 id = 1 表示共享;backend_type | client backendTime: 4.655 ms

LWLock 类型
WALInsertLock:保护 WAL 缓冲区。可以增加 WAL 缓冲区以改善争用。设置 synchronous_commit=off 和 full_page_writes=off 可以减少争用,但不建议这样做。
WALWriteLock:当 WAL 记录刷新或 WAL 段切换时使用此锁来保护 .synchronous_commit=off可以清除等待冲水。 full_page_writes=off 可以减少刷新数据的大小。
LockMgrLock:它会出现在只读工作负载下的等待事件中。无论大小,都会是锁定关系。 Lock不是单个锁,而是至少16个分区。因此,在基准测试时使用多个表非常重要。
ProcArrayLock:包含 ProcArray 结构。
CLogControlLock:包含CLogControl结构。如果它频繁出现在 pg_stat_activity 中,则应检查 $PGDATA/pg_clog (PG11+:pg_xact) 目录,该目录应位于缓存文件系统上。
SInvalidReadLock:包含 sinval 结构。读取器使用共享锁,而 SICleanupQueue 和其他数组范围的更新则请求独占锁。如果共享缓存压力较大,可以在系统视图中看到该结构体的出现,增加shared_buffers可以减少争用。
BufMappingLocks:包含缓冲区的区域。 PG设置了128个缓冲区来管理整个缓存。

自旋锁
最底层的锁是自旋锁,它是使用CPU特有的机制来实现的.

至此,关于《如何使用PostgreSQL“轻量级锁”》的学习就结束了,希望能够解决大家的疑惑,理论与实践的结合可以更好帮助大家学习,去尝试一下吧!如果您想继续了解更多相关知识,请继续关注网站。小编会继续努力,给大家带来更多实用的文章!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何在 PostgreSQL 中使用轻量级锁。

用户评论