a commit git 参数是什么意思_在DB2中Commit是什么意思?

COMMIT在数据库管理系统中是确保事务原子性和持久性的关键操作。它将一组数据库操作捆绑在一起,使得要么全部成功,要么全部失败。当提交发生时,数据的更改即使在系统故障后也会被永久保存。如果在事务中发生错误,如示例中的table_b更新失败,系统会回滚所有更改。此外,频繁提交有助于管理长时间运行操作时的并发和事务日志文件大小。崩溃恢复过程中,数据库会检查事务日志并确定哪些事务已完成,哪些需要回滚。
摘要由CSDN通过智能技术生成

什么是COMMIT

数据库管理系统具有提交的概念。这个概念与将一组动作分组在一起有关,以使它们都作为一个组成功或失败。这代表在著名的一个交易系统的ACID属性。A代表原子性–表示事务可能由多个小部分组成,但是如果这些部分之一失败,则整个事务也必须对数据进行任何更改。此概念在关系数据库中尤其重要,该关系数据库可以规范化为许多较小的表,从而导致事务不仅仅是在单个位置中包含单个更新。

假定应用程序未打开自动提交,以下内容代表事务和提交使用的示例。

BEGIN TRANSACTION

select columns from table a where id < NNNN;

update table_a set col1=1234;

update table_b set col2=5678;

insert into table_c .... ;

commit work;

END TRANSACTION

在上面的示例中,如果table_b的更新语句失败,则应用程序将检测到该错误,并且将永远不会执行commit work语句,或者可能执行回滚语句。DB2将更新回滚到table_a并将插入回滚到table_c。

提交还与ACID-持久性中的D有关。持久性属性意味着一旦发生提交,即使断电或发生其他可能的故障,数据也会持久保存(传统上在磁盘上)。这是数据库具有事务日志的主要原因。

何时发生

缺省情况下,DB2命令行通常已启用自动提交。这意味着,如果您只是从命令行发出db2命令,那么通常不必提交。许多应用程序以其他方式管理提交,包括一些GUI数据库管理或访问应用程序。

在设计应用程序时,设计人员和开发人员必须确定应按要求进行的提交。

DBA还提倡在长时间运行的操作(例如数据加载或大型删除)期间进行频繁提交。在很大程度上,这是因为事务日志文件不会填满。

频繁提交支持最高级别的并发数据访问。

COMMIT做什么

DB2使用一种称为预写日志记录的方法。这意味着在发生提交时,数据将直接写入事务日志。数据通过缓冲池异步到达表等磁盘上。提交不会将数据写出到表本身。这样可以节省时间-最终用户无需坐等大量I / O。

附带说明-DB2将重做和撤消数据都写入事务日志中-不同于Oracle,重做和撤消日志是分开的东西。

DB2有一个称为日志缓冲区的内存缓冲区。更改数据后,无论是否提交,都会将其写入日志缓冲区。然后,当日志缓冲区已满或任何连接进行提交时,日志缓冲区都会写出到磁盘。在将提交从日志缓冲区外部化到磁盘上的日志文件之前,提交不会成功。

发生这种情况时,可以将未提交的数据从日志缓冲区写入日志文件。但是DB2跟踪并知道哪些事务已提交,哪些事务未提交。

ba3a6f3f8bb49c66e73b8ddbac2070b9.png

在上图中,代理将提交记录写入日志缓冲区(1)。然后,记录器进程根据MINCOMMIT和其他因素立即或不久将日志缓冲区写入磁盘(2)。代理等待记录器进程的确认,即代理提交的日志记录已被外部化到磁盘(3),直到该提交记录为止。一次可能有多个座席在等待。由于这是最终用户在等待物理I / O的地方,因此将最快的磁盘应用于事务日志文件是很有意义的。

请注意,提交不会涉及缓冲池或表空间数据。语句通过后,他们已经将撤消和重做的所有信息都写入了日志缓冲区,因此它已经存在或在事务日志文件中等待提交。

如果数据库崩溃,则在恢复数据库时,它将经历一个称为崩溃恢复的过程,该过程将查看事务日志文件并前滚所有需要的事务。在完成崩溃恢复的“前进阶段”之后,它将继续并回滚日志文件中尚未提交的所有事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值