肥宅钓鱼网
当前位置: 首页 钓鱼百科

数据库事务未提交(数据库事务管理)

时间:2023-07-19 作者: 小编 阅读量: 2 栏目名: 钓鱼百科

数据库事务管理无论是开发APP还是网站都离不开数据库,无论是往数据库里读还是写数据都离不开事务管理,事务管理的核心是锁和并发,采用同步控制的方式保证并发的情况下性能尽可能高服务器每个处理器单位时间内只能做一件事,要。

无论是开发APP还是网站都离不开数据库,无论是往数据库里读还是写数据都离不开事务管理,事务管理的核心是锁和并发,采用同步控制的方式保证并发的情况下性能尽可能高。服务器每个处理器单位时间内只能做一件事,要么读取数据、要么写入数据。

​当多个人去读、写操作时,比如很火的吃鸡游戏,如果不加访问控制,系统势必会产生冲突,服务器就会瘫痪。而事务相当于在读、写操作之外增加了同步的模块,进而保证只有一个线程进入事务当中,而其他线程不会进入,从而避免服务器瘫痪。​事务管理的四大特性分别是:原子型、一致性、隔离性和持久性。

原子性:原子性指的是事务中包含的所有操作要么全做,要么全不做。

一致性:一致性是指在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性的状态。

隔离性:隔离性要求系统必须保证事务不受其他并发执行的事务的影响。

持久性:持久性是指一个事务一旦成功完成,它对数据库的改变必须是永久的,即使是在系统遇到故障的情况下也不会丢失,数据的重要性决定了事务的持久性的重要。

​事务管理的步骤叫做事务单元。事务单元是通过开始然后提交(Begin-Traction、Commit和Rollback之间所有针对数据的写入、读取的操作都应该添加同步访问),开始和提交之间就是一个同步的事务单元,事务单元之间的Happen-Before关系中的四种关系:读写、写读、读读、写写。所有事务之间的关系都可以抽象成这四种之一来对应现在所有的业务逻辑处理。

如要建立一个基于人员信息的索引、从数据库中读取一行记录、向数据库中写入一行记录,同时更新这行记录的所有索引、删除整张表等都是一个事务单元,事务单元的实现方式Two Phase Lock(2PL)是数据库中非常重要的一个概念。

数据库操作Insert、Update、Add、Delete都是先读再写的操作,例如Insert操作是先读取数据,读取之后判读数据是否存在,如果不存在,则写入该数据,如果数据存在,则返回错误。假设在该场景下没有读操作,只是单纯写入数据,则数据本身并没有事务操作,别的操作与之类似。数据库利用这些操作的特性,在每一次查询过程中,只要查到数据,就会在该数据上加锁。所有被读取的数据都已加锁,不会再被其他人读到,也就是说对数据进行的中间操作状态对所有人都不可见,当所有中间状态完成后,提交操作时,解开锁,此时数据对所有系统可见,只能看到两种状态,比如开始时,A有1000元,B是穷光蛋;结束时,B有1000元,A是穷光蛋,而中间A的钱如何转移到B身上的过程被锁隐藏掉了,这个操作就是数据库中处理事务的最标准的方式。

​事务中的Trx2(JoeLock)与其他事务不相关,因此可以并行执行;Trx1需要Lock两个数据Boblock和Smithlock,而Trx3同样需要Lock这两个数据,因此Trx3必须等待,且等待在Boblock上;Joe事务会先结束,Trx3会等到Trx1完成后才会开始。处理事务的常见方法处理事务的常见方法有排队法、排他锁、读写锁、MVCC等方式。

排队法 :事务处理中最重要也是最简单的方案是排队法,单线程地处理一堆数据。在Redis中,如果数据全部在内存中,则单线程处理所有Put、Get操作效率最高。这是因为多线程本质是CPU模拟多个线程,这种模拟是以上下文切换为代价,而对于内存的数据库来说,没有上下文切换时效率最高。单个CPU绑定一块内存的数据,针对这块数据做多次读写操作时都是在单个CPU上完成的,单线程处理方式在内存的情况是效率是最优的。那么什么时候事务需要用到多线程呢?这个问题的本质取决于下层所使用的存储,如果是内存操作,则可以动态地申请和销毁内存块;而磁盘的IOPS很低,但吞吐量很高。如果一个场景涉及多次读写操作,单线程可以很高的效率对于内存进行读写操作。由于磁盘的IOPS仅为内存的几千分之一,如果依旧用操作内存的方式操作磁盘,那系统的整体性能将会很低,这意味着必须将大量的读写操作聚合成一个Batch后再提交时才能达到较好的性能。而将大量请求攒到一起的方式一是异步,也就是请求本身和线程不绑定,线程可以不Block(本质来说还是一种多线程的方式),处理完一个线程后再处理其他线程。这种做法的核心是将大量不同的请求提交到一个Buff设备中,多线程或异步非常常见,在设计系统时,面对磁盘、网络、SSD等慢速设备必须考虑使用多线程。

排他锁:有些场景不适合用单线程操作,可以利用排他锁的方式来快速隔离并发读写事务。数据库中有一些事务单元是共享的,如事务单元1是共享的,事务单元2/3共享数据;针对事务单元2/3共享数据的所有读写Block住,事务单元1单独用一个锁来控制,用这种方式完成系统的访问控制。

​读写锁:如果是一个只读的事务,例如只对数据进行查询操作,在该过程中数据一定不被修改,因此多个查询操作可以并行执行,因此一种针对读读场景的优化自然而然产生读写锁。读写锁的核心是在多次读的操作中,同时允许多个读者来访问共享资源,提高并发性。

MVCC:在最初的数据库事务实现中是不存在MVCC的,本质是Copy On Write,也就是每次写都是以重新开始一个新的版本的方式写入数据,因此数据库中也就包含了之前的所有版本。在数据读的过程中,先申请一个版本号,如果该版本号小于正在写入的版本号,则数据一定可以查询到,无需等到新版本完全写完即可返回查询结果。这种方式可以在读读不阻塞的前提下,实现读写/写读不阻塞,尽可能保证所有的读操作并行,而写操作串行。

事务的调优思路是在不影响业务应用的前提下用最科学的方法进行调度:

第一,尽可能减少锁的覆盖范围,例如Myisam表锁到Innodb的行锁就是一个减少锁覆盖范围的过程;对于原位锁(排他锁、读写锁等)可变为MVCC多版本(本质仍然是减少锁的范围)。

第二,增加锁上可并行的线程数,例如读锁和写锁的分离,允许并行读取数据。

第三,选择正确锁类型,确保服务器并发控制良好。

    推荐阅读
  • 鸡可以和什么一起煲汤(具体制作的步骤有哪些)

    以下内容希望对你有帮助!鸡可以和什么一起煲汤鸡、香菇、红枣、生姜、肉蔻、盐、鸡精、八角、香菜。先把鸡清洗干净,切成小块,在锅中烧水,把鸡放进去进行焯水,使其杂质与血水浸出,然后捞出。再把香菇拿出,锅中烧开水,把香菇放进去焯一下水,然后捞出锅入冷水中,沥干水分,备用。把香菇放入锅中与鸡块一起,再放入红枣,八角,生姜和肉蔻,再加一勺盐、一勺鸡精,再倒入适量的水,煮熟即可,再撒点香菜在上面就可以了。

  • 君子兰的养殖知识与技巧(君子兰的养殖方法和注意事项)

    夏季,君子兰生长缓慢会进入休眠状态,是需要停止施肥的。养君子兰的注意事项1、夏季注意避免暴晒。君子兰在窜箭后,温度需要保持在18℃左右,昼夜温差控制在10℃左右,否则易发生夹箭的现象。君子兰虽然喜肥,但是浓肥会招惹病虫害,所以要避免施浓肥。

  • 华为圣诞树简笔画手机备忘录(华为圣诞树用什么软件画的)

    圣诞树简笔画圣诞树简笔画procreate我的随手画人文绘画,下面我们就来选几个华为圣诞树简笔画手机备忘录?我们一起去看看这些简笔画吧!华为圣诞树简笔画手机备忘录圣诞树简笔画圣诞树简笔画procreate我的随手画人文绘画圣诞树怎么画圣诞树简笔画画法圣诞树简笔画iphone备忘录手绘圣诞树圣诞树简笔画圣诞节画画图片简笔画小学生圣诞树简笔画学习圣诞树简笔画iphone备忘录手绘圣诞树五张简单的圣诞树简笔画圣诞树简笔画圣诞树绘画素材圣诞树素材简笔画

  • 陈皮与新会陈皮的区别(橘子皮陈皮新会陈皮)

    橘子皮陈皮新会陈皮大河报天天健康官方头条号大河报·大河客户端记者魏浩通讯员郭巧巧在日常生活中,大家经常会遇到这样的问题,陈皮为何非要选用新会陈皮?陈皮不就是橘子皮吗?自己吃完橘子把皮留着,晒干泡水喝不就行了?对此,张仲。

  • 化妆品口红什么牌子最好(全球化妆品排名榜)

    大家好惹仙女们!周末泥萌都干嘛了呀?情侣们出去约会了对不对!就得到了完美的解决甚至为了让直男有更直观的对比我们甚至还有口红段位排行榜又或者更直观点为了让你们家的男同胞能充分理解女生的生气阈值我们还有更直接的对比图口红球鞋比对榜鉴于粒粒对鞋还不太了解,如果有错的话请指出。别问,问就是你对。原来我的钱都是被同一个人赚了啊??果然有钱的人永远有钱穷的人永远在穷粒粒去哭一会了,拜拜~

  • 南怀瑾预言的圣人是谁(南怀瑾预言的圣人是紫薇圣人)

    以下内容大家不妨参考一二希望能帮到您!南怀瑾预言的圣人是谁南怀瑾在他的作品中大胆预言了中国这代要出紫薇圣人。南怀瑾讲到,“其间必有名世者”,在这五百年中间,一定有“名世者”。这个大人物一出现,他的声名、威望就震撼全世界。衡之历史的先例,以及“易经”术数之学的证验,很快的将来,新的中国文化的精神,必将又要重现于世界了。为天地立心,为生民立命,为往圣继绝学,为万世开太平是紫薇圣人的准绳。

  • 孩子抽动症扭脖子怎么办(孩子挺胸扭腰鼓肚子)

    久而久之不愿与人接触,甚至对嘲笑者产生报复、敌视心理。

  • 花木兰日本预告曝光的内容是什么(花木兰日本预告曝光的内容)

    花木兰日本预告曝光的内容是什么曝光出来的预告是女英雄花木兰的故事,在2019年年底,迪士尼真人版的电影《花木兰》在日本曝光了预告,在长达一分钟的预告中,我们国人了解到外国人眼中的女英雄。而且在1998年迪士尼就已经上映了花木兰的动画电影,并且内容是根据中国古代的民间传说而来的。电影总体讲述的是,在中国古代,一个皇帝招兵买马,要求每一个家庭都必须要出来一个男丁来保家卫国,为的是国家领土不被侵占。

  • 城镇户口好还是农业户口好(到底是城市户口)

    土地的承包权和宅基地使用权。农民一边可以享受宅基地使用权,在宅基地上建设住房,一边可以到城镇购买房屋,和城镇居民一样的价格和待遇,而城镇户口现在没有福利分房之说,只能花市场价购房,还不得到农村购买房屋或购买宅基地建房!子女读书教育农村户口和城市户口相差比较大。何况,随着新农村建设,许多农村建起了便民服务设施,主干道路全部硬化,周边绿化美化,农民的生活环境大为改善。

  • 2022温州瓯海潘桥、仙岩街道新市民子女可以读哪些公立学校?

    2022温州瓯海潘桥、仙岩街道新市民子女可以读哪些公立学校?提醒:潘桥和仙岩两个街道的全员积分和入学工作,预计7月31日前完成,录取结果将会以短信形式通知。