当前位置: 首页 > news >正文

云南建设厅网站备案厂家炎陵网站建设

云南建设厅网站备案厂家,炎陵网站建设,网站怎么做友链,wordpress new2主题使用简介 postgres LWLock#xff08;轻量级锁#xff09;是由SpinLock实现#xff0c;主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式#xff0c;一种为排他模式#xff0c;另一种是共享模式#xff0c;如果想要读取共享内存中的内容#xff0c;需要在读取…简介 postgres LWLock轻量级锁是由SpinLock实现主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式一种为排他模式另一种是共享模式如果想要读取共享内存中的内容需要在读取的内容加共享锁这样便可和其他读操作并发执行同时保证不会有其他进程修改这部分共享内存。当需要修改这部分内容时需要加排他锁。排他锁与互斥锁不相容必须等对象上所有的共享锁都释放之后才能尝试给对象加排他锁。 LWLock内存布局 LWLock介绍 对于数据库开发者而言轻量锁有两者使用方法。一种是统一地保存在Individual LWLocks另一种是Builtin Tranches。两者只是形式上的不同本质上没有区别。目前PostgreSQL保存了47种Individual LWLock详细信息保存在src/backend/storage/lmgr/lwlocknames.txt文件中里面列举所有内置的Individual LWLocks。 #define ShmemIndexLock (MainLWLockArray[1].lock) #define OidGenLock (MainLWLockArray[2].lock) #define XidGenLock (MainLWLockArray[3].lock) #define ProcArrayLock (MainLWLockArray[4].lock) #define SInvalReadLock (MainLWLockArray[5].lock) #define SInvalWriteLock (MainLWLockArray[6].lock) #define WALBufMappingLock (MainLWLockArray[7].lock) #define WALWriteLock (MainLWLockArray[8].lock) #define ControlFileLock (MainLWLockArray[9].lock) #define XactSLRULock (MainLWLockArray[11].lock) #define SubtransSLRULock (MainLWLockArray[12].lock) #define MultiXactGenLock (MainLWLockArray[13].lock) #define MultiXactOffsetSLRULock (MainLWLockArray[14].lock) #define MultiXactMemberSLRULock (MainLWLockArray[15].lock) #define RelCacheInitLock (MainLWLockArray[16].lock) #define CheckpointerCommLock (MainLWLockArray[17].lock) #define TwoPhaseStateLock (MainLWLockArray[18].lock) #define TablespaceCreateLock (MainLWLockArray[19].lock) #define BtreeVacuumLock (MainLWLockArray[20].lock) #define AddinShmemInitLock (MainLWLockArray[21].lock) #define AutovacuumLock (MainLWLockArray[22].lock) #define AutovacuumScheduleLock (MainLWLockArray[23].lock) #define SyncScanLock (MainLWLockArray[24].lock) #define RelationMappingLock (MainLWLockArray[25].lock) #define NotifySLRULock (MainLWLockArray[26].lock) #define NotifyQueueLock (MainLWLockArray[27].lock) #define SerializableXactHashLock (MainLWLockArray[28].lock) #define SerializableFinishedListLock (MainLWLockArray[29].lock) #define SerializablePredicateListLock (MainLWLockArray[30].lock) #define SerialSLRULock (MainLWLockArray[31].lock) #define SyncRepLock (MainLWLockArray[32].lock) #define BackgroundWorkerLock (MainLWLockArray[33].lock) #define DynamicSharedMemoryControlLock (MainLWLockArray[34].lock) #define AutoFileLock (MainLWLockArray[35].lock) #define ReplicationSlotAllocationLock (MainLWLockArray[36].lock) #define ReplicationSlotControlLock (MainLWLockArray[37].lock) #define CommitTsSLRULock (MainLWLockArray[38].lock) #define CommitTsLock (MainLWLockArray[39].lock) #define ReplicationOriginLock (MainLWLockArray[40].lock) #define MultiXactTruncationLock (MainLWLockArray[41].lock) #define OldSnapshotTimeMapLock (MainLWLockArray[42].lock) #define LogicalRepWorkerLock (MainLWLockArray[43].lock) #define XactTruncationLock (MainLWLockArray[44].lock) #define WrapLimitsVacuumLock (MainLWLockArray[46].lock) #define NotifyQueueTailLock (MainLWLockArray[47].lock) #define NUM_INDIVIDUAL_LWLOCKS 48 上述这些Individual LWLock被保存在MainLWLockArray数组中每种Individual LWLock都有自己要保护的对象。Individual LWLock的使用方式如下 LWLockAcquire(ShemeIndexLock, LW_EXCLUSIVE); //对保护对象进行写操作 LWLockRelease(ShemeIndexLock); 每一个Individual LWLock均有自身的全局标识tranche ID用以区分 LWLock因此可推断出MainLWLockArray数组中前 NUM_INDIVIDUAL_LWLOCKS个都是Individual LWLock。 与Individual LWLock不同每个Builtin Tranche可能对应多个LWLocks,它代表的是一组LWLocks,这组LWLocks虽然各自封锁各自的内容但是它们的功能相同。Builtin Tranche包含如下信息 typedef enum BuiltinTrancheIds { LWTRANCHE_XACT_BUFFER NUM_INDIVIDUAL_LWLOCKS, LWTRANCHE_COMMITTS_BUFFER, LWTRANCHE_SUBTRANS_BUFFER, LWTRANCHE_MULTIXACTOFFSET_BUFFER, LWTRANCHE_MULTIXACTMEMBER_BUFFER, LWTRANCHE_NOTIFY_BUFFER, LWTRANCHE_SERIAL_BUFFER, LWTRANCHE_WAL_INSERT, LWTRANCHE_BUFFER_CONTENT, LWTRANCHE_REPLICATION_ORIGIN_STATE, LWTRANCHE_REPLICATION_SLOT_IO, LWTRANCHE_LOCK_FASTPATH, LWTRANCHE_BUFFER_MAPPING, LWTRANCHE_LOCK_MANAGER, LWTRANCHE_PREDICATE_LOCK_MANAGER, LWTRANCHE_PARALLEL_HASH_JOIN, LWTRANCHE_PARALLEL_QUERY_DSA, LWTRANCHE_PER_SESSION_DSA, LWTRANCHE_PER_SESSION_RECORD_TYPE, LWTRANCHE_PER_SESSION_RECORD_TYPMOD, LWTRANCHE_SHARED_TUPLESTORE, LWTRANCHE_SHARED_TIDBITMAP, LWTRANCHE_PARALLEL_APPEND, LWTRANCHE_PER_XACT_PREDICATE_LIST, LWTRANCHE_PGSTATS_DSA, LWTRANCHE_PGSTATS_HASH, LWTRANCHE_PGSTATS_DATA, LWTRANCHE_FIRST_USER_DEFINED } BuiltinTrancheIds; 这些Builtin Tranche对应锁一部分被保存在mainLWLockArray数组中另一部分被保存在使用它们的结构体中如下所示 for (i 0; i NUM_XLOGINSERT_LOCKS; i) { LWLockInitialize(WALInsertLocks[i].l.lock, LWTRANCHE_WAL_INSERT); WALInsertLocks[i].l.insertingAt InvalidXLogRecPtr; WALInsertLocks[i].l.lastImportantAt InvalidXLogRecPtr; } 无论是Individual LWLock还是Builtin Tranche它们都保存在共享内存中只是保存的位置与方式略有不同。 extension LWLock : 同时为方便用户在extension模块中使用轻量级锁pg提供了两种扩展方法通过RequestNameedLWLockTranche函数和GetNamedLWLockTranche函数实现。 方法一通过RequestNamedLWLockTranche和GetNamedLWLockTranche函数实现。其中RequestNamedLWLockTranche负责注册Tranche名称和所述轻量锁数目GetNamedLWLockTranche函数根据Tranche Name获取对应强轻量锁。每个Tranche 都有自己唯一ID。 方法二LWLockNewTrancheId函数获取TrancheID后通过LWLockRegisterTranche函数建立联系最后由LWLockInitalize函数初始化轻量锁。 关键数据结构 宏定义 #define LW_FLAG_HAS_WAITERS ((uint32) 1 30) #define LW_FLAG_RELEASE_OK ((uint32) 1 29) #define LW_FLAG_LOCKED ((uint32) 1 28) #define LW_VAL_EXCLUSIVE ((uint32) 1 24) #define LW_VAL_SHARED 1 #define LW_LOCK_MASK ((uint32) ((1 25)-1)) /* Must be greater than MAX_BACKENDS - which is 2^23-1, so we’re fine. */ #define LW_SHARED_MASK ((uint32) ((1 24)-1)) 在LWLock结构体中设计原子变量用以缓解锁竞争问题用以提升数据库的性能其字段为state变量类型为pg_atomic_uint32该变量记录了锁当前的状态信息共32位。其中低24位作为共享锁的计数区因为共享锁纸之间是相容的因此有多个申请者同时申请共享锁最多含有2^24 - 1个持有者。第24位作为排他锁标识。由于共享锁与互斥锁不相容因此同一时间只能有一个持锁者因此只需一个标识位即可。相关内容如下
http://www.dnsts.com.cn/news/6867.html

相关文章:

  • 加强网站建设 基本措施wordpress 被挂广告
  • 网站备案平台建设一个打鱼游戏网站
  • 高邑做网站杭州巴顿品牌设计
  • 重庆网站建设网站福州网站大全
  • 网站建设要用多少种字体wordpress 多域名绑定
  • 怎么做淘宝网站步骤wordpress后台很卡
  • 微商货源网什么什么网站建设开发商交房必须具备的条件
  • 在上海做兼职在哪个网站好开发一套小区多少钱
  • 上海高端定制网站公司大型建站网站
  • 福州晋安区建设局网站淘宝网站建设可行性分析
  • 云南网站建设崇左做微商去哪个网站推广
  • 怎样做汽车之家视频网站霞山手机网站建设公司
  • 浙江建设职业技术学院尔雅网站泉州seo培训
  • wordpress 投票网站5g永久影院5g888
  • 河南省住房建设厅网站一个人做网站的难度
  • 公司宣传片拍摄脚本免费seo技术教程
  • 网站维护中 源码wordpress占用内存过大
  • 来年做啥网站能致富重庆建新建设工程有限公司网站
  • 中国建筑出版在线官网app自建站做seo
  • 网站建设网页链接高端大气的网站模板
  • 怎样建设小游戏网站长沙建设工程官方网站
  • 怎么做产品网站网站域名一年多少钱
  • 在电脑上怎么建设网站北京行业网站制作
  • 公司无网站无平台怎么做外贸丝路建设网站
  • 南京网站设计价格石家庄做网站优化
  • asp手机网站开发教程广州网站维护
  • 横岗网站设计特步的网站建设策划
  • 池州建设机械网站高德地图怎么申报地址
  • 用dw如何做网站天津模板网页制作报价
  • 视频网站界面设计企业手机网站建设提升用户体验的三个点