精华内容
下载资源
问答
  • 持久性
    2021-12-08 20:18:13

    事务的特性——持久性(实现原理)

    InnoDB读写数据原理

    磁盘的IO操作所需要花费的成本十分巨大,因此InnoDB在解决这一问题的时候提供了Buffer Pool作为访问数据库数据的缓冲。Buffer Pool位于内存当中,其包含了磁盘中部分数据页的映射。
    当需要读取数据的时候,InnoDB会首先尝试从Buffer Pool中读取,如果读取不到才会从磁盘读取并放入到Buffer Pool中。
    当写入数据的时候,会先写入Buffer Pool页面,并将这样的页面标记为脏页,这些修改过的数据页在之后的某个时刻会被刷新到磁盘中。
    这样设计的好处是可以把大量的磁盘I/O转成内存读写,并且把对一个页面的多次修改merge成一次I/O操作(刷脏一次刷入整个页面),避免每次读写操作都访问磁盘,从而大大提升了数据库的性能。

    持久性

    持久性是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)。在一个事务提交之后,事务的状态就会被持久化到数据库中,对数据的更新、新增等操作将会持久化到数据库中。
    问题: Buffer Pool 是在内存的,是易失性的,如果一个事务提交了事务后,MySQL突然宕机,且此时Buffer Pool中修改的数据还没有刷新到磁盘中的话,就会导致数据的丢失。
    解决方案:引入redo log当数据修改时,InnoDB除了修改Buffer Pool中的数据,还会在redo log 记录这次操作,并保证redo log早于对应的页面落盘,也就是常说的WAL。若MySQL突然挂掉且还没有把数据写入磁盘,重启后,MySQL会通过已经写入磁盘的redo log来恢复没有被刷新到磁盘的数据页。

    更多相关内容
  • 坚持不懈 一组Java程序,用于计算乘法持久性。 他们使用我制作的ArbitraryInteger类,可以在这里找到: : 。 请参阅Numberphile视频,了解有关乘法持久性的背景: : Wim9WJeDTHQ
  • 持久性有机污染物(POPs)问题研究及检测进展简述,刘威,刘振龙,目前持久性有机污染物(POPs)污染已遍及全球,严重威胁着人类生命健康和生态环境安全,成为重大的全球性环境问题之一。本文简述了P
  • 毫无疑问您听过大量的观点在特定数据访问技术和持久性框架,但内容最佳的方式使用您的项目中的这些工具?您应使用何种条件选择合适的工具为您的项目?是否需要使用之前,概念上了解有关这些工具?如果您您手上了过多...
  • fudMalware:模块化C持久性有效负载
  • 一种基于RDMA多播机制的分布式持久性内存文件系统.docx
  • 持久性有机污染物(POPs)法规[归类].pdf
  • 论文研究-含趋势项时间序列持久性变点监测.pdf, 针对核加权方差比率统计量不是监测从非平稳向平稳变化持久性变点一致方法的问题,通过引进一个窗宽参数,提出了一种滑动...
  • 持久性有机污染物(POPs)法规[汇编].pdf
  • 持久性有机污染物的生物处理研究进展,黄晨,龙丽珠,持久性有机污染物(POPs)具有高毒性和低可降解性的特征,通过运用先进的生物修复技术来处理POPs污染得到了广泛的关注。本文总结了国内�
  • 植物叶片在大气持久性有机污染物监测中的应用,杨萍,陈景文,对植物叶片富集大气中持久性有机污染物(POPs)的途径、机理作了介绍,探讨了影响植物叶片吸收POPs的主要因素,简要的评述了其在大气PO
  • llpl:低级持久性

    2021-03-13 06:21:56
    低级持久性库概述低级持久性库提供对持久堆上分配的持久性内存块的访问。 该Java库使用持久性内存开发工具包(PMDK)。 有关PMDK的更多信息,请访问和 。如何构建和运行必备条件以下是构建此Java库的先决条件: ...
  • 持久性有机污染物、土壤质量与人类健康的关系,殷培杰,,持久性有机污染物(persistent organic pollutants)对全球生态系统和人类健康有着极其不利的影响,本文从中国土壤环境中POPs污染的来源,POP
  • 持久性日志 此Golang包实现的持久性日志非常类似于数据库重播日志或预写日志(WAL):在对资源(任意数据结构)进行更改之前,应用程序将资源的新状态写入日志。 如果应用程序崩溃,可以重播日志以重新创建所有资源...
  • 详解MySQL事务持久性实现

    千次阅读 2021-02-02 01:58:06
    所谓MySQL事务持久性就是事务一旦提交,就是永久性的,不会因为宕机等故障导致数据丢失(外力影响不保证,比如磁盘损害)。持久性是保证了MySQL数据库的高可靠性(High Reliability),而不是高可用性(Hign Availability...

    所谓MySQL事务持久性就是事务一旦提交,就是永久性的,不会因为宕机等故障导致数据丢失(外力影响不保证,比如磁盘损害)。持久性是保证了MySQL数据库的高可靠性(High Reliability),而不是高可用性(Hign Availability)。

    MySQL的innoDB存储引擎,使用Redo log保证了事务的持久性。当事务提交时,必须先将事务的所有日志写入日志文件进行持久化,就是我们常说的WAL(write ahead log)机制。这样才能保证断电或宕机等情况发生后,已提交的事务不会丢失,这个能力称为 crash-safe。

    Redo log包括两部分,重做日志缓冲(redo log buffer)和重做日志文件(redo log file),前者是易失的缓存,后者是持久化的文件。

    举一个事务的例子:

    步骤1:begin;

    步骤2:insert into t1 …r

    步骤3:insert into t2 …

    步骤4:commit;

    这个事务的写入过程实际拆解如下:

    2144f58c20088f04c19b8bbb99dc4605.png

    重点关注在这个事务提交前,将redo log的写入拆成了两个步骤,prepare 和 commit,这就是"两阶段提交”。那么为什么要采用两阶段提交呢?

    实际上,两阶段提交是分布式系统常用的机制。MySQL使用了两阶段提交后,也是为了保证事务的持久性。Redo log 和bingo 有一个共同的数据字段,叫 XID,崩溃恢复的时候,会按顺序扫描 redo log。

    假设在写入binlog前系统崩溃,那么数据库恢复后顺序扫描 redo log,碰到只有 parepare、而没有 commit 的 redo log,就拿着 XID 去 binlog 找对应的事务,而且binlog也没写入,所以事务就直接回滚了。

    假设在写入binlog之后,事务提交前数据库崩溃,那么数据库恢复后顺序扫描 redo log,碰到既有 prepare、又有 commit 的 redo log,就直接提交,保证数据不丢失。

    这个事务要往两个表中插入记录,插入数据的过程中,生成的日志都得先写入redo log buffer ,等到commit的时候,才真正把日志写到 redo log 文件。(当然,这里不绝对,因为redo log buffer可能因为其他原因被迫刷新到redo log)。

    而为了确保每次日志都能写入日志文件,在每次将重做日志缓冲写入重做日志文件后,InnoDB存储引擎都需要调用一次fsync操作,确保写入了磁盘。

    对于redo log的持久化,可以如下图所示。

    75d6562f55b861452df35755a50a3781.png

    1)先写入redo log buffer,在蓝色区域。

    2)写入redo log file,但是还没有fsync,这时候是处于黄色的位置,处于系统缓存。

    3)调用fsync,真正写入磁盘。

    为了控制 redo log 的写入策略,InnoDB 提供了 innodb_flush_log_at_trx_commit 参数,它有三种可能取值:

    设置为 0 的时候,表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;

    设置为 1 的时候,表示每次事务提交时都将 redo log 直接持久化到磁盘;

    设置为 2 的时候,表示每次事务提交时都只是把 redo log 写到 page cache。

    binlog的写入和redo log一样,也是包括bingo cache和bingo file,同样跟上面的三色层次类似(当然,binlog是server层的,不是存储引擎层的),包括log buffer、文件系统page cache、hard disk。

    写入page cache 和 fsync到disk 的时机,是由参数 sync_binlog 控制的:

    sync_binlog=0 的时候,表示每次提交事务都只 写入文件系统的page cache,不 fsync;

    sync_binlog=1 的时候,表示每次提交事务都会执行 fsync;

    sync_binlog=N(N>1) 的时候,表示每次提交事务都写入文件系统的page cache,但累积 N 个事务后才 fsync。(如果主机发生异常重启,会丢失最近 N 个事务的 binlog 日志)

    通常我们说MySQL的“双 1”配置,指的就是sync_binlog和 innodb_flush_log_at_trx_commit 都设置成 1。也就是说,一个事务完整提交前,需要等待两次刷盘,一次是 redo log(prepare 阶段),一次是 binlog。

    以上就是MySQL的innoDB存储引擎,使用Redo log实现了MySQL事务持久性。除此之外,MySQL事务的其他特性也有着各自各样的机制来实现,详情可以观看本站的MySQL教程,展开拓展性的学习。

    展开全文
  • 主要介绍了python持久性管理pickle模块详细介绍,本文讲解了什么是持久性、一些经过 pickle 的 Python等内容,并讲给出了18个使用示例,需要的朋友可以参考下
  • Mysql持久性的实现

    千次阅读 2022-04-14 18:56:23
    1、持久性的定义 事务一旦提交,则其所有的修改将会保存到数据库当中。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit=1(如果想要关掉,要set autocommit=0,然后要手动的...

    1、持久性的定义

    事务一旦提交,则其所有的修改将会保存到数据库当中。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit=1(如果想要关掉,要set autocommit=0,然后要手动的开启关闭),表示每次执行一条sql如果没有显示启动事务语句(begin或start transaction)就会隐试的开启一个事务。

    2、实现

    持久性的实现依赖于日报系统,一个是redolog,一个是binlog,我们先认熟悉一下概念。
    1、redolog:称为重做日志,当有一条记录需要修改的时候,InnoDB引擎会先把这条记录写到redo log里面。redo log是物理格式日志,它记录的是对于每个页的修改。有一个字段是WAL(write ahead log), 意思是先写日志,再写数据,它有两个状态,一个是prepare,一个是commit。
    2、binlog:记录了mysql执行更改了所有操作,但不包含select和show这类本对数据本身没有更改的操作。但是不是说对数据本身没有修改就不会记录binlog日志。
    binlog日志的作用
    恢复(recover):数据恢复
    复制(replication):和恢复类似,用做主从复制

    这个时候你可能会有疑问,为什么需要两个log,一个不就行了吗?接下来我们对这个问题进行解释,这也是持久性实现的原理所在。
    因为MySQL是存储引擎自带的,而redo log是InnoDB特有的。最开始的时候MySQL里没有InnoDB引擎,自带的MyISAM又没有crash-safe能力,binlog日志只能用于归档。为了让MySQL具有crash-safe能力所以就引入InnoDB,而InnoDB的crash-safe能力依靠redo log,所以就有了两套日志。
    Redo log和binlog都是记录事务日志,他们有什么区别?
    1、binlog是mysql自带的,他会记录所有存储引擎的日志文件。而redo log是InnoDB特有的,他只记录改存储引擎产生的日志文件
    记录内容不同:binlog是逻辑日志,记录这个语句具体操作了什么内容。2、Redo log是屋里日志,记录的是每个页的更改情况。
    写入方式不同:redo log是循环写,只有那么大的空间。binlog采用追加写入,当一个binlog文件写到一定大小后会切换到下一个文件。
    先写redo log后写binlog会怎么样呢?假设在redo log.写完,binlog还没有写完的时候,MySQL进程异常重启。由于我们前面说过的,redo log写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行c的值是1。但是由于binlogi没写完就crash了,这时候binlog!里面就没有记录这个语句。因此,之后备份日志的时候,存起来的binlog!里面就没有这条语句。然后你会发现,如果需要用这个binlog来恢复临时库的话,由于这个语句的binlog丢失,这个临时库就会少了这一次更新,恢复出来的这一行的值就是,与原库的值不同。
    先写binlog后写redo log会怎么养呢?如果在binlog写完之后crash,由于redo log还没写,崩溃恢复以后这个事务无效,所以这一行c的值是0。但是binlog.里面已经记录了“把c从0改成1”这个日志。所以,在之后用binlog来恢复的时候就多了一个事务出来,恢复出来的这一行c的值就是1,与原库的值不同。
    所以正确的顺序应该是:
    在这里插入图片描述

    展开全文
  • 在社交网络中,维持个体活动(也称为持久性)对于理解健壮性非常重要。 先前的工作通常考虑对预先生成的网络结构的持久性; 而在社交网络中,网络结构随着现有个人的级联不活动而增长。 在这里,我们通过分析协同...
  • 持久性连接和非持久性连接

    千次阅读 2019-07-17 20:19:10
    另一种为非持久性连接。 由于不同的HTTP版本,使用不同的方式。 在这里分析一下二者的区别: 一、非持久性连接(Nonpersistent HTTP) 特点:每个TCP连接最多允许传输一个对象 HTTP 1.0使用的非持久性连接 ...

    HTTP连接有两种,一种为持久性连接;另一种为非持久性连接。

    由于不同的HTTP版本,使用不同的方式。

    在这里分析一下二者的区别:

    一、非持久性连接(Nonpersistent HTTP)

    特点:每个TCP连接最多允许传输一个对象

               HTTP 1.0使用的非持久性连接

    过程:

     

    响应时间分析与建模

    我们需要知道:

    RTT (Round Trip time):从客户端发送一个很小的数据包到服务器并返回所经历的时间。

    响应时间(Response time):

                  a.发起建立TCP连接:1个RTT

                  b.发送HTTP请求消息到HTTP响应消息的前几个字节到达:  1个RTT

                  c.响应消息中所含文件/对象的传输时间 

          Total=2RTT+文件发送时间

    非持久性连接的问题

        每个对象需要2个RTT

        操作系统需要为每个TCP连接开销资源

    二、持久性连接

    发送响应后,服务器保持TCP连接的打开

    后续的HTTP消息可以通过这个连接发送

    (1)无流水(pipelining)的持久性连接

    客户端只有收到前一个响应后才发送新的请求

    每个被引用的对象耗时1个RTT

     (2)带有流水机制的持久性连接

    HTTP 1.1的默认选项

    客户端只要遇到一个引用对象就尽快发出请求

    理想情况下,收到所有的引用对象只需耗时约1个RTT

     

    感谢大家的学习,希望我们一起讨论,一起努力,加油吧!

     

     

    展开全文
  • 基于对现有服务等级协议(service-level agreement,SLA)的调研与分析,针对目前云存储持久性定义不完善,且缺乏客观的第三方检测工具的问题,分别从概念描述与形式化表达两个角度进一步规范了云存储持久性的定义;...
  • 持久性模糊:持久性内存中的高效事务
  • 该存储库收集有关恶意软件持久性机制的检测,响应和日志收集的各种当前分散的信息。 简而言之,我们寻找不同恶意软件家族之间如此普遍的事物之一:能够在目标主机上持久存在的能力。 而且,与误导性术语“无文件”...
  • Rust MQTT Redis 持久化存储paho-mqtt-redis 使用 Redis 作为 Paho MQTT Rust 客户端的持久性存储库。 MQTT 是一种轻量级、分布式、消息传递系统,专门为具有不可靠网络连接的设备量身定制。 它实现更高服务质量的...
  • 持久性模块间态射诱导的持久性部分匹配_Persistence Partial Matchings Induced by Morphisms between Persistence Modules.pdf
  • 计算机研究 -基于持久性聚类和多签名的网格分割算法研究.pdf
  • 办公持久性 使用Powershell测试基于Office的持久性方法 该脚本允许您测试《办公室持久性添加机会》中提到的基于Office的持久性方法。 支持方式: WLL Word的“加载项” 用于Excel的XLL“加载项” 适用于Excel的...
  • 用于正交持久性 JavaScript 的 nodb.js 在上一章中,我们介绍了 V8Ken,一个正交持久的 JavaScript 引擎。 这是一个带有持久堆的 JavaScript 引擎,这意味着如果引擎崩溃并且我们重新启动它,堆中的所有对象仍然可以...
  • 目的 为履行持久性有机污染土壤环境国际管理公约,研究POPs土壤相关标准制定方法。方法 通过文献查阅,比较分析国际上尤其是发达国家在持久性有机污染土壤的修复标准制定修订等方面的相关动态。结果 指出中国制定...
  • JXA中的macOS持久性方法和其他工具的集合相关博客文章: 用法 在Mythic中(Apfell代理): jsimport ( Selected file ) jsimport_call < NameOfPersistenceScript> ( ScriptArguments ) 项目 描述 用法 人工...
  • MySQL究竟是如何做到持久性的?

    千次阅读 多人点赞 2020-04-07 23:03:58
    我们学习事务中,对于持久性(durability)是这样定义的:事务一旦提交,则其所有的修改将会保存到数据库当做。即使此时系统崩溃,修改的数据也不会丢失。同时数据库连接中,默认有一个参数autocommit=1表示每次执行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 619,116
精华内容 247,646
关键字:

持久性

友情链接: 图像程序.zip