首页 » PHP教程 » phpdb事务技巧_数据库子事务机能优化方法亚信安慧AntDB让子事务飞起来

phpdb事务技巧_数据库子事务机能优化方法亚信安慧AntDB让子事务飞起来

访客 2024-12-08 0

扫一扫用手机浏览

文章目录 [+]

亚信安慧技能

该技能由亚信安慧投递并参与“数据猿年度金猿策划活动——2023大数据家昔时度创新技能打破榜单及奖项”评比。

phpdb事务技巧_数据库子事务机能优化方法亚信安慧AntDB让子事务飞起来

数据库子事务的性能优化是将磁盘文件中的父子关系交流到当提高程独占确当地内存,子事务在处理时,优先读取本地内存中缓存的事务信息,从共享内存中读取父子关系到本地的时候,以已经提交的最大xmin作为标记,担保最大xmin之前的事务已经提交;最大xmin之后的父子关系已经写入共享内存。

phpdb事务技巧_数据库子事务机能优化方法亚信安慧AntDB让子事务飞起来
(图片来自网络侵删)

该技能方案通过本地内存优化数据库中子事务的处理性能,并基于xmin确保子事务 优化时主库备库的数据同等性,从而实现了数据 库的性能优化。
基于该技能方案,在多并发场景下,子事务的处理也能够高效实行。

技能解释

目前,在数据库中,当数据库的子事务数量超过宏定义变量NUM_SUBTRANS_ BUFFERS子事务缓存(默认32page)指定的数量后,就发生磁盘同步。
此时会产生子事务锁, 它是一把独占锁,高并发访问时就会涌现性能问题(数据库后台等待事宜表现为subtrans 或SubtransControlLock)。

默认子事务缓存占用32个buffer页面,每个buffer大小为8k,即子事务缓存总大小为328k=256k。
每个事务号占用4个字节大小,则缓存中最多可存储2561024/4=65536 个子事务。
当系统中子事务数量,超出65536时,PostgreSQL将最老的已被replay的子事务号,交流到磁盘文件保存。
当进程须要读取或更新子事务时,去磁盘文件查询时,必须先设置全局写锁,即SubTransCtl lock互斥锁。
如图1所示,当子事务的父事务号在缓存中不存在时,则获取SubTransCtl lock互斥锁,从磁盘中读取文件到缓存后再开释互斥锁。
该锁全局唯一,且顺序依次获取开释。
因此,当超出子事务缓存时,PostgreSQL性能缓慢。

图1现有技能中数据库子事务的查询办法

“数据库子事务的性能优化方法”在进程第一次在共享内存中读取不到父事务号时,将磁盘文件中的父子关系交流到当提高程独占确当地内存local_cache_ subtrans。
local_cache_subtrans保存在客户端连接中,即每个连接进程独享一个私有内存。
子事务在处理时,优先读取本地内存中缓存的事务信息:如果找到的话,就直策应用该事务信息;如果本地内存local_cache_subtrans中缓存的事务信息不敷的情形下,还是会连续读取磁盘文件中的内容。

此外,还要同时兼顾数据库的主库和备库数据的同等性。
PostgreSQL内部的数据同等性通过利用一种多版本模型(多版本并发掌握,MVCC)来掩护。
这就意味着每个SQL 语句看到的都只是一小段韶光之前的数据快照(一个数据库版本),而不管底层数据确当前状态。
这样可以保护语句不会看到可能由其他在相同数据行上实行更新的并发事务造成的不一致数据,为每一个数据库会话供应事务隔离。
xmin是PostgreSQL原生存在的一个别系属性,标识插入该行版本的事务身份(事务ID)。
一个行版本是一个行的一个特殊版本,对一个逻辑行的每一次更新都将创建一个新的行版本。
由于子事务的信息是从本地内存中进行读取,而数据库的主库和备库确当地内存是独立申请的,为了担保主库和备库的数据同等性,须要对主库和备库上的数据可见性的处理逻辑同步进行调度:从共享内存中读取父子关系到本地的时候,以已经提交的最大xmin作为标记,担保最大xmin之前的事务已经提交, 最大xmin之后的父子关系已经写入共享内存。

基于以上优化思路,数据库子事务的性能优化方法能够有效提升数据库性能,其紧张流程如图2所示,包括如下步骤:

图2 数据库子事务的性能优化方法

步骤1,查询子事务的父事务号;

步骤2,判断父子关系是否存在于本地内存中,当存在时跳转至步骤10,当不存在时实行步骤3;

步骤3,查找本进程所有快照中最大的xmin;

步骤4,判断共享内存中是否存在父子关系,当不存在时实行步骤6,当存在时实行 步骤9;

步骤5,获取SubTransCtl lock互斥锁;

步骤6,从磁盘中读取文件到共享内存,由于SubTransCtl lock互斥锁的存在,此时该磁盘文件只能由唯一的一个进程来操作;步骤7,开释SubTransCtl lock互斥锁;

步骤8,复制共享内存和磁盘文件中的所有事务父子关系到本地内存,很显然,在复制之后,针对本进程中别的子事务进行查询时,则无需再次获取SubTransCtl lock互斥锁访问磁盘文件。
本地的内存local_cache_subtrans大小可自定义设置,可容纳的子事务数量可远超于默认的NUM_SUBTRANS_BUFFERS数量,因此可以担保在本地内存中获取父子关系。

步骤9,标记最大的xmin之前的事务可见,即对付最大xmin之前的事务有效;

步骤10,从本地内存中取出父事务号;

步骤11,判断步骤10取得的父事务号是否有效,当无效时返回步骤1,当有效时实行步骤12;

步骤12,返回该父事务号,进行后续处理。

在数据库主库中申请子事务或提交事务时实行数据库子事务的性能优化方法中各步骤操作,当主库子事务操作完成时将操作过程写入WAL并同步到备库。
备库中吸收到主库的WAL后,进行回放,实现数据库子事务的性能优化方法,完成与主库同步,从而与主库保持子事务可见同等性。

该技能方案通过本地内存优化了数据库中子事务的处理性能,并基于xmin确保子 事务优化时主库备库的数据同等性,从而实现了数据库的性能优化。
基于本方案,在多并发场景下,子事务的处理也能够高效实行。

★专利申请号/公开号:CN 116244041 A

开拓团队

·带队卖力人姓名:洪建辉

洪建辉,亚信安慧AntDB-T数据库的研发带头人,曾在多家有名大中型企业担当研发总监、技能总监和首席信息官等技能管理职务,卖力过多项国防领域国产数据库项目,拥有20多年软件研发和管理履历,10多年分布式数据库和云数据库研发履历。
其带头研发的亚信安慧AntDB-T数据库已广泛运用于我国24个省、市、自治区的通信运营商核心业务系统,为推动通信行业根本软件国产化作出了主要贡献。

团队其他主要成员姓名:梁博、余秀明、马珊珊

·从属机构:亚信安慧

湖南亚信安慧科技有限公司(简称“亚信安慧”)面向各行业供应数据库、中间件等根本软件产品和干系做事。
公司以“技能+生态”为长期计策,将技能前瞻性、领先性视为企业根基与核心竞争力,将生态培植视为业务发展的加速器。

亚信安慧的拳头产品AntDB数据库,具备高性能、弹性扩展、高可靠等产品特性,做事24个省份的数亿用户,峰值每秒可处理百万笔通信核心交易,广泛运用于通信、交通、金融、能源、邮政等行业。

干系评价

我们依托亚信安慧AntDB数据库完成了核心账务库的升级改造,并获评集团“创新运用标杆”,在进一步提升核心系统能力的同时,有力保障了数据和系统的安全、稳定。

——某通信运营商省公司

亚信安慧AntDB数据库为我们供应了统一的大数据汇聚能力、实时的剖析处理、当代化的监控和做事,实现了多维度剖析和强时效管理,为交通畅业的风雅化运营、管理决策供应了强力支撑。

——某行业客户

标签:

相关文章